本文介绍标准版形态下Paxos多副本的相关概念和运维操作。
多副本产品形态
PolarDB-X支持单可用区、三可用区、两地三中心等多种副本和容灾架构。
工作原理和技术特点
工作原理
在同一时刻,整个集群中至多会有一个Leader节点来承担数据写入的任务,其余节点作为Follower参与多数派投票和数据同步。
Paxos的协议日志Consensus Log,全面融合了MySQL原有的binlog内容。在Leader主节点上会在binlog协议中新增Consensus相关的binlog event,同时在Follower备节点上替换传统的Relay Log,备库会通过SQL Thread进行Replay日志内容到数据文件,可以简单理解Paxos Consensus Log ≈ MySQL Binlog。
基于Paxos多数派自动选主机制,通过heartbeat/election timeout机制会监听Leader节点的变化,在Leader节点不可用时Follower节点会自动完成切主,新的Leader节点提供服务之前需等待SQL Thread完成存量日志的Replay,确保新Leader有最新的数据。
技术特点
基于Paxos的多副本架构有如下特点:
高性能,采用单Leader模式,可以提供类似MySQL semi-sync模式的性能。
RPO=0,Paxos协议日志全面融合MySQL原有的binlog内容,基于多数派同步机制确保数据不丢。
自动HA,基于Paxos的选举心跳机制,节点自动完成节点探活和HA切换,可以替换传统MySQL的外部主备HA探活机制。
Paxos多副本的元数据
查询Paxos多副本的所有节点信息
通过如下语句查询Paxos多副本的所有节点信息(只有Leader节点会返回数据,非Leader节点会返回空结果):
SELECT * FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_GLOBAL
返回结果:
+-----------+------------------+-------------+------------+----------+-----------+------------+-----------------+----------------+---------------+------------+--------------+
| SERVER_ID | IP_PORT | MATCH_INDEX | NEXT_INDEX | ROLE | HAS_VOTED | FORCE_SYNC | ELECTION_WEIGHT | LEARNER_SOURCE | APPLIED_INDEX | PIPELINING | SEND_APPLIED |
+-----------+------------------+-------------+------------+----------+-----------+------------+-----------------+----------------+---------------+------------+--------------+
| 1 | 10.0.3.244:14886 | 1 | 0 | Leader | Yes | No | 5 | 0 | 0 | No | No |
| 2 | 10.0.3.245:14886 | 1 | 2 | Follower | Yes | No | 5 | 0 | 1 | Yes | No |
| 3 | 10.0.3.246:14886 | 1 | 2 | Follower | No | No | 5 | 0 | 1 | Yes | No |
+-----------+------------------+-------------+------------+----------+-----------+------------+-----------------+----------------+---------------+------------+--------------+
3 rows in set (0.00 sec)
名词解释:
IP_PORT:多副本的节点IP和端口。
ROLE:Paxos多副本的角色,Leader/Follower/Learner等。
ELECTION_WEIGHT:选举权重,一般用于跨机房容灾时,优先让同机房的副本具有较高的权重,可以提供同机房优先。
MATCH_INDEX/NEXT_INDEX/APPLIED_INDEX:代表Consensus日志的位点信息。
查询本机Local的Paxos状态
通过如下语句查询本机Local的Paxos状态:
SELECT * FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_LOCAL
返回结果:
MySQL [(none)]> SELECT * FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_LOCAL \G
*************************** 1. row ***************************
SERVER_ID: 1
CURRENT_TERM: 6
CURRENT_LEADER: 10.0.3.244:14886
COMMIT_INDEX: 1
LAST_LOG_TERM: 6
LAST_LOG_INDEX: 1
ROLE: Leader
VOTED_FOR: 1
LAST_APPLY_INDEX: 0
SERVER_READY_FOR_RW: Yes
INSTANCE_TYPE: Normal
名词解释:
CURRENT_LEADER:返回的是当前Leader节点的IP和Port。
ROLE:Paxos多副本的角色,Leader/Follower/Learner等。
INSTANCE_TYPE::副本的类型,Normal/Log。
查询Paxos多副本的数据同步情况
通过如下语句查询Paxos多副本的数据同步情况(只有Leader节点会返回数据,非Leader节点会返回空结果):
SELECT * FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_HEALTH
返回结果:
+-----------+------------------+----------+-----------+---------------+-----------------+
| SERVER_ID | IP_PORT | ROLE | CONNECTED | LOG_DELAY_NUM | APPLY_DELAY_NUM |
+-----------+------------------+----------+-----------+---------------+-----------------+
| 1 | 10.0.3.244:14886 | Follower | YES | 0 | 22 |
| 2 | 10.0.3.245:14886 | Leader | YES | 0 | 0 |
| 3 | 10.0.3.246:14886 | Follower | YES | 0 | 11 |
+-----------+------------------+----------+-----------+---------------+-----------------+
名词解释:
CONNECTED:代表节点是否正常。
LOG_DELAY_NUM:代表Paxos的Consensus Log的同步延迟,类似于MySQL的Relaylog的同步延迟。
APPLY_DELAY_NUM:代表Paxos的Consensus Log在Follower节点的回放延迟,类似于MySQL的SQL回放线程的回放延迟。