目录
为什么要进行读写分离?
提高系统性能
提高数据可用性
提高系统的容错能力
降低系统成本
如何配置mysql读写分离
部署mysql一主一从架构
主从架构的搭建
创建代理服务器的授权用户
部署MySQL代理服务器
部署maxscale服务
启动服务
测试配置
查看监控信息
客户测试配置
主服务器添加数据
验证读写分离
在从服务器插入数据
当数据库并发访问量较大时,读写分离可以有效地减轻主库的负担,提高系统的整体性能和并发处理能力。
由于主库可以进行写入操作和备份操作,如果系统只有一个主库,当主库出现故障时,整个系统将会瘫痪。而读写分离可以提高数据的可用性,减少故障的风险。
在主从架构中,如果主库出现故障,系统可以自动切换到从库上,保证系统的可用性。
使用读写分离技术可以将成本低廉的从库用于读取操作,从而降低系统成本。
MySQL主从同步_update_now1的博客-CSDN博客
创建监控用户
mysql> grant replication slave,replication client on *.* to maxscalemon@"%" identified by "123qqq...A";
创建授权用户
mysql> grant select on mysql.* to maxcalerouter@"%" identified by "123qqq...A";
上传maxscale-2.1.2-1.rhel.7.x86_64.rpm包,进行安装
修改配置文件
[root@client ~]# vim /etc/maxscale.cnf
[server1] 定义master主机
type=server
address=192.168.4.51
port=3306
protocol=MySQLBackend
[server2] 定义数据库slave服务器
type=server
address=192.168.4.52
port=3306
protocol=MySQLBackend
...
[MySQL Monitor] 定义监控的服务器及用户名密码
type=monitor
module=mysqlmon
servers=server1,server2
user=maxscalemon
passwd=123qqq...A
monitor_interval=10000
...
[Read-Write Service] 定义读写分离服务的路由用户
type=service
router=readwritesplit
servers=server1,server2
user=maxscalerouter
passwd=123qqq...A
max_slave_connections=100%
...
[MaxAdmin Listener] 定义管理服务的端口号
type=listener
service=MaxAdmin Service
protocol=maxscaled
socket=default
port=4016
[root@client ~]# yum -y mariadb
[root@client ~]# maxscale -f /etc/maxscale.cnf
[root@client ~]# ss -ntulp |grep :4006 读写分离端口号
tcp LISTEN 0 128 :::4006 :::* users:(("maxscale",pid=10842,fd=11))
[root@client ~]# ss -ntulp |grep :4016 管理服务端口号
tcp LISTEN 0 128 :::4016 :::* users:(("maxscale",pid=10842,fd
[root@client ~]# maxadmin -uadmin -pmariadb -P 4016
MaxScale> list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168.4.51 | 3306 | 0 | Master, Running
server2 | 192.168.4.52 | 3306 | 0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
mysql> create database gamedb;
Query OK, 1 row affected (0.00 sec)
mysql> create table gamedb.a(id int);
Query OK, 0 rows affected (0.01 sec)
mysql> grant select,insert on gamedb.* to gaga@"%" identified by "123qqq...A";
Query OK, 0 rows affected, 1 warning (0.00 sec)
客户端连接代理服务器访问数据
[root@host53 ~]# mysql -h192.168.4.50 -P4006 -ugaga -p123qqq...A
mysql> desc gamedb.a;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
1 row in set (0.04 sec)
mysql> insert into gamedb.a values(55);
客户机查看
mysql> select * from gamedb.a;
+------+
| id |
+------+
| 99 |
| 55 |
+------+
主服务器查看
mysql> select * from gamedb.a;
+------+
| id |
+------+
| 99 |
+------+