MySQL读写分离(Atlas和MySQL-proxy)

一、阿里云使用Atlas从外网访问MySQL(RDS)

(同样的方式修改配置文件可以实现代理也可以实现读写分离,具体看使用场景)

1.在跳板机上使用Atals中转访问RDS不会影响效率,不要认为使用Atals后连接数据库会慢,连接数会疯狂占用,事实情况是刚好相反。

Atlas不处理主从数据库数据同步,只是个负载均衡的连接池工具,主从同步请使用其他工具另行实现,本文只为了外网访问RDS(流量免费),实现连接池,有效利用RDS连接数。

Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平 台,每天承载的读写请求数达几十亿条。

主要功能:
1)读写分离

2)从库负载均衡

3)IP过滤

4)自动分表

5)DBA可平滑上下线DB

6)自动摘除宕机的DB

2.下载:

centos 5.x/6.x:

https://github.com/Qihoo360/Atlas/releases/download/2.1/Atlas-2.1.el5.x86_64.rpm
(centos5.x)

https://github.com/Qihoo360/Atlas/releases/download/2.1/Atlas-2.1.el6.x86_64.rpm
(centos6.x)

debian/ubuntu(ubuntu未测试)

https://github.com/Qihoo360/Atlas/releases/download/2.1/Atlas-2.1-debian6.0-x86_64.deb
(debian6)

https://github.com/Qihoo360/Atlas/releases/download/2.1/Atlas-2.1-debian7.0-x86_64.deb
(debian7,ubuntu建议使用该版本)

3.安装:

centos:

rpm -ivh Atlas-2.1.el6.x86_64.rpm

debian/ubuntu

dpkg -i Atlas-2.1-debian7.0-x86_64.deb

安装目录为
/usr/local/mysql-proxy

4.配置Atlas:

在/usr/local/mysql-proxy/conf目录新建配置文件,例如:rds.cnf(文件名称就是实例名称)内容如下:

1

[mysql-proxy]

2

# 符号#后的内容为注释

3

# 用来管理atals,非mysql,随意配置,切记密码安全

4

admin-username=管理员用户名

5

admin-password=password

6

#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔

7

#例如这里设置的是一个rds的内网实例地址和端口

8

proxy-backend-addresses =
xxxx.mysql.rds.aliyuncs.com:3306

9

#Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔

10

#阿里云RDS不支持主从,所以不配置从库

11

#proxy-read-only-backend-addresses
= 127.0.0.1:3305@1

12

#用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,下行的user1和user2为示例,将其替换为你的MySQL的用户名和加密密码!

13

pwds =
user:JOyWiSot5BiTOePy0weX/Q==

14

# 下文有详解解释

15

#设置Atlas的运行方式,设为true

16

daemon = true

17

# 设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出 后会自动将其重启,设为false时只有worker,没有monitor,一般开发调试时设为false,线上运行时设为true

18

keepalive = true

19

#工作线程数,对Atlas的性能有很大影响,可根据情况适当设置

20

event-threads = 8

21

#日志级别,分为message、warning、critical、error、debug五个级别

22

log-level = message

23

#日志存放的路径

24

log-path =
/usr/local/mysql-proxy/log

25

#SQL日志的开关,可设置为OFF、ON、REALTIME,OFF代表不记录SQL日志,ON代表记录SQL日志,REALTIME代表记录SQL日志且实时写入磁盘,默认为OFF

26

#sql-log = OFF

27

#实例名称,用于同一台机器上多个Atlas实例间的区分

28

#instance = test

29

#Atlas监听的工作接口IP和端口 这个就是我们以后访问的mysql的端口

30

proxy-address = 0.0.0.0:1234

31

#Atlas监听的管理接口IP和端口 如无必要建议设置为127.0.0.1

32

admin-address = 127.0.0.1:2345

33

#分表设置,此例中person为库名,mt为表名,id为分表字段,3为子表数量,可设置多项,以逗号分隔,若不分表则不需要设置该项

34

#tables = person.mt.id.3

35

#默认字符集,设置该项后客户端不再需要执行SET NAMES语句

36

#charset = utf8

37

#允许连接Atlas的客户端的IP,可以是精确IP,也可以是IP段,以逗号分隔,若不设置该项则允许所有IP连接,否则只允许列表中的IP连接

38

#client-ips = 127.0.0.1, 192.168.1

                                                                   

atlas需要手动设置用户和密码,第三步配置的用户名和密码现在有用了。

生成加密的密码:

1

/usr/local/mysql-proxy/bin/encrypt
密码

2

......这里是加密后的密码,复制

然后atlas的pwds配置是这样的:

pwds = 用户名:加密后的密码,用户名2:加密后的密码

5.启动:

1

/usr/local/mysql-proxy/bin/mysql-proxyd
实例名称(自定义名称) start

2

# start 启动

3

# stop 停止

4

# restart 重启

         

现在可以在外网访问ecs的ip:1234(上面配置的端口),使用刚才配置的用户名和密码来访问内网后端的rds。

二、使用MySQL-Proxy实现MySQL读写分离

1.安装lua,libevent,check,mysql-client
2.设置环境变量(安装mysql-proxy需要)
#vi /etc/profiles
export LUA_CFLAGS="-I/usr/local/lua/include" LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" LDFLAGS="-L/usr/local/libevent/lib -lm"
export CPPFLAGS="-I/usr/local/libevent/include"
export CFLAGS="-I/usr/local/libevent/include"
3.安装mysql-proxy

#tar -zxvf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz

#cp mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy

4.启动mysql-proxy
#mysql-proxy --proxy-backend-addresses=192.168.1.100:3306 --proxy-read-only-backend-addresses=192.168.1.101:3306 --proxy-lua-script=/usr/local/mysql-proxy/share/mysql-proxy/rw-splitting.lua &
注:如果正常情况下启动后终端不会有任何提示信息,启动两个端口4040和4041,前者用于SQL转发,后者用于管理mysql-proxy。如果有多个slave可以依次在后面添加。mysql-proxy会自动屏蔽后端发生故障的mysql-slave。

MySQL-Proxy的配置文件还未细研究,这里只简单的实现配置启动。

[记录]MySQL读写分离(Atlas和MySQL-proxy)的更多相关文章

  1. Mysql读写分离方案-MySQL Proxy环境部署记录

    Mysql的读写分离可以使用MySQL Proxy和Amoeba实现,其实也可以使用MySQL-MMM实现读写分离的自动切换.MySQL Proxy有一项强大功能是实现"读写分离" ...

  2. MysqL读写分离的实现-Mysql proxy中间件的使用

    为什么要架设读写分离,这里不做多余的说明,想了解具体原理,请百度或者参考其他帖子.在这里只做大概的配置说明,测试中使用三台服务器 192.168.136.142   主服务器 192.168.136. ...

  3. mysql读写分离的解决方案

    来源于网上整理 http://yanwt.iteye.com/blog/1460780 现有三种解决方式实现mysql读写分离 1 程序修改mysql操作类 优点:直接和数据库通信,简单快捷的读写分离 ...

  4. Mysql 高可用(MHA)-读写分离(Atlas)-分布式架构(Mycat)

    Mysql 高可用(MHA)-读写分离(Atlas) 1. 搭建主从复制(一主两从) 1.1 准备环境 1 主库:10.0.0.51/db01 2 从库:10.0.0.52/db02,10.0.0.5 ...

  5. Mysql读写分离方案-Amoeba环境部署记录

    Mysql的读写分离可以使用MySQL Proxy,也可以使用Amoeba.Amoeba(变形虫)项目是一个类似MySQL Proxy的分布式数据库中间代理层软件,是由陈思儒开发的一个开源的java项 ...

  6. 使用Atlas实现MySQL读写分离+MySQL-(Master-Slave)配置

    参考博文: MySQL-(Master-Slave)配置  本人按照博友北在北方的配置已成功  我使用的是 mysql5.6.27版本. 使用Atlas实现MySQL读写分离 数据切分——Atlas读 ...

  7. Mysql读写分离-Amoeba Proxy

    参考:http://www.linuxidc.com/Linux/2015-10/124115.htm 一个完整的MySQL读写分离环境包括以下几个部分: 应用程序client database pr ...

  8. mysql读写分离[高可用]

    顾名思义, 在mysql负载均衡中有多种方式, 本人愚钝,只了解驱动中间件和mysql_proxy两种方式, 对于驱动,利用的是ReplicationDriver,具体请看远哥的这篇文章: MySQL ...

  9. mysql读写分离 主从同步

    MySQL主从复制与读写分离的实现 转载 2013年01月17日 18:20:12   MySQL主从复制与读写分离 MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy) ...

随机推荐

  1. Spring学习之路三——第一个Spring程序(体会IoC)

    体会IoC:Spring通过一种称作控制反转(IoC)的技术促进了松耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象.你可以认为IoC与JN ...

  2. Python实现一个简单的微信跳一跳辅助

    1.  前言 微信的跳一跳相信大家都很熟悉了,而且现在各种外挂.辅助也是满天飞,反正本人的好友排行榜中已经是八九百都不足为奇了.某宝上一搜一堆结果,最低的居然只要3块多,想刷多少分就刷多少分,真是离谱 ...

  3. EL表达式遍历Map集合

    <% Map<String,String> map2 = new HashMap(); map2.put("a","hello world") ...

  4. linux_磁盘分区

    分区并没有数据内容只是改变分区表,保存在0磁头,0磁道1扇区除MBR引导后64bytes中,只能有4个组分区,4个以上要一个扩展分区 引导MBR,保存在446字节中 磁盘想要存放数据,首先要分区,可以 ...

  5. 通过编程为Outlook 2007添加邮件规则

    Outlook 所支持的邮件规则相当有用,我们经常需要针对某些特征的邮件做特殊的处理.例如将其移动到某个特定文件夹,或者删除它等等. Outlook所支持的邮件规则主要两大类:收到邮件时和发送邮件时 ...

  6. IIS使用十大原则,(IIS过期时间,IIS缓存设置) 【转载】

    1. 自定义错误页虽然自定义错误页很简单,但只有少数管理员有效地利用了它.管理员可以在MMC中将HTTP错误信息映像到服务器上的绝对URL或是某个文件,更为详细的信息可以在这里找到.如果你嫌这太麻烦, ...

  7. SSMS 2005 连接 SQL SERVER 2008问题

    用本机的 Microsoft SQL Server Management Studio 2005 客户端连接数据库服务器时报错:"This version of Microsoft SQL ...

  8. 【转】 C++易混知识点4: 自己编写一个智能指针(Reference Counting)学习auto_ptr和reference counting

    这篇文章建大的介绍了如何编写一个智能指针. 介绍: 什么是智能指针?答案想必大家都知道,智能指针的目的就是更好的管理好内存和动态分配的资源,智能指针是一个智能的指针,顾名思义,他可以帮助我们管理内存. ...

  9. Git远程管理[五]

    标签(linux): git 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 相关命令 git clone https://github.com/guohongz ...

  10. 是否编码输出html字符

    template.config(name, value)方法用于更改引擎的默认配置. 其中字段escape,类型为boolean,默认为true. 首先,我们不修改配置信息输出一段带有html标签的字 ...