mysqlrouter介绍
-
MySQL Router是MySQL官方提供的一个轻量级MySQL中间件,用于取代以前老版本的SQL proxy。
-
既然MySQL Router是一个数据库的中间件,那么MySQL Router必须能够分析来自前面客户端的SQL请求是写请求还是读请求,以便决定这个SQL请求是发送给master还是slave,以及发送给哪个master、哪个slave。这样,MySQL Router就实现了MySQL的读写分离,对MySQL请求进行了负载均衡。
-
因此,MySQL Router的前提是后端实现了MySQL的主从复制。
-
MySQL Router很轻量级,只能通过不同的端口来实现简单的读/写分离,且读请求的调度算法只能使用默认的rr(round-robin),更多一点、更复杂一点的能力都不具备。所以,在实现MySQL Router时,需要自行配置好后端MySQL的高可用。高可用建议通过Percona XtraDB Cluster或MariaDB Galera或MySQL官方的group replication实现,如果实在没有选择,还可以通过MHA实现。
mysqlrouter的实现
server2作为
路由器的配置
yum install mysql-router-community-8.0.21-1.el7.x86_64.rpm -y
安装
[root@server2 mysqlrouter]# mysqlrouter -V##查看版本
MySQL Router Ver 8.0.21 for Linux on x86_64 (MySQL Community - GPL)
server2:
vim /etc/mysqlrouter/mysqlrouter.conf
编写配置文件
[routing:ro]
bind_address = 0.0.0.0
bind_port=7001
destinations =172.25.9.1:3306,172.25.9.3:3306,172.25.9.4:3306
routing_strategy = round-robin
[routing:rw]
bind_address=0.0.0.0
bind_port=7002
destinations=172.25.9.1:3306,172.25.9.3:3306,172.25.9.4:3306
routing_strategy = first-available
- server1添加用户
mysql> create user 'myr'@'%' identified by 'westos';
Query OK, 0 rows affected (0.04 sec)
mysql> GRANT ALL ON *.* TO 'myr'@'%';
Query OK, 0 rows affected (0.04 sec)
- 在server2测试是否可以访问得到
[root@server2 run]# mysql -h 172.25.9.2 -P 7001 -umyr -pwestos -e "select @@hostname"
+------------+
| @@hostname |
+------------+
| server4 |
+------------+
- 轮询
- 在server2访问
- 7001端口只读
-
7002 端口读写
-
写入插入语句成功,通过7001端口则不成功。
-
在物理真机下也可以访问
-
把server1的mysql 停掉
-
会直接跳过server1