- 什么是读写分离
把客户端访问数据时的查询请求和写请求分别给不同的数据库服务器处理
- 为什么要做读写分离
1. 减轻单台数据库服务器的并发访问压力
2. 提高数据库服务器的硬件利用率
3. 读写分离是集群的基础需求
- 怎样实现数据的读写分离
使用mysql中间件提供的服务实现
常用的中间件:mycat、mysql-proxy、maxscale
中间件的原理:在client和server之间做一个拦截
- 使用中间件来实现读写分离的缺点
1. 单点故障
2. 当访问量很大时,会造成网络瓶颈
- 读写分离的结构(主从结构是基础)
client
|
代理服务器
|
__________________________________
write read
| |
master slave
- 使用maxscale实现数据的读写分离
在代理服务器上:
下载安装软件包:maxscale
修改配置文件/etc/maxscale.cnf
]# vim /etc/maxscale.cnf
.. ..
9 [maxscale]
10 threads=auto //服务运行后开启线程的数量
.. ..
# 定义数据库服务器
18 [名称]
19 type=server
20 address=数据库服务器的ip地址
21 port=3306
22 protocol=MySQLBackend
.. ..
# 定义监控的数据库服务器
36 [MySQL Monitor]
37 type=monitor
38 module=mysqlmon
39 servers=数据库服务器列表
40 user=监视数据库服务器时连接的用户名
41 passwd=用户密码
42 monitor_interval=10000
.. ..
# 不定义只读服务
53 #[Read-Only Service]
54 #type=service
55 #router=readconnroute
56 #servers=server1
57 #user=myuser
58 #passwd=mypwd
59 #router_options=slave
.. ..
# 定义读写分离服务
64 [Read-Write Service]
65 type=service
66 router=readwritesplit
67 servers=数据库服务器列表
68 user=用户名 #验证连接代理服务器访问数据库服务器的用户是否存在
69 passwd=密码
70 max_slave_connections=100%
.. ..
# 定义管理服务
76 [MaxAdmin Service]
77 type=service
78 router=cli
.. ..
# 不指定只读服务使用的端口号
86 #[Read-Only Listener]
87 #type=listener
88 #service=Read-Only Service
89 #protocol=MySQLClient
90 #port=4008
.. ..
#定义读写分离服务使用的端口号
92 [Read-Write Listener]
93 type=listener
94 service=Read-Write Service
95 protocol=MySQLClient
96 port=4006 #设置使用的端口
.. ..
#定义管理服务使用的端口
98 [MaxAdmin Listener]
99 type=listener
100 service=MaxAdmin Service
101 protocol=maxscaled
102 socket=default
.. ..
根据配置文件的设置,在数据库服务器上添加授权用户
mysql>grant replication slave,replication client on *.* to 监控用户名@'%' identified by "123456";
mysql>grant select on mysql.* to 连接用户@'%' identified by "123456";
启动服务
]# maxscale -f /etc/maxscale.cnf
查看服务进程和端口号
]# netstat -antplu | grep maxscale
查看进程
]# ps -C maxscale
测试配置
]# maxadmin -P端口号 -uadmin -p密码