1、概述:
mysql
MySQL数据库主从结构配置之后,正常状况下数据库的全部读写操做所有都在主数据库上面,从数据库仅仅做为数据备份使用,显然没法有效的使用服务器资源,那么实现读写分离的需求就不可避免。程序员
2、拓扑图说明:web
如上图所示,本文要实现的是读MySQL数据库的写入操做(增删改)等在Master服务器(192.168.4.10)上面实现,而对MySQL数据库的读取操做(查询)等在Slave服务器(192.168.4.20)上面完成。sql
若是在程序员编程时建立两个数据库链接Connection,在程序中对数据库的读取操做使用一个数据库Connection,而对数据库的写入操做使用另一个数据库Connection,也能够实现对数据库的读写分离。可是显然这种实现方式不够灵活,所以通常不使用这种方式。数据库
本文中将使用MaxScale软件来实现MySQL数据库的读写分离。MaxScale是由http://www.skysql.com/开发的一款MySQL数据库中间件,支持高可用,负载均衡,具备良好的可扩展性,高性能的基于事件驱动的同时具备代理和管理功能的中间件。该软件将部署在拓扑图中的MySQL代理服务器(192.168.4.100)上,客户机的访问请求指向MySQL代理服务器,该服务器将把对数据库的写入操做指向到192.168.4.10,对数据库的读取操做指向到192.168.4.20。编程
3、配置说明:vim
一、MaxScale配置服务器
(1)修改配置文件:负载均衡
[root@100 ~]# vim /etc/maxscale.cnfsocket
A、指定数据库服务器
[server1]
type=server
address=192.168.4.10
port=3306
protocol=MySQLBackend
[server2]
type=server
address=192.168.4.20
port=3306
protocol=MySQLBackend
B、指定要监控的数据库服务器
[MySQL Monitor]
type=monitor
module=mysqlmon
servers=server1,server2
user=scalemon #代理服务器监控服务链接数据库服务器的用户名(须要在数据库服务器上面受权)
passwd=123456 #代理服务器监控服务链接数据库服务器的密码
monitor_interval=10000 //活跃检查时间间隔,10000毫秒=10秒
C、指定读写分离在哪些主机之间执行
[Read-Write Service]
type=service
router=readwritesplit
servers=server1,server2
user=maxscale #用于检查用户链接数据库时用的受权用户是否合法的用户名(须要对mysql数据库有select权限)
passwd=123456 #用于检查用户链接数据库时用的受权用户是否合法的用户名
max_slave_connections=100%
D、定义管理服务和方式(不用改)
[MaxAdmin Service]
type=service
router=cli
E、只读服务器配置选项(不用,所有注释掉)
[Read-Only Service]
#type=service
#router=readconnroute
#servers=server1
#user=myuser
#passwd=mypwd
#router_options=slave
#[Read-Only Listener]
#type=listener
#service=Read-Only Service
#protocol=MySQLClient
#port=4008
F、读写分离的监听端口配置
[Read-Write Listener]
type=listener
service=Read-Write Service
protocol=MySQLClient
port=4006 //客户端读写分离服务访问端口
G、管理服务的监听端口配置
[MaxAdmin Listener]
type=listener
service=MaxAdmin Service
protocol=maxscaled
socket=default
port=4009 //管理服务使用的端口
mysql > grant replication slave,replication client on *.* to scalemon@"%" identified by "123456";
mysql > grant select on mysql.* to maxscale@"%" identified by "123456";
三、在代理服务器上面启动服务并检查数据库服务器状态
(1)启动服务:
[root@100 ~]# maxscale --config=/etc/maxscale.cnf
(2)检查状态
[root@100 ~]# maxadmin -uadmin -pmariadb -P4009
MaxScale> list servers
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168.4.11 | 3306 | 0 | Master, Running
server2 | 192.168.4.12 | 3306 | 0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
四、验证测试
在192.168.4.120上使用受权用户链接代理服务器(192.168.4.100:4006),在从数据库服务器(192.168.4.20)上面Insert一些数据,在客户端能够读到,那么说明客户端读数据时是在从数据库(192.168.4.20);在192.168.4.120上使用受权用户链接代理服务器(192.168.4.100:4006),Insert一些数据成功,在主从数据库上面均可以看到,说明客户端写数据时是在主数据库服务器(192.168.4.10)上面。