MySQL数据的读写分离之maxscale的使用方式
作者:我是菜鸟131
这篇文章主要介绍了MySQL数据的读写分离之maxscale的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
数据的读写分离
什么是读写分离
把客户端访问数据的读(selec)请求和写(insert、update、delete)请求分别分配给不同的数据库服务器处理
如何实现客户端访问数据的,读写分离
通过程序实现
- 读请求----->数据库服务器
- 写请求----->另一台数据库服务器
配置服务实现(在服务器上安装软件,提供服务)
- 中间件软件
- mysql-proxy
- mycat
- maxscale
- client---->服务器----mysql
读写分离的原理
由MySQL代理面向客户端提供服务
- 收到SQL写请求时,交给master服务器处理
- 收到SQL读请求时,交给slave服务器处理
为什么要配置数据读写分离
数据分流,分担单台服务器得工作压力
构建思路
1.部署MySQL一主一从结构
- 主服务器:192.168.4.51
- 从服务器:192.168.4.52
2.部署MySQL代理服务器
- 装包,修改配置文件,启动服务
3.测试配置
- 客户端连接代理服务访问数据
配置数据读写分离
拓扑图:
首先配置51与52的的主从复制,51为主,52为从
具体配置过程请看:MySQL主从复制
#192.168.4.52 mysql -uroot -p123456 -e "show slave status\G"
配置代理服务器57
1)安装提供服务的软件
部署Maxscale代理软件
由MySQL的兄弟公司MariaDB开发
本人使用的环境centos7.9 、MySQL5.7.35 、maxscle2.3.20
wget https://dlm.mariadb.com/1065384/MaxScale/2.3.20/centos/7/x86_64/maxscale-2.3.20-1.centos.7.x86_64.rpm yum -y install maxscale-2.3.20-1.centos.7.x86_64.rpm ss -nultp | grep 3306 #因为要做代理服器,不能开启MySQL数据服务,如果开启请关闭 systemctl stop mysqld rpm -ql maxscale
主配置文件 | 日志文件 |
---|---|
/etc/maxscale.cnf | /var/log/maxscale |
2)修改服务配置文件
vim /etc/maxscale.cnf [maxscale] #默认服务启动后线程的个数,auto自动,可以自己修改 threads=auto #线程是进程的最小工作单位,他两的区别,线程共享资源,进程独享资源 [server1] #指定服务器的IP地址,有两台所以要写两次,并且名称不能一致,其他为默认配置 type=server address=192.168.4.51 port=3306 protocol=MariaDBBackend [server2] #定义服务器的IP地址 type=server address=192.168.4.52 port=3306 protocol=MariaDBBackend [MariaDB-Monitor] #监视进程 type=monitor module=mariadbmon servers=server1,server2 #数据库服务器列表 user=maxscalemon #使用哪个用户执行这个程序,使用哪个用户,需要到数据库服务器进行相应的授权,监视server1,sever2 password=123456 monitor_interval=2000 #多长时间查看一次,默认单位毫秒 #[Read-Only-Service] #只读服务的配置 # type=service #我们注释掉这个配置,因为我们希望在访问时,既可以读也可以写 #router=readconnroute #servers=server1 #user=myuser #password=mypwd #router_options=slave [Read-Write-Service] #定义读写服务 type=service router=readwritesplit #读写分离用户 servers=server1,server2 user=maxscalerouter #路由用户,用来验证监视用户(客户端连接用户)是否存在 #我们使用客户端连接数据库,MySQL代理怎样知道你当前登录的用户是否存在,使用这个用户去查看use表 password=123456 [MaxAdmin-Service] #管理服务 type=service router=cli #命令行 #[Read-Only-Listener] #定义只读的端口,因为上面我们不需要这个选项注释掉,这里也需要注释 #type=listener #service=Read-Only-Service #protocol=MariaDBClient #port=4008 [Read-Write-Listener] #监听读写服务的端口 type=listener service=Read-Write-Service protocol=MariaDBClient port=4006 [MaxAdmin-Listener] #管理服务端口号,如果不想让他选择默认,也可以进行添加 type=listener service=MaxAdmin-Service protocol=maxscaled #socket=default port=4016 #自定义端口
3)配置数据库服务器
添加相应的用户
添加监控用户:maxscalemon
添加路由用户:maxscalerouter
#在主/从服务器创建授权用户192.168.4.51 mysql -uroot -p123456 #replication slave 监控主从的状态是否正常 #replication client 监控主从的服务是否运行 grant replication slave,replication client on *.* to maxscalemon@"%" identified by "123456"; grant select on mysql.* to maxscalerouter@"%" identified by "123456"; #因为是主从复制,所以在主服务上配置,从服务器也会同步相应数据 select user,host from mysql.user; #查看用户 #192.168.4.52 mysql -uroot -p123456 -e"select user,host from mysql.user" #查看是否同步成功
4)启动代理服务
#192.168.4.51 maxscale -f /etc/maxscale.cnf ls /var/log/maxscale #maxscale软件的日志信息,如果没有启动可以查看错误信息 ps -C maxscale #查看进程信息 ss -lnutp | grep maxscale #查看端口信息
MaxScale cannot be run as root. Failed to write child process message!
如果启动抱以上错误:可以使用以下方式解决
maxscale -f /etc/maxscale.cnf -U maxscale 指定启动用户名 maxscale -f /etc/maxscale.cnf -U maxscale maxscalemon
5)查看服务信息
验证配置
1)在代理服务器本机连接管理服务,查看监控信息
#在代理服务器本机访问管理 #maxadmin -uadmin -pmariadb -P端口 默认用户admin默认密码,默认密码maridb maxadmin -uadmin -pmariadb -P4016 list servers #查看监控信息,调用的是 [MariaDB-Monitor]模块
2)在客户端连接代理服务器57访问数据
在连接之前先添加相应的授权用户
#192.168.4.51 mysql -uroot -p123456 create database db7; create table db7.a (id int); grant select,insert on db7.* to jim@"%" identified by "123456"; #192.168.4.3 mysql -h 192.168.4.57 -P4006 -ujim -p123456 select * from db7.a; insert into db7.a values(100); select * from db7.a;
3)验证是否实现了数据的读写分离
在从服务器52本机进行数据插入。
因为52是从服务器所以插入52的数据并不会同步到51
#192.168.4.52 mysql -uroot -p123456 insert into db7.a values(120); select * from db7.a;
在主服务器上查看
在客户端重新连接,重新查看表里的内容
mysql -h 192.168.4.57 -P4006 -ujim -p123456 select * from db7.a;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。