全部產品
Search
文件中心

PolarDB:Paxos多副本

更新時間:Jul 06, 2024

本文介紹標準版形態下Paxos多副本的相關概念和營運操作。

多副本產品形態

PolarDB-X支援單可用性區域、三可用性區域、兩地三中心等多種副本和容災架構。image.png

工作原理和技術特點

工作原理

image.png

  • 在同一時刻,整個叢集中至多會有一個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回放線程的回放延遲。