MariaDB主从配置与MaxScale实现MySQL读写分离

MaxScale由MariaDB开发,MaxScale是插件式结构,允许用户开发适合自己的插件。

一、MaxScale插件

认证插件

提供了登录认证功能,MaxScale 会读取并缓存数据库中 user 表中的信息,当有连接进来时,先从缓存信息中进行验证,如果没有此用户,会从后端数据库中更新信息,再次进行验证

协议插件

包括客户端连接协议,和连接数据库的协议

路由插件

决定如何把客户端的请求转发给后端数据库服务器,读写分离和负载均衡的功能就是由这个模块实现的

监控插件

对各个数据库服务器进行监控,例如发现某个数据库服务器响应很慢,那么就不向其转发请求了

日志和过滤插件

提供简单的数据库防火墙功能,可以对SQL进行过滤和容错

二、MaxScale安装配置

1、MariaDB主从配置

主服务器

mysqld新增如下配置

vi /etc/my.cnf.d/server.cnf

[mysqld]
#集群配置 - 主服务器
server-id=40
# binlog-do-db = testdb //只记录testdb库变化,多个库用‘,’分隔
# binlog-ignore-db=mysql //忽略mysql库变化,多个库用‘,’分隔

从服务器

mysqld新增如下配置

vi /etc/my.cnf.d/server.cnf

[mysqld]
#集群配置 - 从服务器  
server-id=126
# binlog-do-db = testdb //只记录testdb库变化,多个库用‘,’分隔
binlog-ignore-db=mysql

主从服务器服务重启

systemctl restart mariadb.service

主服务器备份sql并导入从服务器

主服务器创建Replication账户

create user 'lbh18'@'%' identified by '81hbl';
GRANT REPLICATION SLAVE ON *.*  TO lbh18@从服务器ip IDENTIFIED BY '81hbl';
FLUSH PRIVILEGES;

查看主服务器最新binlog日志文件名

SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000006 |      811 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

设置从服务器为主服务器的从库并启动从服务器主从复制

change master to master_host='主服务器ip',master_user='lbh18',master_password='81hbl',master_port=10336,master_log_file='mysql-bin.000006',master_log_pos=811;
start slave;
show slave status\G

设置从服务器为只读模式

#登陆mysql查看只读状态
SHOW global variables like 'read%';
#编辑配置文件设置只读状态
[mysqld]
...
read_only=1
...
#重启从服务器mysql服务
systemctl restart mariadb.service

2、MaxScale配置

下载安装MaxScale

yum install gnutls libaio.x86_64 libaio-devel.x86_64 novacom-server.x86_64 libedit -y
wget https://downloads.mariadb.com/MaxScale/2.2.0/centos/7server/x86_64/maxscale-2.2.0-1.centos.7.x86_64.rpm
rpm -ivh maxscale-2.2.0-1.centos.7.x86_64.rpm

MariaDB主服务器创建监控与路由用户

#监控用户
create user scalemon@'%' identified by "密码";
grant replication slave, replication client on *.* to scalemon@'%';
#路由用户
create user maxscale@'%' identified by "密码";

MaxScale服务器修改配置

vi /etc/maxscale.cnf
[maxscale]
threads=auto
log_info=1
logdir=/tmp/
[server1]
type=server
address=主MariaDB服务器
port=10336
protocol=MySQLBackend
[server2]
type=server
address=从MariaDB服务器
port=10336
protocol=MySQLBackend
[MySQL Monitor]
type=monitor
module=mysqlmon
servers=server1,server2
user=scalemon
passwd=监控用户密码
monitor_interval=10000
# 确保所有slave挂掉后maxscale可正常识别master
detect_stale_master=true
[Read-Write Service]
type=service
router=readwritesplit
servers=server1,server2
user=maxscale
passwd=路由用户密码
max_slave_connections=100%
#保证会话的一致性
use_sql_variables_in=master
#允许root登录
enable_root_user=1 
#允许从超出主的同步时间,超出则不路由
max_slave_replication_lag=3600
[Read-Only Service]
type=service
router=readconnroute
servers=server1,server2
user=maxscale
passwd=监控用户密码
router_options=slave
#允许root用户登录执行
enable_root_user=1 
#主从权重
weightby=serv_weight

启动服务并查看监听端口

maxscale --config=/etc/maxscale.cnf
netstat -ntelp

MaxScale管理器

#执行以下命令
maxadmin
list servers
#状态如下
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server             | Address         | Port  | Connections | Status              
-------------------+-----------------+-------+-------------+--------------------
server1            | 主服务器ip  | 10336 |           0 | Master, Running
server2            | 从服务器ip  | 10336 |           0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------

至此,完成MaxScale中间件实现MySQL读写分离。

原创文章,作者:kinpo, k,如若转载,请注明出处:https://www.yidc.net/archives/5126