§ MGR Arbitrator(仲裁节点)


§ 简介

GreatSQL中新Arbitrator节点(仲裁节点/投票节点)角色,使得可以用更低的服务器成本实现高可用目标。

该节点仅参与MGR投票仲裁,不参与MGR事务认证,不存放实际数据(不需要存储所有用户表数据,只存储必要的系统表),也无需执行DML操作(不需要存储Binlog,也不需要转储和应用 Relay Log),因此可以用一般配置级别的服务器,在保证MGR可靠性的同时还能降低服务器成本。

新增参数group_replication_arbitrator用于设置仲裁节点。

若想设定某个成员节点为仲裁节点角色,在其他MGR相关参数已经配置好的前提下,在 my.cnf 配置文件中添加如下配置:

[mysqld]
group_replication_arbitrator=ON
1
2

然后启动MGR服务,即可自动加入MGR集群。查看MGR成员节点状态:

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.32         | XCom                       |
| group_replication_applier | 4b51849b-3b13-11ec-a180-525400e802e2 | 172.16.16.10 |        3306 | ONLINE       | ARBITRATOR  | 8.0.32         | XCom                       |
| group_replication_applier | 4b7b3b88-3b13-11ec-86e9-525400e2078a | 172.16.16.53 |        3306 | ONLINE       | PRIMARY     | 8.0.32         | XCom                       |
+---------------------------+--------------------------------------+--------------+-------------+--------------+-------------+----------------+----------------------------+
1
2
3
4
5
6
7
8

可以看到,MEMBER_ROLE 这列显示为 ARBITRATOR,表示该节点是一个仲裁节点。

提示

当MGR集群中只剩下Arbitrator节点时,则它会自动退出,需要手动处理以再次启动MGR集群。

§ 仲裁节点负载更低

对一个包含仲裁节点的 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

观察其中的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

继续观察对比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

可以看到Arbitrator节点的系统负载明显小了很多,这就可以考虑在一个服务器上跑多个仲裁节点角色,以更低的成本实现高可用目标。

§ 注意事项

  1. 当MGR集群包含仲裁节点时,若想将单主切换成多主模式,需要先把投票节点先关闭再进行切换,否则可能会导致切换失败,并且仲裁节点报错退出MGR集群。

  2. 仲裁节点只在GreatSQL中才支持,原生MySQL不支持,因此也无法采用MySQL Shell工具管理包含仲裁节点的MGR集群,需要改用 GreatSQL Shell 进行管理。

扫码关注微信公众号

greatsql-wx