Maxscale是Mariadb公司开发的一套数据库中间件,可以很方便的实现读写分离方案;并且提供了读写分离的负载均衡和高可用性保障。另外maxscale对于前端应用而言是透明的,我们可以很方便的将应用迁移到maxscale中实现读写分离方案,来分担主库的压力。maxscale也提供了sql语句的解析过滤功能。 这里我们主要讲解maxscale的安装、配置以及注意事项。

目录

Mysql读写分离-Maxscale

Maxscale特性:

  1.带权重的读写分离(负载均衡)
  2.SQL防火墙
  3.多种路由策略(Connection based, Statement based,Schema based)
  4.自动检测MySQL master Failover (配合MHA或者MRM)
  5.检测主从延时
  6.多租户sharding架构

角色 系统 服务 IP地址
master centos7 mysql5.7 192.168.100.10
slave centos7 mysql5.7 192.168.100.20
proxy centos7 Maxscale 192.168.100.30

搭建主从

1.安装mysql5.7并配置主从
请参考Mysql主从复制

2.主从创建proxy用户
在主库操作即可,从库自动同步

1
2
> grant all on *.* to 'proxy'@'%' identified by '123456.Com';
> flush privilegse;

安装Maxscale

3.下载rpm安装包

1
$ wget https://downloads.mariadb.com/MaxScale/centos/7/x86_64/maxscale-2.3.7-1.centos.7.x86_64.rpm

4.安装rpm安装包

1
$ rpm -ivh maxscale-2.3.7-1.centos.7.x86_64.rpm 

配置Maxsacle

5.创建密钥

1
$ maxkeys /var/lib/maxscale/

6.加密密码

1
2
$ maxpasswd /var/lib/maxscale 123456.Com
7B31670430456C6C186113E5EEAE5F15

7.修改配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
$ vim /etc/maxscale.cnf
[maxscale]
#开启线程个数,默认为1.设置为auto会同cpu核数相同
threads=auto
#将日志写入到maxscale的日志文件中 
maxlog=1
#记录info
log_info=1

[server1]
type=server
address=192.168.100.10
port=3306
protocol=MariaDBBackend

[server2]
type=server
address=192.168.100.20
port=3306
protocol=MariaDBBackend

[server3]
type=server
address=192.168.100.30
port=3306
protocol=MariaDBBackend

[MySQL Monitor]
type=monitor
module=mysqlmon
servers=server1,server2,server3
user=proxy
password=7B31670430456C6C186113E5EEAE5F15
#监控心跳为5秒
monitor_interval=5000
#监控主从复制延迟
#detect_replication_lag=true
#控制maxscale运行的最大延迟
#max_slave_replication_lag
#当复制slave全部断掉时,maxscale仍然可用,将所有的访问指向master节点
detect_stale_master=true

[Read-Write Service]
type=service
router=readwritesplit
servers=server1,server2,server3
user=proxy
password=7B31670430456C6C186113E5EEAE5F15
max_slave_connections=100%
#sql语句中的存在变量只指向master中执行
use_sql_variables_in=master
#允许root用户登录执行
enable_root_user=1
#master节点也可以转发读请求
#master_accept_reads=true

[MaxAdmin Service]
type=service
router=cli

#读写分离服务端口
[Read-Write Listener]
type=listener
service=Read-Write Service
protocol=MySQLClient
port=4006

#服务管理端口
[MaxAdmin Listener]
type=listener
service=MaxAdmin Service
protocol=maxscaled
port=6603

8.启动Maxscale

1
$ systemctl maxscale

9.登录管理接口

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ maxadmin --user=admin --password=mariadb
> list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server             | Address         | Port  | Connections | Status              
-------------------+-----------------+-------+-------------+--------------------
server1            | 192.168.100.10  |  3306 |           1 | Master, Running
server2            | 192.168.100.20  |  3306 |           1 | Slave, Running
server3            | 192.168.100.30  |  3306 |           1 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------

##验证读写分离 10.登录工作端口
查询两次student表,然后查看maxscale日志

1
2
3
4
5
6
7
$ tail -f /var/log/maxscale/maxscale.log
2018-08-02 15:54:37   info   : (5) > Autocommit: [enabled], trx is [not open], cmd: (0x03) COM_QUERY, plen: 31, type: QUERY_TYPE_READ, stmt: select * from test.student 
2019-08-02 15:54:37   info   : (5) Route query to slave: server2 	[192.168.100.20]:3306 <
2019-08-02 15:54:37   info   : (5) Reply complete, last reply from server3
2019-08-02 15:54:37   info   : (5) > Autocommit: [enabled], trx is [not open], cmd: (0x03) COM_QUERY, plen: 31, type: QUERY_TYPE_READ, stmt: select * from test.student 
2019-08-02 15:54:37   info   : (5) Route query to slave: server3 	[192.168.100.30]:3306 <
2019-08-02 15:54:37   info   : (5) Reply complete, last reply from server3

添加数据,再次查看

1
2
3
4
5
6
$ tail -f /var/log/maxscale/maxscale.log
2018-08-02 15:58:16   info   : (5) Route query to master: server1 	[192.168.100.10]:3306 <
2018-08-02 15:58:16   info   : (5) Reply complete, last reply from server1
2018-08-02 15:58:28   info   : (5) > Autocommit: [enabled], trx is [not open], cmd: (0x03) COM_QUERY, plen: 78, type: QUERY_TYPE_WRITE, stmt: insert into test.student values(3,'王五',20,'男'),(4,'赵六','21','男') 
2018-08-02 15:58:28   info   : (5) Route query to master: server1 	[192.168.100.10]:3306 <
2018-08-02 15:58:28   info   : (5) Reply complete, last reply from server1

读写分离成功