MySQL 主从读写分离实现方案(一)—MariaDB MaxScale实现mysql8读写分离
一:MaxScale 是干什么的??
MaxScale是maridb开发的一个mysql数据中间件,其配置简单,能够实现读写分离,并且可以根据主从状态实现写库的自动切换,对多个从服务器能实现负载均衡。
二:MaxScale 实验环境部署
前提条件完成Mysql主从同步
中间件 | 192.168.1.15 | MaxScale 24.02.4-1 |
主服务器 | 192.168.1.10 | mysql 8.0.40 |
从服务器 | 192.168.1.11 | mysql 8.0.40 |
从服务器 | 192.168.1.12 | mysql 8.0.40 |
192.168.1.15(MaxScale)
从官方网站获取shell脚本,用于实现MariaDB包存储库的访问
[root@rocky ~]# curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | sudo bash
查找与 MaxScale 相关的软件包
[root@rocky ~]# dnf list |grep -i maxscale
[root@rocky ~]# yum install maxscale -y
在/etc/maxscale.cnf.d新建一个配置my.cnf或者直接修改/etc/maxscale.cnf文件
[root@rocky ~]# cd /etc/maxscale.cnf.d/
[root@rocky maxscale.cnf.d]# vim my.cnf
[maxscale]
threads=auto[dbserv1]
type=server
address=192.168.1.10
port=3306
protocol=MariaDBBackend[dbserv2]
type=server
address=192.168.1.11
port=3306
protocol=MariaDBBackend[dbserv3]
type=server
address=192.168.1.12
port=3306
protocol=MariaDBBackend[MySQL-Monitor]
type=monitor
module=mariadbmon
servers=dbserv1, dbserv2, dbserv3
user=maxscale_monitor
password=Admin@123456
monitor_interval=2s[Read-Write-Service]
type=service
router=readwritesplit
servers=dbserv1,dbserv2,dbserv3
user=maxscale_route
password=Admin@123456
enable_root_user=true[Read-Write-Listener]
type=listener
service=Read-Write-Service
protocol=MariaDBClient
address=0.0.0.0
port=3306
192.168.1.10(master)
在 master中为 MaxScale 创建两个用户,用于监控模块和路由模块,已经实现主从复制的前提下,主库创建的用户,能同步到从库上
1.创建监控用户
--创建用户
mysql> create user 'maxscale_monitor'@'192.168.1.%' identified with mysql_native_password by 'Admin@123456';--用户授权 “同步复制”、“同步复制状态”
mysql> grant replication slave, replication client on *.* to maxscale_monitor@'192.168.1.%';
2.创建路由用户
--创建用户
mysql>create user 'maxscale_route'@'192.168.1.%' identified with mysql_native_password by 'Admin@123456';
--用户授权
mysql>GRANT SHOW DATABASES ON *.* TO maxscale_route@'192.168.1.%';
mysql>GRANT SELECT ON mysql.user TO maxscale_route@'192.168.1.%';
mysql>GRANT SELECT ON mysql.db TO maxscale_route@'192.168.1.%';
mysql>GRANT SELECT ON mysql.tables_priv TO maxscale_route@'192.168.1.%';
mysql>GRANT SELECT ON mysql.columns_priv TO maxscale_route@'192.168.1.%';
mysql>GRANT SELECT ON mysql.proxies_priv TO maxscale_route@'192.168.1.%';
启动MaxScale服务
配置完成后 192.168.1.15重启MaxScale服务
[root@4e2804021a7d /]# maxscale -f /etc/maxscale.cnf.d/my.cnf -U maxscale
[root@rocky ~]# ps -ef|grep maxscale
使用 maxctrl list servers 命令查看运行状态
[root@rocky ~]# maxctrl list servers
使用 maxctrl list listeners Read-Write-Service 命令查看服务监听状态信息
[root@rocky ~]# maxctrl list listeners Read-Write-Service