前言
PolarDB-X 作爲PolarDB分佈式版,是阿里巴巴自主設計研發的高性能雲原生分佈式數據庫產品,採用 Shared-nothing 與存儲分離計算架構,支持集中式和分佈式一體化形態,具備金融級數據高可用、分佈式水平擴展、混合負載、低成本存儲和極致彈性等能力,堅定以兼容MySQL開源生態構建分佈式能力,爲用戶提供高吞吐、大存儲、低延時、易擴展和超高可用的雲時代數據庫服務。
PolarDB-X在架構上可以簡單分爲CN節點和DN節點。計算節點CN負責SQL的解析和執行,存儲節點DN負責數據的分佈式事務和高可用存儲。
2023年10月份,PolarDB-X 開源正式發佈V2.3.0版本,重點推出PolarDB-X標準版(集中式形態),將PolarDB-X分佈式中的DN節點提供單獨服務。支持Paxos協議的多副本模式、lizard分佈式事務引擎,採用一主一備一日誌的三節點架構,通過Paxos協議多副本同步複製,確保數據的強一致性(RPO=0),可以100%兼容MySQL。同時在性能場景上,採用生產級部署和參數(開啓雙1 + Paxos多副本強同步),相比於開源MySQL 8.0.34,PolarDB-X在讀寫混合場景上有30~40%的性能提升,可以作爲開源MySQL的最佳替代選擇。
本篇文章的後續部分,主要介紹如何從0到1快速體驗:PolarDB-X的集中式形態(“基於Paxos的MySQL三副本”)。
工作原理
PolarDB-X基於Paxos的MySQL三副本,大致的工作原理:
1、在同一時刻,整個集羣中至多會有一個Leader節點來承擔數據寫入的任務,其餘節點作爲follower參與多數派投票和數據同步
2、Paxos的協議日誌Consensus Log,全面融合了MySQL原有的binlog內容。在Leader主節點上會在binlog協議中新增Consensus相關的binlog event,同時在Follower備節點上替換傳統的Relay Log,備庫會通過SQL Thread進行Replay日誌內容到數據文件,可以簡單理解Paxos Consensus Log ≈ MySQL Binlog
3、基於Paxos多數派自動選主機制,通過heartbeat/election timeout機制會監聽Leader節點的變化,在Leader節點不可用時Follower節點會自動完成切主,新的Leader節點提供服務之前需等待SQL Thread完成存量日誌的Replay,確保新Leader有最新的數據。
PolarDB-X基於Paxos的MySQL三副本,技術特點:
1、高性能,採用單Leader的模式,可以提供類比MySQL semi-sync模式的性能
2、RPO=0,Paxos協議日誌全面融合MySQL原有的binlog內容,基於多數派同步機制確保數據不丟
3、自動HA,基於Paxos的選舉心跳機制,MySQL自動完成節點探活和HA切換,可以替換傳統MySQL的HA機制。
更多技術原理,可以參考:PolarDB-X 存儲引擎核心技術 | Paxos多副本
快速部署
PolarDB-X支持多種形態的快速部署能力,可以結合各自需求盡心選擇
本文采用依賴最少的RPM包部署方式,通過 RPM 部署 PolarDB-X 標準版(集中式形態),需要首先獲取相應的 RPM 包,您可以手動編譯生成該 RPM 包,也可以自行下載(請根據實際情況下載 x86 或 arm 對應的 RPM)。
RPM下載地址:https://github.com/polardb/polardbx-engine/releases/
(國內RPM下載地址:https://openpolardb.com/download
1、選擇源碼編譯RPM包,可以參考文檔:從源碼編譯生成RPM
# 拉取代碼
git clone https://github.com/polardb/polardbx-engine.git --depth 1
# 編譯生成 rpm
cd polardbx-engine/rpm && rpmbuild -bb t-polardbx-engine.spec
最後,基於RPM包快速安裝
yum install -y <您下載或編譯的rpm>
安裝後的二進制文件,會出現在 /opt/polardbx-engine/bin 中。
體驗單機模式
準備一份 my.cnf(參考模板)和數據目錄(如果改了 my.cnf,則下面的目錄也要相應修改),就可以準備啓動了。
# 創建並切換到 polarx 用戶
useradd -ms /bin/bash polarx
echo "polarx:polarx" | chpasswd
echo "polarx ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
su - polarx
# 創建必要目錄
mkdir polardbx-engine
cd polardbx-engine && mkdir log mysql run data tmp
# 初始化my.cnf文件
vi my.cnf
# 初始化
/opt/polardbx_engine/bin/mysqld --defaults-file=my.cnf --initialize-insecure
# 啓動
/opt/polardbx_engine/bin/mysqld_safe --defaults-file=my.cnf &
登錄數據庫,驗證狀態
# 登錄數據庫,my.cnf指定了端口
mysql -h127.0.0.1 -P4886 -uroot
# 查詢本機的paxos角色
MySQL [(none)]> SELECT * FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_LOCAL \G
*************************** 1. row ***************************
SERVER_ID: 1
CURRENT_TERM: 2
CURRENT_LEADER: 127.0.0.1:14886
COMMIT_INDEX: 1
LAST_LOG_TERM: 2
LAST_LOG_INDEX: 1
ROLE: Leader
VOTED_FOR: 1
LAST_APPLY_INDEX: 0
SERVER_READY_FOR_RW: Yes
INSTANCE_TYPE: Normal
1 row in set (0.00 sec)
# 查詢集羣所有機器的paxos角色(只有Leader節點會返回數據)
MySQL [(none)]> SELECT * FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_GLOBAL \G
*************************** 1. row ***************************
SERVER_ID: 1
IP_PORT: 127.0.0.1:14886
MATCH_INDEX: 1
NEXT_INDEX: 0
ROLE: Leader
HAS_VOTED: Yes
FORCE_SYNC: No
ELECTION_WEIGHT: 5
LEARNER_SOURCE: 0
APPLIED_INDEX: 0
PIPELINING: No
SEND_APPLIED: No
1 row in set (0.00 sec)
因爲默認my.cnf只配置了單機模式啓動,因此只會顯示單副本的Leader狀態
體驗基於Paxos的高可用
我們在 3 臺機器上,部署一個完整的集中式集羣,並驗證高可用切換的能力。 假設我們的 3 臺機器 IP 分別爲:
10.0.3.244
10.0.3.245
10.0.3.246
我們在 3 臺機器上,安裝 RPM 後,準備好 my.cnf 和目錄(如果有任何步驟失敗,請完全清理這些目錄,重新創建)。然後在 3 個機器上,分別按如下方式啓動:
# 10.0.3.244 上執行
/opt/polardbx_engine/bin/mysqld --defaults-file=my.cnf \
--cluster-info='10.0.3.244:14886;10.0.3.245:14886;10.0.3.246:14886@1' \
--initialize-insecure
/opt/polardbx_engine/bin/mysqld_safe --defaults-file=my.cnf \
--cluster-info='10.0.3.244:14886;10.0.3.245:14886;10.0.3.246:14886@1' \
&
# 10.0.3.245 上執行
/opt/polardbx_engine/bin/mysqld --defaults-file=my.cnf \
--cluster-info='10.0.3.244:14886;10.0.3.245:14886;10.0.3.246:14886@2' \
--initialize-insecure
/opt/polardbx_engine/bin/mysqld_safe --defaults-file=my.cnf \
--cluster-info='10.0.3.244:14886;10.0.3.245:14886;10.0.3.246:14886@2' \
&
# 10.0.3.246 上執行
/opt/polardbx_engine/bin/mysqld --defaults-file=my.cnf \
--cluster-info='10.0.3.244:14886;10.0.3.245:14886;10.0.3.246:14886@3' \
--initialize-insecure
/opt/polardbx_engine/bin/mysqld_safe --defaults-file=my.cnf \
--cluster-info='10.0.3.244:14886;10.0.3.245:14886;10.0.3.246:14886@3' \
&
注意:我們在啓動時修改了 cluster-info 的配置項,其中的格式爲 [host1]:[port1];[host2]:[port2];[host3]:[port3]@[idx] ,不同的機器,只有 [idx] 不同,[idx] 也反映了該機器是第幾個 [host][port]。請根據實際機器的 ip 修改該配置項。
另外,PolarDB-X的副本啓動爲Logger模式,需要設置cluster-log-type-node=ON
# 比如我們把第三個主機,配置爲logger模式
/opt/polardbx_engine/bin/mysqld_safe --defaults-file=my.cnf \
cluster-log-type-node=ON \
--cluster-info='10.0.3.244:14886;10.0.3.245:14886;10.0.3.246:14886@3' \
&
體驗一(三副本啓動)
Paxos三副本在逐臺啓動時,剛啓動第一臺時,會因爲不滿足Paxos多數派,無法產生選主結果,此時數據庫無法登錄。
> tail -f /home/polarx/polardbx-engine/log/alert.log
......
[ERROR] Server 1 : Paxos state change from FOLL to CAND !!
[ERROR] Server 1 : Start new requestVote: new term(2)
[ERROR] Server 1 : Paxos state change from CAND to CAND !!
[ERROR] Server 1 : Start new requestVote: new term(3)
[ERROR] Server 1 : Paxos state change from CAND to CAND !!
[ERROR] Server 1 : Start new requestVote: new term(4)
[ERROR] Server 1 : Paxos state change from CAND to CAND !!
[ERROR] Server 1 : Start new requestVote: new term(5)
......
# 阻塞直到第二個節點加入,併成功選主
[ERROR] EasyNet::onConnected server 2
[ERROR] Server 1 : Paxos state change from CAND to CAND !!
[ERROR] Server 1 : Start new requestVote: new term(6)
[ERROR] Server 1 : server 2 (term:6) vote me to became leader.
[ERROR] Server 1 : Paxos state change from CAND to LEDR !!
[ERROR] Server 1 : become Leader (currentTerm 6, lli:1, llt:6)!!
數據庫啓動完成後,我們登錄數據庫,驗證一下集羣的狀態
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
MySQL [(none)]> `
+-----------+------------------+-------------+------------+----------+-----------+------------+-----------------+----------------+---------------+------------+--------------+
| 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)
我們可以看到,三臺機器中10.0.3.244爲leader,10.0.3.245、10.0.3.246都爲Follower角色
體驗二(kill -9切換)
基於Paxos的三副本模式,只有 Leader 節點可以寫入數據。我們在 Leader 上建一個庫表,寫入一些簡單的數據:
CREATE DATABASE db1;
USE db1;
CREATE TABLE tb1 (id int);
INSERT INTO tb1 VALUES (0), (1), (2);
然後我們可以在 Leader和Follower 上把數據查出來。 我們也可以在 Leader 上查詢集羣的狀態:
MySQL [db1]> SELECT SERVER_ID,IP_PORT,MATCH_INDEX,ROLE,APPLIED_INDEX FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_GLOBAL ;
+-----------+------------------+-------------+----------+---------------+
| SERVER_ID | IP_PORT | MATCH_INDEX | ROLE | APPLIED_INDEX |
+-----------+------------------+-------------+----------+---------------+
| 1 | 10.0.3.244:14886 | 4 | Leader | 4 |
| 2 | 10.0.3.245:14886 | 4 | Follower | 4 |
| 3 | 10.0.3.246:14886 | 4 | Follower | 4 |
+-----------+------------------+-------------+----------+---------------+
3 rows in set (0.00 sec)
其中 APPLIED_INDEX 都是 4 ,說明數據目前Paxos三節點上的Log Index是完全一致的。 接下來,我們對 Leader 節點(10.0.3.244)進程 kill -9 ,讓集羣選出新 Leader。
kill -9 $(pgrep -x mysqld)
舊 Leader 被 kill 後,mysqld_safe 會立馬重新拉起 mysqld 進程。 隨後,我們看到,Leader 變成了 10.0.3.245 節點了
# 10.0.3.245新Leader上,查詢狀態
MySQL [(none)]> SELECT SERVER_ID,IP_PORT,MATCH_INDEX,ROLE,APPLIED_INDEX FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_GLOBAL ;
+-----------+------------------+-------------+----------+---------------+
| SERVER_ID | IP_PORT | MATCH_INDEX | ROLE | APPLIED_INDEX |
+-----------+------------------+-------------+----------+---------------+
| 1 | 10.0.3.244:14886 | 5 | Follower | 5 |
| 2 | 10.0.3.245:14886 | 5 | Leader | 4 |
| 3 | 10.0.3.246:14886 | 5 | Follower | 5 |
+-----------+------------------+-------------+----------+---------------+
3 rows in set (0.00 sec)
我們在10.0.3.244原leader上,查詢狀態已經變爲follower
MySQL [(none)]> SELECT * FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_LOCAL \G
*************************** 1. row ***************************
SERVER_ID: 1
CURRENT_TERM: 7
CURRENT_LEADER: 10.0.3.245:14886
COMMIT_INDEX: 5
LAST_LOG_TERM: 7
LAST_LOG_INDEX: 5
ROLE: Follower
VOTED_FOR: 2
LAST_APPLY_INDEX: 5
SERVER_READY_FOR_RW: No
INSTANCE_TYPE: Normal
可以通過不斷kill -9多副本,來驗證Leader在三個節點中不斷遷移和恢復的能力。 通過以上步驟,我們簡單驗證了基於Paxos三副本自動選主和切換的能力。
體驗三(預期切換命令)
PolarDB-X內置提供面向Paxos三副本運維管理的命令 比如當前集羣狀態:
MySQL [(none)]> SELECT SERVER_ID,IP_PORT,MATCH_INDEX,ROLE,APPLIED_INDEX FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_GLOBAL ;
+-----------+------------------+-------------+----------+---------------+
| SERVER_ID | IP_PORT | MATCH_INDEX | ROLE | APPLIED_INDEX |
+-----------+------------------+-------------+----------+---------------+
| 1 | 10.0.3.244:14886 | 9 | Leader | 8 |
| 2 | 10.0.3.245:14886 | 9 | Follower | 9 |
| 3 | 10.0.3.246:14886 | 9 | Follower | 9 |
+-----------+------------------+-------------+----------+---------------+
指令1:指定IP切換Leader
call dbms_consensus.change_leader("10.0.3.245:14886");
指令2:查詢和清理consensus日誌
# 查詢consensus日誌(PolarDB-X基於binlog文件實現paxos consensus日誌)
MySQL [(none)]> show consensus logs;
+---------------------+-----------+-----------------+
| Log_name | File_size | Start_log_index |
+---------------------+-----------+-----------------+
| mysql-binlog.000001 | 1700 | 1 |
+---------------------+-----------+-----------------+
1 row in set (0.00 sec)
# 清理consensus日誌,指定logIndex(有保護機制,如果有副本還在消費則不會清理成功)
MySQL [(none)]> call dbms_consensus.purge_log(1);
Query OK, 0 rows affected (0.00 sec)
除此以外,額外支持:動態增刪副本、節點角色變更(Learner/Follower)、選舉權重設置
# 加learner
call dbms_consensus.add_learner("127.0.0.1:14886");
# 減learner
call dbms_consensus.drop_learner("127.0.0.1:14886");
# learner轉follower,learner日誌落後太多會返回失敗
call dbms_consensus.upgrade_learner("127.0.0.1:14886");
# follower降級learner
call dbms_consensus.downgrade_follower("127.0.0.1:15700");
# 修改follower節點的選主權重[1-9],默認爲5
call dbms_consensus.configure_follower("127.0.0.1:15700", 9);
體驗四(模擬離線啓動)
PolarDB-X支持多副本的離線啓動,比如因爲斷網或斷電需要,期望數據庫支持整體關機和離線啓動的能力,可以基於本地文件重新離線組建新的三副本。 做一個簡單模擬,我們登錄三臺機器進行整體kil -9
kill -9 $(pgrep -x mysqld)
原位模擬離線啓動,重新組建三副本集羣:
# 10.0.3.244 上執行
/opt/polardbx_engine/bin/mysqld_safe --defaults-file=my.cnf \
--cluster-info='10.0.3.244:14886;10.0.3.245:14886;10.0.3.246:14886@1' \
&
# 10.0.3.245 上執行
/opt/polardbx_engine/bin/mysqld_safe --defaults-file=my.cnf \
--cluster-info='10.0.3.244:14886;10.0.3.245:14886;10.0.3.246:14886@2' \
&
# 10.0.3.246 上執行
/opt/polardbx_engine/bin/mysqld_safe --defaults-file=my.cnf \
--cluster-info='10.0.3.244:14886;10.0.3.245:14886;10.0.3.246:14886@3' \
&
如果真實業務中,涉及了機器遷移,拷貝原有數據文件到新機器後,可以在三副本啓動時設置--cluster-force-change-meta=ON,強制刷新下集羣的元數據。 例子:
# 強制刷新元數據(刷新成功後會退出mysqld和mysqld_safe)
/opt/polardbx_engine/bin/mysqld_safe --defaults-file=my.cnf \
--cluster-force-change-meta=ON \
--cluster-info='192.168.6.183:14886;192.168.6.184:14886;192.168.6.185:14886@1' \
&
# 按照新配置,重新啓動
/opt/polardbx_engine/bin/mysqld_safe --defaults-file=my.cnf \
--cluster-info='192.168.6.183:14886;192.168.6.184:14886;192.168.6.185:14886@1' \
&
體驗基於Paxos的性能壓測
我們通過3臺機器部署Paxos多副本,快速驗證下PolarDb-X的性能 在默認參數基礎上,進行PolarDB-X相關參數調優(可以參考絕大部分的MySQL參數調優方法):
[mysqld]
# 調整最大連接數
max_connections=20000
# 強制刷盤
sync_binlog=1
innodb_flush_log_at_trx_commit=1
# 優化follower的複製效率
slave_parallel_type=LOGICAL_CLOCK
slave_parallel_workers=16
# binlog參數
binlog_order_commits=OFF
binlog_cache_size=1M
binlog_transaction_dependency_tracking=WRITESET
# 調整innodb BP大小
innodb_buffer_pool_size=20G
# innodb參數
innodb_log_buffer_size=200M
innodb_log_file_size=2G
innodb_io_capacity=20000
innodb_io_capacity_max=40000
innodb_max_dirty_pages_pct=75
innodb_lru_scan_depth=8192
innodb_open_files=20000
# consensus
consensus_log_cache_size=512M
consensus_io_thread_cnt=8
consensus_worker_thread_cnt=8
consensus_prefetch_cache_size=256M
# timezone
default_time_zone=+08:00
快速創建一個壓測用戶:
CREATE USER polarx IDENTIFIED BY 'polarx';
grant all privileges on *.* to 'polarx'@'%' ;
FLUSH PRIVILEGES ;
參考壓測文檔,部署PolarDB-X開源的benchmark-boot壓測工具
# 下載鏡像
docker pull polardbx/benchmark-boot:latest
# 啓動容器
docker run -itd --name 'benchmark-boot' --privileged --net=host \
-v /etc/localtime:/etc/localtime polardbx/benchmark-boot:latest \
/usr/sbin/init
# 驗證
curl http://127.0.0.1:4121/
壓測方法可以參考文檔 :Sysbench 測試報告、TPC-C 測試報告 壓測過程中,可以通過paxos的系統視圖,關注數據複製狀態
MySQL [(none)]> 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 |
+-----------+------------------+----------+-----------+---------------+-----------------+
LOG_DELAY_NUM代表binlog複製到paxos多副本的延遲數量,如果接近0代表基本沒有延遲 APPLY_DELAY_NUM代表在副本中binlog apply應用的延遲數量,如果接近0代表基本沒有延遲
壓測環境採用 3臺ecs.i4.8xlarge(32c256GB + 7TB的磁盤) TPC-C 1000倉,跑200併發的性能24萬 tpmC 資源情況:Leader節點CPU 95%、Follower節點CPU 30%(Logger節點<10%)
02:52:42,321 [main] INFO jTPCC : Term-00,
02:52:42,322 [main] INFO jTPCC : Term-00, +-------------------------------------------------------------+
02:52:42,322 [main] INFO jTPCC : Term-00, BenchmarkSQL v5.0
02:52:42,323 [main] INFO jTPCC : Term-00, +-------------------------------------------------------------+
02:52:42,323 [main] INFO jTPCC : Term-00, (c) 2003, Raul Barbosa
02:52:42,323 [main] INFO jTPCC : Term-00, (c) 2004-2016, Denis Lussier
02:52:42,324 [main] INFO jTPCC : Term-00, (c) 2016, Jan Wieck
02:52:42,324 [main] INFO jTPCC : Term-00, +-------------------------------------------------------------+
02:52:42,324 [main] INFO jTPCC : Term-00,
02:52:42,324 [main] INFO jTPCC : Term-00, db=mysql
02:52:42,324 [main] INFO jTPCC : Term-00, driver=com.mysql.jdbc.Driver
02:52:42,324 [main] INFO jTPCC : Term-00, conn=jdbc:mysql://10.0.3.245:4886/tpcc?readOnlyPropagatesToServer=false&rewriteBatchedStatements=true&failOverReadOnly=false&connectTimeout=3000&socketTimeout=0&allowMultiQueries=true&clobberStreamingResults=true&characterEncoding=utf8&netTimeoutForStreamingResults=0&autoReconnect=true&useSSL=false
02:52:42,324 [main] INFO jTPCC : Term-00, user=polarx
02:52:42,324 [main] INFO jTPCC : Term-00,
02:52:42,324 [main] INFO jTPCC : Term-00, warehouses=1000
02:52:42,325 [main] INFO jTPCC : Term-00, terminals=200
02:52:42,326 [main] INFO jTPCC : Term-00, runMins=5
02:52:42,326 [main] INFO jTPCC : Term-00, limitTxnsPerMin=0
02:52:42,326 [main] INFO jTPCC : Term-00, terminalWarehouseFixed=true
02:52:42,326 [main] INFO jTPCC : Term-00,
02:52:42,326 [main] INFO jTPCC : Term-00, newOrderWeight=45
02:52:42,326 [main] INFO jTPCC : Term-00, paymentWeight=43
02:52:42,326 [main] INFO jTPCC : Term-00, orderStatusWeight=4
02:52:42,326 [main] INFO jTPCC : Term-00, deliveryWeight=4
02:52:42,326 [main] INFO jTPCC : Term-00, stockLevelWeight=4
02:52:42,326 [main] INFO jTPCC : Term-00, newOrderRemotePercent=10
02:52:42,326 [main] INFO jTPCC : Term-00, paymentRemotePercent=15
02:52:42,326 [main] INFO jTPCC : Term-00, useStoredProcedure=false
02:52:42,326 [main] INFO jTPCC : Term-00,
02:52:42,327 [main] INFO jTPCC : Term-00, resultDirectory=null
02:52:42,327 [main] INFO jTPCC : Term-00, osCollectorScript=null
02:52:42,327 [main] INFO jTPCC : Term-00,
02:52:42,516 [main] INFO jTPCC : Term-00, C value for C_LAST during load: 226
02:52:42,517 [main] INFO jTPCC : Term-00, C value for C_LAST this run: 107
02:52:42,517 [main] INFO jTPCC : Term-00,
.......
02:57:43,133 [Thread-172] INFO jTPCC : Term-00,
02:57:43,133 [Thread-172] INFO jTPCC : Term-00,
02:57:43,134 [Thread-172] INFO jTPCC : Term-00, Measured tpmC (NewOrders) = 237040.65
02:57:43,134 [Thread-172] INFO jTPCC : Term-00, Measured tpmTOTAL = 526706.43
02:57:43,134 [Thread-172] INFO jTPCC : Term-00, Session Start = 2023-11-21 02:52:43
02:57:43,134 [Thread-172] INFO jTPCC : Term-00, Session End = 2023-11-21 02:57:43
02:57:43,134 [Thread-172] INFO jTPCC : Term-00, Transaction Count = 2633935
總結
本文通過從源碼編譯、RPM安裝,全流程驗證PolarDB-X的單節點、三副本等啓動方式,以及通過kill -9模擬故障,快速體驗RPO=0的自動切換。 另外,在面向可運維性上,支持多種運維指令、以及離線重搭啓動的方式,很好滿足了MySQL生態的運維習慣。 最後,通過一個性能壓測的實踐,快速復現PolarDB-X性能白皮書的測試結果,後續也會逐步增加關於PolarDB-X Paxos與MySQL MGR的技術原理和性能對比的相關測試,歡迎大家繼續關注。
附錄(my.cnf 簡單模板)
[mysqld]
basedir = /opt/polardbx-engine
log_error_verbosity = 2
default_authentication_plugin = mysql_native_password
gtid_mode = ON
enforce_gtid_consistency = ON
log_bin = mysql-binlog
binlog_format = row
binlog_row_image = FULL
master_info_repository = TABLE
relay_log_info_repository = TABLE
# change me if needed
datadir = /home/polarx/polardbx-engine/data
tmpdir = /home/polarx/polardbx-engine/tmp
socket = /home/polarx/polardbx-engine/tmp.mysql.sock
log_error = /home/polarx/polardbx-engine/log/alert.log
port = 4886
cluster_id = 1234
cluster_info = 127.0.0.1:14886@1
[mysqld_safe]
pid_file = /home/polarx/polardbx-engine/run/mysql.pid
作者:七鋒
本文爲阿里雲原創內容,未經允許不得轉載。