客户端访问数据的查询请求和写请求分别给不同的数据服务器处理
因为数据库的“写”(写10000条数据到oracle可能要3分钟)操作是比较耗时的。
但是数据库的“读”(从oracle读10000条数据可能只要5秒钟)。
所以读写分离,解决的是,数据库的写入,影响了查询的效率。
客户端访问主从架构数据库服务器时,会执行读写操作,其中读操作会处理非常快,而写入操作可能会比较慢,应对高并发,就要应用mysql读写分离架构.
mysql读写分离架构通过一台mysql代理服务器来将客户端的读和写的请求分发给主数据库和从数据库,因为从数据库会同步主服务器的数据,所以从服务器适合执行读取,主服务器适合写入操作,由此来解决高并发的问题.
读写分离需要的服务器架构为 MySQL主从复制结构 并且需要一台无数据库的服务器作为代理服务器,所以准备三台服务器(实际生产环境中会有多台从库服务器,这里只列举一台)
主库服务器:192.168.4.1/24
从库服务器:192.168.4.2/24
代理服务器:192.168.4.3/24
客户端:192.168.4.10/24
一 : 主从服务器做主从复制(详细在mysql主从同步)
二 : 代理服务器部署maxscale服务
软件下载地址
1.通过rpm -ivh安装:
192.168.4.3 ] # rpm -ivh maxscale-2.1.2-1.rhel.7.x86_64.rpm
2.修改主配置文件 :
192.168.4.3 ] # vim /etc/maxscale.cnf
: set nu //开启行号
9 [maxscale]
10 threads=auto //更改第十行为auto自动
将第18行到第22行复制 粘贴到23行下面
这5行为指定数据库主从服务器 我们用到两台所以只写两台
18 [server1]
19 type=server
20 address=192.168.4.1
21 port=3306
22 protocol=MySQLBackend
23
24 [server1]
25 type=server
26 address=192.168.4.2
27 port=3306
28 protocol=MySQLBackend
定义要监视的数据库节点 :
36 [MySQL Monitor]
37 type=monitor
38 module=mysqlmon
39 servers=server1,server2 //改为server1,server2
40 user=maxscalemon //改为maxscalemon(监控用户)
41 passwd=随意 //密码 自己随意写 记住就行
42 monitor_interval=10000
定义读写分离的数据库节点 :
首先将53~59注释掉 因为这里定义的是只读的数据库
我们不需要所以注释掉
64 [Read-Write Service]
65 type=service
66 router=readwritesplit
67 servers=server1,server2 //改为server1,server2
68 user=maxscalerouter //改为maxscalerouter (路由用户)
69 passwd=随意 //密码还是随意 记住就行
70 max_slave_connections=100%
定义读写分离服务端口 :
首先将86~90注释掉 因为我们把只读的数据库关掉了
所以这个也不需要开
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
103 port=1234 //添加一条端口号 这里随意(别用其他服务的端口号就ok)
: wq //保存并退出
三 : 在主,从服务器创建授权用户:
(因为主从服务器已经同步,所以只在一台服务器上面操作即可)
mysql> grant replication slave,replication client on *.* to maxscalemon@"%" identified by "Wjl4199..";
// 为监控用户授权 用户名,密码为代理服务器主配置文件里的监控用户名和密码
grant select on mysql.* to maxscalerouter@"%" identified by "Wjl4199..";
// 为路由用户授权 用户名,密码为代理服务器主配置文件里的监控用户名和密码
四 : 在代理服务器开启maxscale服务
192.168.4.3 ] # maxscale -f /etc/maxscale.cnf //启动服务
192.168.4.3 ] # netstat -antup |grep 4006 //查看maxscale端口是否开启
192.168.4.3 ] # netstat -antup |grep 1234 //查看自己设置的端口是否开启
192.168.4.3 ] # netstat -antup |grep maxscale //查看所有maxscale服务
tcp 0 0 192.168.4.57:46968 192.168.4.51:3306 ESTABLISHED 1257/maxscale
tcp 0 0 192.168.4.57:49488 192.168.4.52:3306 ESTABLISHED 1257/maxscale
tcp6 0 0 :::4006 :::* LISTEN 1257/maxscale
tcp6 0 0 :::1234 :::* LISTEN 1257/maxscale
结果如上说明服务开启成功