Maxscale安装-读写分离(1)
前言
关于MySQL中间件的产品也很多,之前用过了360的Atlas、玩过MyCat。这边我选择 Maxscale的原因就是功能能满足需求,也看好他的未来发展。
其实有关于如何安装 Maxscale的文章百度一下一大把,写这篇文章主要为了说明配置的某些现象,同时也为之后使用Maxscale的其他配置做下基础。
我的环境
这边我的'一主二从'已经是搭建好的了,如何搭建就不再描述了。
注意:这边我的三个节点都没有开启 GTID,具体是为什么在之后会讲到,这边大家留意一下就行。
192.168.137.21:3306 (Master)
192.168.137.22:3306 (Slave)
192.168.137.23:3306 (Slave)
|
1
2
3
4
|
192.168.137.11 (Maxscale)
192.168.137.21:3306 (Master)
192.168.137.22:3306 (Slave)
192.168.137.23:3306 (Slave)
|
这边我使用的用于复制的用户是maxscale,具体权限如下:
GRANT replication slave, replication client ON *.* TO maxscale@'%';
GRANT SELECT ON mysql.* TO maxscale@'%';
GRANT ALL ON maxscale_schema.* TO maxscale@'%';
GRANT SHOW DATABASES ON *.* TO maxscale@'%';
root@(none) 22:34:15>SELECT VERSION();
+--------------------+
| VERSION() |
+--------------------+
| 10.1.8-MariaDB-log |
+--------------------+
1 row in set (0.00 sec)
root@(none) 22:34:25>SHOW SLAVE HOSTS;
+------------+----------------+------+------------+
| Server_id | Host | Port | Master_id |
+------------+----------------+------+------------+
| 3306137022 | 192.168.137.21 | 3306 | 3306137021 |
| 3306137023 | 192.168.137.21 | 3306 | 3306137021 |
+------------+----------------+------+------------+
2 rows in set (0.00 sec)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
CREATE USER maxscale@'%' IDENTIFIED BY "123456";
GRANT replication slave, replication client ON *.* TO maxscale@'%';
GRANT SELECT ON mysql.* TO maxscale@'%';
GRANT ALL ON maxscale_schema.* TO maxscale@'%';
GRANT SHOW DATABASES ON *.* TO maxscale@'%';
root@(none) 22:34:15>SELECT VERSION();
+--------------------+
| VERSION() |
+--------------------+
| 10.1.8-MariaDB-log |
+--------------------+
1 row in set (0.00 sec)
root@(none) 22:34:25>SHOW SLAVE HOSTS;
+------------+----------------+------+------------+
| Server_id | Host | Port | Master_id |
+------------+----------------+------+------------+
| 3306137022 | 192.168.137.21 | 3306 | 3306137021 |
| 3306137023 | 192.168.137.21 | 3306 | 3306137021 |
+------------+----------------+------+------------+
2 rows in set (0.00 sec)
|
下载Maxscale
在 192.168.137.11 机器上
这边提供下载地址: https://downloads.mariadb.com
我的版本
/opt
[root@normal_11 opt]# ll
total 149624
-rw-r--r-- 1 root root 3587510 Nov 2 21:07 maxscale-2.0.1.centos.7.tar.gz
|
1
2
3
4
5
6
|
[root@normal_11 opt]# pwd
/opt
[root@normal_11 opt]# ll
total 149624
-rw-r--r-- 1 root root 3587510 Nov 2 21:07 maxscale-2.0.1.centos.7.tar.gz
|
开始安装
[root@normal_11 opt]# useradd -g maxscale maxscale
[root@normal_11 opt]# cd /opt
[root@normal_11 opt]# tar -zxf maxscale-2.0.1.centos.7.tar.gz
[root@normal_11 opt]# ln -s maxscale-2.0.1.centos.7 /usr/local/maxscale
[root@normal_11 opt]# chown -R maxscale:maxscale /usr/local/maxscale
[root@normal_11 opt]# mkdir -p /u01/maxscale/{data,cache,logs,tmp}
[root@normal_11 opt]# mkdir -p /u01/maxscale/logs/{binlog,trace}
[root@normal_11 opt]# chown -R maxscale:maxscale /u01/maxscale
[root@normal_11 opt]# /usr/local/maxscale/bin/maxkeys /u01/maxscale/data/
[root@normal_11 opt]# /usr/local/maxscale/bin/maxpasswd /u01/maxscale/data/.secrets 123456
1D30C1E689410756D7B82C233FCBF8D9
|
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@normal_11 opt]# groupadd maxscale
[root@normal_11 opt]# useradd -g maxscale maxscale
[root@normal_11 opt]# cd /opt
[root@normal_11 opt]# tar -zxf maxscale-2.0.1.centos.7.tar.gz
[root@normal_11 opt]# ln -s maxscale-2.0.1.centos.7 /usr/local/maxscale
[root@normal_11 opt]# chown -R maxscale:maxscale /usr/local/maxscale
[root@normal_11 opt]# mkdir -p /u01/maxscale/{data,cache,logs,tmp}
[root@normal_11 opt]# mkdir -p /u01/maxscale/logs/{binlog,trace}
[root@normal_11 opt]# chown -R maxscale:maxscale /u01/maxscale
[root@normal_11 opt]# /usr/local/maxscale/bin/maxkeys /u01/maxscale/data/
[root@normal_11 opt]# /usr/local/maxscale/bin/maxpasswd /u01/maxscale/data/.secrets 123456
1D30C1E689410756D7B82C233FCBF8D9
|
Maxscale 配置文件
###################################################
# CREATE USER maxscale@'%' IDENTIFIED BY "123456";
# GRANT replication slave, replication client ON *.* TO maxscale@'%';
# GRANT SELECT ON mysql.* TO maxscale@'%';
# GRANT ALL ON maxscale_schema.* TO maxscale@'%';
# GRANT SHOW DATABASES ON *.* TO maxscale@'%';
# groupadd maxscale
# useradd -g maxscale maxscale
# cd /opt
# tar -zxf maxscale-2.0.1.rhel.7.tar.gz
# ln -s /opt/maxscale-2.0.1.rhel.7 /usr/local/maxscale
# chown -R maxscale:maxscale /usr/local/maxscale
# mkdir -p /u01/maxscale/{data,cache,logs,tmp}
# mkdir -p /u01/maxscale/logs/{binlog,trace}
# chown -R maxscale:maxscale /u01/maxscale
# /usr/local/maxscale/bin/maxkeys /u01/maxscale/data/
# /usr/local/maxscale/bin/maxpasswd /u01/maxscale/data/.secrets 123456
###################################################
[maxscale]
# 开启线程个数,默认为1.设置为auto会同cpu核数相同
threads=auto
# timestamp精度
ms_timestamp=1
# 将日志写入到syslog中
syslog=1
# 将日志写入到maxscale的日志文件中
maxlog=1
# 不将日志写入到共享缓存中,开启debug模式时可打开加快速度
log_to_shm=0
# 记录告警信息
log_warning=1
# 记录notice
log_notice=1
# 记录info
log_info=1
# 不打开debug模式
log_debug=0
# 日志递增
log_augmentation=1
# 相关目录设置
basedir=/usr/local/maxscale/
logdir=/u01/maxscale/logs/trace/
datadir=/u01/maxscale/data/
cachedir=/u01/maxscale/cache/
piddir=/u01/maxscale/tmp/
[server1]
type=server
address=192.168.137.21
port=3306
protocol=MySQLBackend
serv_weight=1
[server2]
type=server
address=192.168.137.22
port=3306
protocol=MySQLBackend
serv_weight=3
[server3]
type=server
address=192.168.137.23
port=3306
protocol=MySQLBackend
serv_weight=3
[MySQL Monitor]
type=monitor
module=mysqlmon
servers=server1,server2,server3
user=maxscale
passwd=1D30C1E689410756D7B82C233FCBF8D9
# 监控心态为 10s
monitor_interval=10000
# 当复制slave全部断掉时,maxscale仍然可用,将所有的访问指向master节点
detect_stale_master=true
# 监控主从复制延迟,可用后续指定router service的(配置此参数请求会永远落在 master)
# detect_replication_lag=true
[Read-Only Service]
type=service
router=readconnroute
servers=server1,server2,server3
user=maxscale
passwd=1D30C1E689410756D7B82C233FCBF8D9
router_options=slave
# 允许root用户登录执行
enable_root_user=1
# 查询权重
weightby=serv_weight
[Read-Write Service]
type=service
router=readwritesplit
servers=server1,server2,server3
user=maxscale
passwd=1D30C1E689410756D7B82C233FCBF8D9
max_slave_connections=100%
# sql语句中的存在变量只指向master中执行
use_sql_variables_in=master
# 允许root用户登录执行
enable_root_user=1
# 允许主从最大间隔(s)
max_slave_replication_lag=3600
[MaxAdmin Service]
type=service
router=cli
[Read-Only Listener]
type=listener
service=Read-Only Service
protocol=MySQLClient
port=4008
[Read-Write Listener]
type=listener
service=Read-Write Service
protocol=MySQLClient
port=4006
[MaxAdmin Listener]
type=listener
service=MaxAdmin Service
protocol=maxscaled
socket=/u01/maxscale/tmp/maxadmin.sock
port=6603
|
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
[root@normal_11 opt]# cat /etc/maxscale.cnf
###################################################
# CREATE USER maxscale@'%' IDENTIFIED BY "123456";
# GRANT replication slave, replication client ON *.* TO maxscale@'%';
# GRANT SELECT ON mysql.* TO maxscale@'%';
# GRANT ALL ON maxscale_schema.* TO maxscale@'%';
# GRANT SHOW DATABASES ON *.* TO maxscale@'%';
# groupadd maxscale
# useradd -g maxscale maxscale
# cd /opt
# tar -zxf maxscale-2.0.1.rhel.7.tar.gz
# ln -s /opt/maxscale-2.0.1.rhel.7 /usr/local/maxscale
# chown -R maxscale:maxscale /usr/local/maxscale
# mkdir -p /u01/maxscale/{data,cache,logs,tmp}
# mkdir -p /u01/maxscale/logs/{binlog,trace}
# chown -R maxscale:maxscale /u01/maxscale
# /usr/local/maxscale/bin/maxkeys /u01/maxscale/data/
# /usr/local/maxscale/bin/maxpasswd /u01/maxscale/data/.secrets 123456
###################################################
[maxscale]
# 开启线程个数,默认为1.设置为auto会同cpu核数相同
threads=auto
# timestamp精度
ms_timestamp=1
# 将日志写入到syslog中
syslog=1
# 将日志写入到maxscale的日志文件中
maxlog=1
# 不将日志写入到共享缓存中,开启debug模式时可打开加快速度
log_to_shm=0
# 记录告警信息
log_warning=1
# 记录notice
log_notice=1
# 记录info
log_info=1
# 不打开debug模式
log_debug=0
# 日志递增
log_augmentation=1
# 相关目录设置
basedir=/usr/local/maxscale/
logdir=/u01/maxscale/logs/trace/
datadir=/u01/maxscale/data/
cachedir=/u01/maxscale/cache/
piddir=/u01/maxscale/tmp/
[server1]
type=server
address=192.168.137.21
port=3306
protocol=MySQLBackend
serv_weight=1
[server2]
type=server
address=192.168.137.22
port=3306
protocol=MySQLBackend
serv_weight=3
[server3]
type=server
address=192.168.137.23
port=3306
protocol=MySQLBackend
serv_weight=3
[MySQL Monitor]
type=monitor
module=mysqlmon
servers=server1,server2,server3
user=maxscale
passwd=1D30C1E689410756D7B82C233FCBF8D9
# 监控心态为 10s
monitor_interval=10000
# 当复制slave全部断掉时,maxscale仍然可用,将所有的访问指向master节点
detect_stale_master=true
# 监控主从复制延迟,可用后续指定router service的(配置此参数请求会永远落在 master)
# detect_replication_lag=true
[Read-Only Service]
type=service
router=readconnroute
servers=server1,server2,server3
user=maxscale
passwd=1D30C1E689410756D7B82C233FCBF8D9
router_options=slave
# 允许root用户登录执行
enable_root_user=1
# 查询权重
weightby=serv_weight
[Read-Write Service]
type=service
router=readwritesplit
servers=server1,server2,server3
user=maxscale
passwd=1D30C1E689410756D7B82C233FCBF8D9
max_slave_connections=100%
# sql语句中的存在变量只指向master中执行
use_sql_variables_in=master
# 允许root用户登录执行
enable_root_user=1
# 允许主从最大间隔(s)
max_slave_replication_lag=3600
[MaxAdmin Service]
type=service
router=cli
[Read-Only Listener]
type=listener
service=Read-Only Service
protocol=MySQLClient
port=4008
[Read-Write Listener]
type=listener
service=Read-Write Service
protocol=MySQLClient
port=4006
[MaxAdmin Listener]
type=listener
service=MaxAdmin Service
protocol=maxscaled
socket=/u01/maxscale/tmp/maxadmin.sock
port=6603
|
细心的朋友会注意到, 的我配置文件最上面就是安装 Maxscale 的基本步骤,这是本人的一个习惯.
这边我稍微说明一下配置文件的意思:
- [server1], [server2], [server3] 我配置了三个Maxscale需要连接的MySQL服务
- [MySQL Monitor] 配置一个监听服务, 同时监听着 [server1], [server2], [server3] 的状态
- [Read-Only Service] 配置了只读服务, 只在[server2], [server3]中执行
注意: 虽然是只读服务但是同样可以执行 DML DDL, 说以要限制好用户的权限.
- [Read-Write Listener] 配置了读写分离的服务
- [MaxAdmin Listener] 配置了用户管理Maxscale的服务
演示
这边我们以 [Read-Write Listener] 配置的服务来演示读写分离情况
- 启动 Maxscale
如果启动有报错那就查看一下日志 /var/log/message 或 /u01/maxscale/logs/trace/maxscale1.log(自定义)
[root@normal_11 opt]# netstat -natpl | grep max
tcp 0 0 0.0.0.0:4008 0.0.0.0:* LISTEN 5507/maxscale
tcp 0 0 0.0.0.0:6603 0.0.0.0:* LISTEN 5507/maxscale
tcp 0 0 0.0.0.0:4006 0.0.0.0:* LISTEN 5507/maxscale
tcp 0 0 192.168.137.11:43102 192.168.137.22:3306 ESTABLISHED 5507/maxscale
tcp 0 0 192.168.137.11:54624 192.168.137.21:3306 ESTABLISHED 5507/maxscale
tcp 0 0 192.168.137.11:52989 192.168.137.23:3306 ESTABLISHED 5507/maxscale
|
1
2
3
4
5
6
7
8
|
[root@normal_11 opt]# /usr/local/maxscale/bin/maxscale -f /etc/maxscale.cnf
[root@normal_11 opt]# netstat -natpl | grep max
tcp 0 0 0.0.0.0:4008 0.0.0.0:* LISTEN 5507/maxscale
tcp 0 0 0.0.0.0:6603 0.0.0.0:* LISTEN 5507/maxscale
tcp 0 0 0.0.0.0:4006 0.0.0.0:* LISTEN 5507/maxscale
tcp 0 0 192.168.137.11:43102 192.168.137.22:3306 ESTABLISHED 5507/maxscale
tcp 0 0 192.168.137.11:54624 192.168.137.21:3306 ESTABLISHED 5507/maxscale
tcp 0 0 192.168.137.11:52989 192.168.137.23:3306 ESTABLISHED 5507/maxscale
|
- 使用 maxadmin 查看服务
MaxScale> list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168.137.21 | 3306 | 0 | Master, Running
server2 | 192.168.137.22 | 3306 | 0 | Slave, Running
server3 | 192.168.137.23 | 3306 | 0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
MaxScale> list services
Services.
--------------------------+----------------------+--------+---------------
Service Name | Router Module | #Users | Total Sessions
--------------------------+----------------------+--------+---------------
Read-Only Service | readconnroute | 1 | 1
Read-Write Service | readwritesplit | 1 | 1
MaxAdmin Service | cli | 3 | 3
--------------------------+----------------------+--------+---------------
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
[root@normal_11 opt]# /usr/local/maxscale/bin/maxadmin -S /u01/maxscale/tmp/maxadmin.sock
MaxScale> list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168.137.21 | 3306 | 0 | Master, Running
server2 | 192.168.137.22 | 3306 | 0 | Slave, Running
server3 | 192.168.137.23 | 3306 | 0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
MaxScale> list services
Services.
--------------------------+----------------------+--------+---------------
Service Name | Router Module | #Users | Total Sessions
--------------------------+----------------------+--------+---------------
Read-Only Service | readconnroute | 1 | 1
Read-Write Service | readwritesplit | 1 | 1
MaxAdmin Service | cli | 3 | 3
--------------------------+----------------------+--------+---------------
|
通过登录Maxscale的读写分离服务, 来执行sql并且查看日志,查看日志路由情况。
注意: 这边登录的用户就是普通的MySQL用户, 不是maxscale用户
Logging to file '/u01/mysql_history/query.log'
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5524
Server version: 5.5.5-10.0.0 2.0.1-maxscale MariaDB Server
Copyright (c) 2009-2015 Percona LLC and/or its affiliates
Copyright (c) 2000, 2015, <a href="http://www.ttlsa.com/oracle/" title="Oracle"target="_blank">Oracle</a> and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
HH@192.168.137.11 11:13:46 [(none)]>SELECT * FROM test.t1;
+----+------+-----+
| id | name | age |
+----+------+-----+
| 1 | HH1 | 1 |
| 2 | HH2 | 2 |
| 3 | HH3 | 3 |
+----+------+-----+
3 rows in set (0.01 sec)
HH@192.168.137.11 11:15:03 [(none)]>INSERT INTO test.t1 VALUES(NULL, 'HH4', 4);
Query OK, 1 row affected (0.01 sec)
# 使用 HH 登录成的日志
2016-11-03 23:13:46.907 info : (log_server_connections): Servers and router connection counts:
2016-11-03 23:13:46.907 info : (log_server_connections): current operations : 0 in 192.168.137.21:3306 RUNNING MASTER
2016-11-03 23:13:46.907 info : (log_server_connections): current operations : 0 in 192.168.137.22:3306 RUNNING SLAVE
2016-11-03 23:13:46.907 info : (log_server_connections): current operations : 0 in 192.168.137.23:3306 RUNNING SLAVE
2016-11-03 23:13:46.908 info : (select_connect_backend_servers): Selected RUNNING MASTER in 192.168.137.21:3306
2016-11-03 23:13:46.908 info : (select_connect_backend_servers): Selected RUNNING SLAVE in 192.168.137.22:3306
2016-11-03 23:13:46.908 info : (select_connect_backend_servers): Selected RUNNING SLAVE in 192.168.137.23:3306
2016-11-03 23:13:46.908 info : (session_alloc): Started Read-Write Service client session [0] for 'HH' from 192.168.137.11
2016-11-03 23:13:46.909 [9] info : (route_single_stmt): > Autocommit: [enabled], trx is [not open], cmd: COM_QUERY, type: QUERY_TYPE_READ|QUERY_TYPE_SYSVAR_READ, stmt: select @@version_comment limit 1
2016-11-03 23:13:46.909 [9] info : (route_single_stmt): Route query to master 192.168.137.21:3306 <
2016-11-03 23:13:46.922 [9] info : (route_single_stmt): > Autocommit: [enabled], trx is [not open], cmd: COM_QUERY, type: QUERY_TYPE_READ, stmt: select USER()
2016-11-03 23:13:46.922 [9] info : (route_single_stmt): Route query to slave 192.168.137.22:3306 <
# 执行 SELECT * FROM test.t1 语句被路由到 192.168.137.22:3306[server2]中的日志
2016-11-03 23:15:02.618 [9] info : (route_single_stmt): > Autocommit: [enabled], trx is [not open], cmd: COM_QUERY, type: QUERY_TYPE_READ, stmt: SELECT * FROM test.t1
2016-11-03 23:15:02.618 [9] info : (route_single_stmt): Route query to slave 192.168.137.22:3306 <
# 执行 INSERT INTO test.t1 VALUES(NULL, 'HH4', 4) 语句被路由到 192.168.137.21:3306[server1]中的日志
2016-11-03 23:17:02.716 [9] info : (route_single_stmt): > Autocommit: [enabled], trx is [not open], cmd: COM_QUERY, type: QUERY_TYPE_WRITE, stmt: INSERT INTO test.t1 VALUES(NULL, 'HH4', 4)
2016-11-03 23:17:02.716 [9] info : (route_single_stmt): Route query to master 192.168.137.21:3306 <
|
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
|
[root@normal_11 opt]# mysql -uHH -p -h192.168.137.11 -P4006
Logging to file '/u01/mysql_history/query.log'
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5524
Server version: 5.5.5-10.0.0 2.0.1-maxscale MariaDB Server
Copyright (c) 2009-2015 Percona LLC and/or its affiliates
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
HH@192.168.137.11 11:13:46 [(none)]>SELECT * FROM test.t1;
+----+------+-----+
| id | name | age |
+----+------+-----+
| 1 | HH1 | 1 |
| 2 | HH2 | 2 |
| 3 | HH3 | 3 |
+----+------+-----+
3 rows in set (0.01 sec)
HH@192.168.137.11 11:15:03 [(none)]>INSERT INTO test.t1 VALUES(NULL, 'HH4', 4);
Query OK, 1 row affected (0.01 sec)
# 使用 HH 登录成的日志
2016-11-03 23:13:46.907 info : (log_server_connections): Servers and router connection counts:
2016-11-03 23:13:46.907 info : (log_server_connections): current operations : 0 in 192.168.137.21:3306 RUNNING MASTER
2016-11-03 23:13:46.907 info : (log_server_connections): current operations : 0 in 192.168.137.22:3306 RUNNING SLAVE
2016-11-03 23:13:46.907 info : (log_server_connections): current operations : 0 in 192.168.137.23:3306 RUNNING SLAVE
2016-11-03 23:13:46.908 info : (select_connect_backend_servers): Selected RUNNING MASTER in 192.168.137.21:3306
2016-11-03 23:13:46.908 info : (select_connect_backend_servers): Selected RUNNING SLAVE in 192.168.137.22:3306
2016-11-03 23:13:46.908 info : (select_connect_backend_servers): Selected RUNNING SLAVE in 192.168.137.23:3306
2016-11-03 23:13:46.908 info : (session_alloc): Started Read-Write Service client session [0] for 'HH' from 192.168.137.11
2016-11-03 23:13:46.909 [9] info : (route_single_stmt): > Autocommit: [enabled], trx is [not open], cmd: COM_QUERY, type: QUERY_TYPE_READ|QUERY_TYPE_SYSVAR_READ, stmt: select @@version_comment limit 1
2016-11-03 23:13:46.909 [9] info : (route_single_stmt): Route query to master 192.168.137.21:3306 <
2016-11-03 23:13:46.922 [9] info : (route_single_stmt): > Autocommit: [enabled], trx is [not open], cmd: COM_QUERY, type: QUERY_TYPE_READ, stmt: select USER()
2016-11-03 23:13:46.922 [9] info : (route_single_stmt): Route query to slave 192.168.137.22:3306 <
# 执行 SELECT * FROM test.t1 语句被路由到 192.168.137.22:3306[server2]中的日志
2016-11-03 23:15:02.618 [9] info : (route_single_stmt): > Autocommit: [enabled], trx is [not open], cmd: COM_QUERY, type: QUERY_TYPE_READ, stmt: SELECT * FROM test.t1
2016-11-03 23:15:02.618 [9] info : (route_single_stmt): Route query to slave 192.168.137.22:3306 <
# 执行 INSERT INTO test.t1 VALUES(NULL, 'HH4', 4) 语句被路由到 192.168.137.21:3306[server1]中的日志
2016-11-03 23:17:02.716 [9] info : (route_single_stmt): > Autocommit: [enabled], trx is [not open], cmd: COM_QUERY, type: QUERY_TYPE_WRITE, stmt: INSERT INTO test.t1 VALUES(NULL, 'HH4', 4)
2016-11-03 23:17:02.716 [9] info : (route_single_stmt): Route query to master 192.168.137.21:3306 <
|
上面是最基本的读写分离操作
重点参数说明与演示
有许多刚刚搭建Maxscale的朋友会问到为什么我的select总是落在Master上,影响比较大的参数有两个,如下:
detect_replication_lag=true
# 允许主从最大间隔(s).有些朋友在做压力测试的是会说SELECT 会打在Master,多半是这个参数
max_slave_replication_lag=3600
|
1
2
3
4
5
|
# 监控主从复制延迟,可用后续指定router service的(配置此参数请求会永远落在 master)
detect_replication_lag=true
# 允许主从最大间隔(s).有些朋友在做压力测试的是会说SELECT 会打在Master,多半是这个参数
max_slave_replication_lag=3600
|
- detect_replication_lag=true 时的现象
执行 SELECT 语句
+----+------+-----+
| id | name | age |
+----+------+-----+
| 1 | HH1 | 1 |
| 2 | HH2 | 2 |
| 3 | HH3 | 3 |
| 4 | HH4 | 4 |
+----+------+-----+
4 rows in set (0.00 sec)
|
1
2
3
4
5
6
7
8
9
10
|
HH@192.168.137.11 11:24:59 [(none)]>SELECT * FROM test.t1;
+----+------+-----+
| id | name | age |
+----+------+-----+
| 1 | HH1 | 1 |
| 2 | HH2 | 2 |
| 3 | HH3 | 3 |
| 4 | HH4 | 4 |
+----+------+-----+
4 rows in set (0.00 sec)
|
查看路由的日志
2016-11-03 23:25:04.364 [7] info : (route_single_stmt): > Autocommit: [enabled], trx is [not open], cmd: COM_QUERY, type: QUERY_TYPE_READ, stmt: SELECT * FROM test.t1
2016-11-03 23:25:04.364 [7] info : (route_single_stmt): Route query to master 192.168.137.21:3306 <
|
1
2
3
|
# 该查询落在了Master(192.168.137.21:3306)[server1]上了
2016-11-03 23:25:04.364 [7] info : (route_single_stmt): > Autocommit: [enabled], trx is [not open], cmd: COM_QUERY, type: QUERY_TYPE_READ, stmt: SELECT * FROM test.t1
2016-11-03 23:25:04.364 [7] info : (route_single_stmt): Route query to master 192.168.137.21:3306 <
|
所以我的配置是将 detect_replication_lag=true 给注释了也就是用默认值false.
关于 max_slave_replication_lag 这个参数我就不演示了, 因为涉及到了使用 sysbench 等压力工具不在本文范畴, 有兴趣的自己玩玩, 这边就说说该参数的意义。
如果主从延时大于该参数那么 QDL DML DDL 三种语句都落在 Master(192.168.137.21:3306)[server1]上。
昵称: HH
QQ: 275258836
ttlsa群交流沟通(QQ群②: 6690706 QQ群③: 168085569 QQ群④: 415230207(新) 微信公众号: ttlsacom)
http://www.ttlsa.com/mysql/maxscale-install-read-write-split/
Maxscale安装-读写分离(1)的更多相关文章
- 网易cetus数据库中间件安装-读写分离版本
安装前提:1.数据库主从关系要做好:2.授权用户登录要做好:3.mysql最大连接数设置好,不然会报连接错误:4.版本最好是5.6以上. 1.安装依赖 yum install cmake gcc gl ...
- MySQL自动化安装(双主多从读写分离)
shell #!/bin/bash # Create by # version 1.0 # // # # check out lockfile whether or not exist IsInput ...
- 使用读写分离模式扩展 Grafana Loki
转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247500127&idx=1&sn=995987d558 ...
- Centos7安装maxscale 实现mysql的读写分离
安装依赖 yum install -y novacom-server.x86_64 libaio.x86_64 libaio-devel.x86_64 网站下载 https://downloads.m ...
- MaxScale:实现MySQL读写分离与负载均衡的中间件利器
1. MaxScale 是干什么的? 配置好了 MySQL 的主从复制结构后,我们希望实现读写分离,把读操作分散到从服务器中,并且对多个从服务器能实现负载均衡. 读写分离和负载均衡 是MySQL集群的 ...
- maxscale读写分离
今天,写写mysql兄弟公司maridb开发的一个读写分离,既然是兄弟,那也适用于mysql. 1.安装依赖包 yum -y install gcc gcc-c++ ncurses ncurses-d ...
- docker环境 mysql读写分离 mycat maxscale
#mysql读写分离测试 环境centos 7.4 ,docker 17.12 ,docker-compose mysql 5.7 主从 mycat 1.6 读写分离 maxscale 2.2.4 读 ...
- Mysql - 读写分离与读负载均衡之Maxscale
一.概述 常见的高可用方案如MMM和MHA等都将重点放在主库上,一旦主库出现故障,通过这些方案能将主库故障进行转移. 本文将给大家介绍一款由mariadb公司出品的中间件Maxscale,该中间件能实 ...
- MHA + Maxscale 数据库的高可用和读写分离
MySQL 常见发行版本 MySQL 标准化.自动化部署 深入浅出MySQL备份与恢复 深入理解MySQL主从复制 MySQL构架设计与容量规划 MHA Maxscale MySQL 常见发行版本 M ...
随机推荐
- 题解报告:hdu 2087 剪花布条(KMP入门)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面 ...
- jsp错误处理
jsp提供了很好的错误能力,除了在java代码中可以使用try语句,还可以指定一个特殊页面,当页面应用遇到未捕获的异常时,用户将看到一个精心设计的网页解释发生了什么,而不是一个用户无法理解的错误信息. ...
- 463 Island Perimeter 岛屿的周长
详见:https://leetcode.com/problems/island-perimeter/description/ C++: class Solution { public: int isl ...
- OpenCV2.4.9 + Ubuntu15.04配置
为了run Car-Detection安装了OpenCV. 基本上就照着这个弄下来: ubuntu14.04 + OpenCV2.4.9 配置方法 1. 安装openCV 所需依赖库或软件: s ...
- [转][ASP.NET MVC]如何定制Numeric属性/字段验证消息
本文转自:http://www.cnblogs.com/artech/archive/2012/02/13/NumericPropertyValidation.html 对于一个Numeric属性/字 ...
- Redux中的异步操作
异步操作的另一种方案就是让Action Creator返回一个Promise对象. 我们这边使用 redux-promise 中间件 import { createStore, applyMidd ...
- 慎将MBTI测试用于招聘或就业:4星|《人格魅力修炼指南》
人格魅力修炼指南:成为理想中的自己,就靠它了!(<哈佛商业评论>增刊) <哈佛商业评论>的11篇领导者人格魅力相关的文章.比较专业. 一些重要的信息:慎将MBTI测试用于“招聘 ...
- 【原创】DESTOON做中英双语言(多语言)切换版本具体详解
第一次发原创好激动,该注意点什么? 在开发过程中用户有许多要求,比如这个多语言切换就是一个需求. 首先讲解一下DESTOON(DT)后台系统如何做这个中英.甚至多语言切换的这个功能. DT本身不自带多 ...
- 获取url上的参数
var aa = '?name=hss&age=13'; function strToObj(str){ if(typeof str === 'undefi ...
- redis 的安装及常用的命令
前言: redis是一个key-value的存储系统,value支持string.list.set.zset.hash五种类型,且支持数据的本地存储 一.安装redis 前提:linux下需要安装了m ...