MySQL读写分离

目录

为什么要进行读写分离?

提高系统性能

提高数据可用性

提高系统的容错能力

降低系统成本

如何配置mysql读写分离

部署mysql一主一从架构

主从架构的搭建

创建代理服务器的授权用户

部署MySQL代理服务器

部署maxscale服务

启动服务

测试配置

查看监控信息

客户测试配置

主服务器添加数据

验证读写分离

在从服务器插入数据


为什么要进行读写分离?

提高系统性能

当数据库并发访问量较大时,读写分离可以有效地减轻主库的负担,提高系统的整体性能和并发处理能力。

提高数据可用性

由于主库可以进行写入操作和备份操作,如果系统只有一个主库,当主库出现故障时,整个系统将会瘫痪。而读写分离可以提高数据的可用性,减少故障的风险。

提高系统的容错能力

在主从架构中,如果主库出现故障,系统可以自动切换到从库上,保证系统的可用性。

降低系统成本

使用读写分离技术可以将成本低廉的从库用于读取操作,从而降低系统成本。

如何配置mysql读写分离

部署mysql一主一从架构

主从架构的搭建

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";

部署MySQL代理服务器

部署maxscale服务

上传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 |
+------+

你可能感兴趣的:(mysql,数据库)