您的位置:首页 > 数据库 > MySQL

mysql atlas 实现读写分离分担数据库压力

2015-09-29 17:03 633 查看
mysql 读写分离都是在mysql cmake 和 mysql master,slave 基础上的服务,如果你还不太了解mysql 主从 或者mysql cmake 安装的话,可以先看看我之前的博客。

make cmake 安装 :

/article/9781022.html

make 主从同步 :

/article/9781056.html

下面先介绍下mysql 主从同步及读写分离

大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够。到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃。这时候,我们会考虑如何减少数据库的联接,一方面采用优秀的代码框架,进行代码的优化,采用优秀的数据缓存技术如:memcached,如果资金丰厚的话,必然会想到假设服务器群,来分担主数据库的压力。Ok切入今天正题,利用MySQL主从配置,实现读写分离,减轻数据库压力。

好,下面开始!

先丢个图出来看看大致环境,我在百度找的,这种图实在太多了…就懒得做了!

mysql master:192.168.0.216:3306

mysql slave :192.168.0.225:3306

atlas :192.168.0.225

其实atlas有两个port,分别为工作端口和管理端口



在这里呢,mysql-proxy就是atlas,然后mysql-master和mysql-slave也就是mysql主和从了。

下面开始atlas配置

1、安装atlas

rpm -ivh Atlas-2.2.el6.x86_64.rpm

2、atlas目录结构

ls /usr/local/mysql-proxy/,下面分别有四个文件:
bin、conf 、lib 、log

bin     : 该目录存放atlas启动程序,还有加密脚本
conf    : 该目录则存放atlas.conf配置档了,可以有多个实例
lib     : 该目录存放程序的一些库文件及依赖文件
log     : 该目录则存放实例产生的日志


3、配置atlas实现读写分离

atlas.conf文档是在是太易懂了,而且介绍也特别清楚,conf档我直接贴出来

vim /usr/local/mysql-proxy/conf/test.conf
[mysql-proxy]

#管理接口的用户名
admin-username = user

#管理接口的密码
admin-password = pwd

#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
proxy-backend-addresses = 192.168.0.216:3306

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

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

#设置Atlas的运行方式,设为true时为守护进程方式,设为false时为前台方式,一般开发调试时设为false,线上运行时设为true,true后面不能有空格。
daemon = true

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

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

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

#日志存放的路径
log-path = /usr/local/mysql-proxy/log

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

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

#Atlas监听的工作接口IP和端口
proxy-address = 192.168.0.225:1234

#Atlas监听的管理接口IP和端口
admin-address = 192.168.0.225:2345

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


4、启动前检查

ok! 配置档已经完成,那么在启动atlas之前,我们看看mysql是否同步! 如果主从出现问题那对于用户来说写入的数据未必就读的到了!

主库:

mysql> show slave hosts;

+———–+—————+——+———–+————————————–+

| Server_id | Host | Port | Master_id | Slave_UUID |

+———–+—————+——+———–+————————————–+

| 2 | 192.168.0.225 | 3306 | 1 | 9759ab9b-fcd2-11e4-b8ce-0050568289d0 |

+———–+—————+——+———–+————————————–+

1 row in set (0.00 sec)

从库:

mysql> show slave status\G;

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

5、启动atlas

[root@hongxue_225 conf]# /usr/local/mysql-proxy/bin/mysql-proxyd test start

OK: MySQL-Proxy of test is started

其实这个时候atlas是启动了两个进程,一个是工作接口,而另一个则为管理接口,我们连接管理端口来查看atlas中主从状态是否已经为up

[root@hongxue_225 conf]# mysql -uuser -ppwd -h192.168.0.225 -P1234

mysql> select * from backends;

+————-+——————–+——-+——+

| backend_ndx | address | state | type |

+————-+——————–+——-+——+

| 1 | 192.168.0.216:3306 | up | rw |

| 2 | 192.168.0.225:3306 | up | ro |

+————-+——————–+——-+——+

2 rows in set (0.00 sec)

可以看到,server-id为1,state为up,则type为rw

而从库呢,server-id为2,state为up,则type为ro

这时候主从同步及读写分离都已经完成!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: