§ MGR Arbitrator(仲裁节点)
§ 概要
GreatSQL中新增仲裁节点(投票节点)角色,使得可以用更低的服务器成本实现更高可用。
该节点仅参与MGR投票仲裁(不参与 MGR 事务认证),不存放实际数据(不需要存储所有用户表数据,只需要存储 mysql 系统表),也无需执行DML操作(不需要存储 Binlog,也不需要转储和应用 Relay Log),因此可以用一般配置级别的服务器,在保证MGR可靠性的同时还能降低服务器成本。
新增参数group_replication_arbitrator
用于设置仲裁节点。
若想新增一个仲裁节点,只需在 my.cnf
配置文件中添加如下配置:
group_replication_arbitrator = true
当集群中只剩下 Arbitrator 节点时,则会自动退出。
greatsql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+--------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+--------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 4b2b46e2-3b13-11ec-9800-525400fb993a | 172.16.16.16 | 3306 | ONLINE | SECONDARY | 8.0.27 | XCom |
| group_replication_applier | 4b51849b-3b13-11ec-a180-525400e802e2 | 172.16.16.10 | 3306 | ONLINE | ARBITRATOR | 8.0.27 | XCom |
| group_replication_applier | 4b7b3b88-3b13-11ec-86e9-525400e2078a | 172.16.16.53 | 3306 | ONLINE | PRIMARY | 8.0.27 | XCom |
+---------------------------+--------------------------------------+--------------+-------------+--------------+-------------+----------------+----------------------------+
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
可以看到,MEMBER_ROLE
这列显示为 ARBITRATOR,表示该节点是一个仲裁节点。
§ 仲裁节点产生的系统负载很低
对一个包含仲裁节点的 MGR 集群执行 sysbench 性能压测,观察压测期间各节点负载数据,先看 Primary 节点:
$ top
...
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20198 mysql 20 0 11.9g 3.4g 23440 S 207.6 21.6 21:33.48 mysqld
$ vmstat -S m 1
...
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 3 0 5637 152 6385 0 0 0 56311 53024 53892 36 17 43 3 0
0 3 0 5633 152 6389 0 0 0 46053 51900 52435 35 17 44 4 0
6 0 0 5628 152 6393 0 0 0 47024 52026 52388 36 17 44 3 0
7 1 0 5623 152 6397 0 0 0 51673 52165 53113 36 17 43 3 0
3 1 0 5621 152 6401 0 0 0 44231 52164 52875 35 17 45 3 0
3 4 0 5616 152 6404 0 0 0 49278 52854 53139 37 17 43 3 0
4 0 0 5613 152 6408 0 0 0 49738 52848 53361 37 17 43 3 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
在其中一个 Secondary 节点上:
$ top
...
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
26824 mysql 20 0 11.6g 3.0g 22880 S 175.7 19.4 19:27.34 mysqld
$ vmstat -S m 1
...
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 2089 128 10757 0 0 0 53671 31463 46803 30 11 55 4 0
3 0 0 2082 128 10765 0 0 0 52737 31475 45862 30 11 55 4 0
2 0 0 2073 128 10772 0 0 0 52121 31035 45820 29 12 55 4 0
3 0 0 2065 128 10781 0 0 0 51469 31081 44831 30 12 55 4 0
1 0 0 2057 128 10788 0 0 0 53071 31442 45664 30 11 55 4 0
3 0 0 2049 128 10795 0 0 0 51357 29848 43391 30 12 54 4 0
0 0 0 2041 128 10803 0 0 0 52404 30545 45020 29 12 56 4 0
3 0 0 2034 128 10811 0 0 0 51355 31483 45582 32 12 53 3 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
在 Arbitrator 节点上:
$ top
...
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
16997 mysql 20 0 11.2g 2.5g 22184 S 29.6 16.4 3:47.84 mysqld
$ vmstat -S m 1
...
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 6145 141 7095 0 0 0 44 17767 16010 4 4 93 0 0
1 0 0 6146 141 7095 0 0 0 0 17020 16189 4 4 93 0 0
0 0 0 6144 141 7095 0 0 0 0 16958 15365 3 4 93 0 0
0 0 0 6145 141 7095 0 0 0 0 15942 14969 3 3 93 0 0
1 0 0 6146 141 7095 0 0 0 0 17698 16320 4 4 92 0 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
可以看到负载明显小了很多,这就可以在一个服务器上跑多个仲裁节点角色。
注意事项
- 在有仲裁节点的情况下,将单主切换成多主模式时,需要把投票节点先关闭再进行切换,否则可能会导致切换失败,并且仲裁节点报错退出MGR。
- 仲裁节点在 GreatSQL 中才支持,MySQL 社区版不支持,因此也无法采用 MySQL Shell 社区版管理包含仲裁节点的 MGR 集群,需要改用 GreatSQL Shell 进行管理。
扫码关注微信公众号