本文共 3084 字,大约阅读时间需要 10 分钟。
mysql 读写分离都是在mysql cmake 和 mysql master,slave 基础上的服务,如果你还不太了解mysql 主从 或者mysql cmake 安装的话,可以先看看我之前的博客。
make cmake 安装 :
make 主从同步 :下面先介绍下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.rpm2、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日志且实时写入磁盘,默认为OFFsql-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 这时候主从同步及读写分离都已经完成!