MySQL读写分离 --maxscale


 

Maxscale部署

构建思路

1、部署MySQL一主一从结构一主服务器:192.168.1.130 -从服务器:192.168.1.99(前面已部署好主从配置具体可参考: MySQL主从配置
2、部署MysQL代理服务器(Maxscale)192.168.1.130 -装包、修改配置文件、启动服务
3、测试配置-客户端连接代理服务访问数据

 

主服务器 192.168.1.130
从服务器 192.168.1.99

 

 

下载安装中间件

中间件下载地址:https://dlm.mariadb.com/browse/mariadbmaxscale/49/789/?_ga=2.180365351.1460156067.1640182534-1832063011.1640182534

安装中间件:

rpm -ivh maxscale-2.3.20-1.centos.7.x86_64.rpm

 master主库创建用户

已经实现主从复制的前提下:主库创建的用户,能同步到从库上

创建监控用户

create user maxscale_monitor@'%' identified by "Admin@123456";
grant replication slave, replication client on *.* to maxscale_monitor@'%';

创建路由用户

create user maxscale_route@'%' identified by "Admin@123456";
GRANT SELECT ON mysql.user TO maxscale_route@'%';
GRANT SELECT ON mysql.db TO maxscale_route@'%';
GRANT SELECT ON mysql.tables_priv TO maxscale_route@'%';
GRANT SHOW DATABASES ON *.* TO maxscale_route@'%';

配置maxscale

vim /etc/maxscale.cnf

[maxscale]
#开启线程个数,默认是1,设置为auto会通cpu核数相同
threads=auto

#相关目录设置
#basedir=/usr/local/maxscale/
#指定日志文件 默认在/var/log/maxscale/maxscale.log
logdir=/usr/local/mysql/maxscale/logs
datadir=/usr/local/mysql/maxscale/data
piddir=/usr/local/mysql/maxscale/logs
cachedir=/usr/local/mysql/maxscale/cache


[server1]  #定义服务器IP地址
type=server
address=192.168.1.130
port=3306
protocol=MariaDBBackend

[server2]  #因为有俩个服务器,复制上面的配置
type=server
address=192.168.1.99
port=3306
protocol=MariaDBBackend

[MariaDB-Monitor]  #监视进程
type=monitor
module=mariadbmon
servers=server1,server2  #数据库服务器列表
user=maxscale_monitor   #使用哪个用户执行这个程序,使用哪个用户,需要到数据库服务器进行相应的授权,监视server1,sever2
password=Admin@123456
monitor_interval=2000   #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=maxscale_route   #路由用户,用来验证监视用户(客户端连接用户)是否存在
#我们使用客户端连接数据库,MySQL代理怎样知道你当前登录的用户是否存在,使用这个用户去查看use表
password=Admin@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
port=4016    #自定义端口
#socket=default

 

启动maxscale

创建maxscale相关目录,所属用户是mysql

mkdir /usr/local/mysql/maxscale
mkdir /usr/local/mysql/maxscale/data
mkdir /usr/local/mysql/maxscale/logs
mkdir /usr/local/mysql/maxscale/cache

chown -R mysql:mysql /usr/local/mysql/maxscale

指定mysql用户启动

maxscale --config=/etc/maxscale.cnf --user=mysql
netstat -ntelp
ps -C maxscale   #查看进程信息
ss -lnutp | grep maxscale   #查看端口信息

登录maxscale管理器

[root@localhost local]# maxadmin -uadmin -pmariadb -P4016
MaxScale> list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server             | Address         | Port  | Connections | Status              
-------------------+-----------------+-------+-------------+--------------------
server1            | 192.168.1.130   |  3306 |           4 | Master, Running
server2            | 192.168.1.99    |  3306 |           1 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------

测试连接

方法一(建议使用此方法比较直观):

1.可以在从库中新增一条数据

2.登录主库进行查询如果查询不到则成功

3.使用下面测试账号登录 mysql -urtest -pAdmin@123456 -h 192.168.1.130 -P 4006  查询在从库新增的数据,查询到的话则证明服务搭建完成

写操作走主库,读操作走从库,能实现读写分离

 

方法二:

创建测试账户

create user 'rtest'@'%' identified by 'Admin@123456';
ALTER USER 'rtest'@'%' IDENTIFIED WITH mysql_native_password BY 'Admin@123456';
grant select,insert on *.* to 'rtest'@'%';
#注意:这里只给了查询和新增的权限,授权所有权限可以使用下面这条语句
#grant all privileges on *.* to 'rtest'@'%';
flush privileges;

 

连接maxscale

mysql -urtest -pAdmin@123456 -h 192.168.1.130 -P 4006

查看服务器名

Select @@hostname;

开启事务,maxscale切换到master

start transaction;

回滚

rollback;

拓展:

#事务:一组操作,要么全成功要么全失败
1开启事务:strat transaction
2回滚事务,即撤销指定sql语句(只有insert /delete /update):rollback
3提交事务 提交未存储事务:commit
保留点,事务处理中设置的点:savepoint
1start transaction

永久修改主机名 (修改后重启服务器生效)
在 Linux 系统中如果想要永久修改主机名,那么必须将新主机名写入文件。但需要注意 CentOS 版本的不同所需要的文件是不一样的:

如果是 CentOS 7 以下(不包括 7)的版本,则需要修改 /etc/sysconfig/network 文件。即修改 HOSTNAME=新主机名 。
如果是 CentOS 7 及以上(包括 7)的版本,则需要修改 /etc/hostname 文件。直接填入新主机名即可。
注:CentOS 7 及以上版本也是有 /etc/sysconfig/network 文件的,但是没有 HOSTNAME 选项,即使是添加也不会生效。

 

如果你是一匹千里马,那么请做自己的伯乐。

 

posted @ 2022-09-16 18:04  聆听说书人  阅读(203)  评论(0编辑  收藏  举报