本文介紹標準版形態下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回放線程的回放延遲。