免費體驗PolarDB-X透明分布式
本文介紹了如何免費體驗PolarDB-X的透明分布式特性。
背景
PolarDB-X推出"透明分布式"系列能力,從連接、開發(fā)到管理行為均最大限度保留單機MySQL的使用體驗,讓用戶的分布式改造周期大幅縮短,研發(fā)運維團隊的原有技術(shù)棧最大限度保留。
PolarDB-X具備從單機到分布式的平滑演進能力,支持通過DDL將一張大表動態(tài)調(diào)整為分布式的分區(qū)表,結(jié)合分布式事務、以及兼容MySQL Binlog的數(shù)據(jù)回流,可完成單機到分布式的快速改造。本體驗從PolarDB-X的Auto Partition,以及兼容MySQL Binlog的CDC能力兩個方面演示透明分布式能力。
基于自動化拆分和分布式Online DDL,保證單機MySQL平滑演進到分布式
引入全局Binlog回流單機MySQL,確保分布式可上可下
阿里云提供了數(shù)據(jù)庫解決方案功能體驗館,提供真實免費的PolarDB分布式版實例環(huán)境和開箱即用的測試方法,您可以在線快捷體驗PolarDB-X的透明分布式能力。
影響
本功能體驗不涉及生產(chǎn)環(huán)境的部署,因此不會影響業(yè)務。
費用
本次體驗中,由于體驗涉及到的資源不歸屬于您,因此不會產(chǎn)生任何費用,您可以放心體驗。
體驗內(nèi)容
體驗環(huán)境
在本免費體驗中,阿里云提供了預置環(huán)境供您操作體驗,預置環(huán)境的詳情如下:
集群:提供了一個PolarDB-X實例。具體如下:
內(nèi)核版本:V5.4.18-17034692
計算節(jié)點規(guī)格:4核16GB
計算節(jié)點數(shù)量:2個
存儲節(jié)點規(guī)格:4核16GB
存儲節(jié)點數(shù)量:2個
兼容性:MySQL 5.7
提供了一臺安裝了Sysbench壓測工具的壓測機,向PolarDB-X實例運行壓測任務。壓測細節(jié)如下:
測試模式:oltp_point_select_k,即對k字段進行僅含分區(qū)鍵的單點等值查詢
說明本體驗中用到的Sysbench壓測模式相比標準oltp_point_select模式進行了一定調(diào)整:標準oltp_point_select模式為對ID字段進行點查,而oltp_point_select_k模式則是對k字段進行點查。
壓測數(shù)據(jù)表大小:1張表,每張表10000條數(shù)據(jù)
壓測并發(fā)線程數(shù):4線程
壓測持續(xù)時間:一共1分鐘
觀測指標
觀測表的物理分布,可以按主鍵進行拆分。
觀測改變分區(qū)鍵后與使用主鍵進行分區(qū)的性能對比。指標為TPS(Transactions Per Second),即數(shù)據(jù)庫每秒執(zhí)行的事務數(shù),以COMMIT成功次數(shù)為準。該指標可用于觀測集群性能。
觀測CDC后的數(shù)據(jù)一致性。
操作步驟
進入瑤池解決方案體驗館。
單擊核心功能體驗,然后單擊透明分布式功能體驗的免費體驗按鈕,進入如下頁面:
單擊頁面下方創(chuàng)建免費體驗任務按鈕。
稍等片刻后,單擊刷新任務列表,可以看到您創(chuàng)建的體驗任務已開始。
單擊查看詳情,進入實時查詢情況頁面,并單擊啟動任務。
說明請根據(jù)頁面按鈕提示,手動點擊按鈕執(zhí)行每一步操作。若在倒計時結(jié)束時沒有手動點擊執(zhí)行,則會自動執(zhí)行對應操作。
首先我們來體驗PolarDB-X的Auto Partitioning特性。
單擊切換到壓測庫,切換到PolarDB-X主庫mydb。
use mydb;
單擊查看壓測表,自動執(zhí)行如下命令,查看所用到的壓測表sbtest1的建表語句。
show create table sbtest1;
返回結(jié)果如下:
+---------+-----------------------------------------------------+ | Table | Create Table | +---------+-----------------------------------------------------+ | sbtest1 | CREATE TABLE `sbtest1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `k` int(11) NOT NULL DEFAULT '0', `c` char(120) NOT NULL DEFAULT '', `pad` char(60) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE = InnoDB AUTO_INCREMENT = 10001 DEFAULT CHARSET = utf8 | +---------+-----------------------------------------------------+ 1 row in set (0.01 sec)
單擊查看物理DN,自動執(zhí)行如下命令,查看表在存儲節(jié)點的分布情況。
show storage;
返回結(jié)果如下:
+------------------------------+--------------------+------------+-----------+----------+-------------+--------+-----------+-------+--------+ | STORAGE_INST_ID | LEADER_NODE | IS_HEALTHY | INST_KIND | DB_COUNT | GROUP_COUNT | STATUS | DELETABLE | DELAY | ACTIVE | +------------------------------+--------------------+------------+-----------+----------+-------------+--------+-----------+-------+--------+ | pxc-xdb-m-hzrth7pjc07vyb5509 | 11.197.3.159:3406 | true | META_DB | 2 | 2 | 0 | false | 1 | 10 | | pxc-xdb-s-hzrth7pjc07vyb3208 | 11.197.8.96:3247 | true | MASTER | 3 | 4 | 0 | false | 0 | 10 | | pxc-xdb-s-hzrth7pjc07vyb44da | 10.127.205.70:3039 | true | MASTER | 3 | 3 | 0 | true | 0 | 10 | +------------------------------+--------------------+------------+-----------+----------+-------------+--------+-----------+-------+--------+ 3 rows in set (0.02 sec)
單擊查看表的分布,自動執(zhí)行如下命令:
show topology from sbtest1;
返回結(jié)果如下:
+------+-------------------+--------------------+----------------+-------------------+-------------+------------------------------+-------------------+ | ID | GROUP_NAME | TABLE_NAME | PARTITION_NAME | SUBPARTITION_NAME | PHY_DB_NAME | DN_ID | STORAGE_POOL_NAME | +------+-------------------+--------------------+----------------+-------------------+-------------+------------------------------+-------------------+ | 0 | MYDB_P00000_GROUP | sbtest1_R8tg_00000 | p1 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 1 | MYDB_P00001_GROUP | sbtest1_R8tg_00001 | p2 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | | 2 | MYDB_P00000_GROUP | sbtest1_R8tg_00002 | p3 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 3 | MYDB_P00001_GROUP | sbtest1_R8tg_00003 | p4 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | | 4 | MYDB_P00000_GROUP | sbtest1_R8tg_00004 | p5 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 5 | MYDB_P00001_GROUP | sbtest1_R8tg_00005 | p6 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | | 6 | MYDB_P00000_GROUP | sbtest1_R8tg_00006 | p7 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 7 | MYDB_P00001_GROUP | sbtest1_R8tg_00007 | p8 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | | 8 | MYDB_P00000_GROUP | sbtest1_R8tg_00008 | p9 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 9 | MYDB_P00001_GROUP | sbtest1_R8tg_00009 | p10 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | | 10 | MYDB_P00000_GROUP | sbtest1_R8tg_00010 | p11 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 11 | MYDB_P00001_GROUP | sbtest1_R8tg_00011 | p12 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | | 12 | MYDB_P00000_GROUP | sbtest1_R8tg_00012 | p13 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 13 | MYDB_P00001_GROUP | sbtest1_R8tg_00013 | p14 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | | 14 | MYDB_P00000_GROUP | sbtest1_R8tg_00014 | p15 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 15 | MYDB_P00001_GROUP | sbtest1_R8tg_00015 | p16 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | +------+-------------------+--------------------+----------------+-------------------+-------------+------------------------------+-------------------+ 16 rows in set (0.00 sec)
單擊查看壓測表數(shù)據(jù)分布,自動執(zhí)行如下命令:
select TABLE_SCHEMA,TABLE_NAME,STORAGE_INST_ID,PHYSICAL_TABLE,PARTITION_NAME as p_name,TABLE_ROWS as row from information_schema.TABLE_DETAIL where table_schema='mydb' and table_name= 'sbtest1' ;
返回結(jié)果如下:
+--------------+------------+------------------------------+--------------------+--------+------+ | TABLE_SCHEMA | TABLE_NAME | STORAGE_INST_ID | PHYSICAL_TABLE | p_name | row | +--------------+------------+------------------------------+--------------------+--------+------+ | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_MXlT_00000 | p1 | 610 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_MXlT_00001 | p2 | 632 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_MXlT_00002 | p3 | 680 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_MXlT_00003 | p4 | 686 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_MXlT_00004 | p5 | 576 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_MXlT_00005 | p6 | 682 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_MXlT_00006 | p7 | 627 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_MXlT_00007 | p8 | 609 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_MXlT_00008 | p9 | 633 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_MXlT_00009 | p10 | 632 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_MXlT_00010 | p11 | 593 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_MXlT_00011 | p12 | 606 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_MXlT_00012 | p13 | 586 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_MXlT_00013 | p14 | 598 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_MXlT_00014 | p15 | 609 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_MXlT_00015 | p16 | 641 | +--------------+------------+------------------------------+--------------------+--------+------+ 16 rows in set (0.02 sec)
可以看到,表sbtest1的建表語句中,并未指定任何分區(qū)定義(如分區(qū)鍵、分區(qū)策略等)。但從其拓撲分布和數(shù)據(jù)分布可以看到,PolarDB-X能夠自動選擇分區(qū)鍵(默認為主鍵)并對表及其索引進行水平分區(qū)。
單擊啟動壓測,并等待30秒后進行后續(xù)操作。
啟動壓測后,我們來體驗PolarDB-X在改變分區(qū)鍵前后的性能對比。
單擊修改分區(qū)鍵,自動執(zhí)行如下命令,將分區(qū)方式變更為k列:
alter table sbtest1 partition by hash(k) partitions 8;
單擊再次查看表的分布,自動執(zhí)行如下命令:
show topology from sbtest1;
返回結(jié)果如下:
+------+-------------------+-------------------------+----------------+-------------------+-------------+------------------------------+-------------------+ | ID | GROUP_NAME | TABLE_NAME | PARTITION_NAME | SUBPARTITION_NAME | PHY_DB_NAME | DN_ID | STORAGE_POOL_NAME | +------+-------------------+-------------------------+----------------+-------------------+-------------+------------------------------+-------------------+ | 0 | MYDB_P00000_GROUP | sbtest1_mewg_qpne_00000 | p1 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 1 | MYDB_P00001_GROUP | sbtest1_mewg_qpne_00001 | p2 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | | 2 | MYDB_P00000_GROUP | sbtest1_mewg_qpne_00002 | p3 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 3 | MYDB_P00001_GROUP | sbtest1_mewg_qpne_00003 | p4 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | | 4 | MYDB_P00000_GROUP | sbtest1_mewg_qpne_00004 | p5 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 5 | MYDB_P00001_GROUP | sbtest1_mewg_qpne_00005 | p6 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | | 6 | MYDB_P00000_GROUP | sbtest1_mewg_qpne_00006 | p7 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 7 | MYDB_P00001_GROUP | sbtest1_mewg_qpne_00007 | p8 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | +------+-------------------+-------------------------+----------------+-------------------+-------------+------------------------------+-------------------+ 8 rows in set (0.00 sec)
單擊再次查看壓測表數(shù)據(jù)分布,自動執(zhí)行如下命令:
select TABLE_SCHEMA,TABLE_NAME,STORAGE_INST_ID,PHYSICAL_TABLE,PARTITION_NAME as p_name,TABLE_ROWS as row from information_schema.TABLE_DETAIL where table_schema='mydb' and table_name= 'sbtest1' ;
返回結(jié)果如下:
+--------------+------------+------------------------------+-------------------------+--------+------+ | TABLE_SCHEMA | TABLE_NAME | STORAGE_INST_ID | PHYSICAL_TABLE | p_name | row | +--------------+------------+------------------------------+-------------------------+--------+------+ | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_mewg_qpne_00000 | p1 | 937 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_mewg_qpne_00001 | p2 | 847 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_mewg_qpne_00002 | p3 | 1338 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_mewg_qpne_00003 | p4 | 1296 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_mewg_qpne_00004 | p5 | 1917 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_mewg_qpne_00005 | p6 | 986 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_mewg_qpne_00006 | p7 | 1297 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_mewg_qpne_00007 | p8 | 1423 | +--------------+------------+------------------------------+-------------------------+--------+------+ 8 rows in set (0.02 sec)
可以看到,壓測數(shù)據(jù)發(fā)生了重分布。
在整個過程中可以觀測左側(cè)實例的TPS性能變化情況。
接下來我們來體驗PolarDB-X兼容MySQL Binlog的CDC能力及CDC后的數(shù)據(jù)一致性。
單擊切換到同步庫,自動執(zhí)行如下命令:
use cdc_db;
單擊確認自建沒有test_11表,自動執(zhí)行如下命令:
show create table test_11 ;
返回結(jié)果如下:
ERROR 1146 (42S02): Table 'cdc_db.test_11' doesn't exist
單擊PolarDB分布式版創(chuàng)建表,在主庫自動執(zhí)行如下建表命令,創(chuàng)建test_11表:
CREATE TABLE `test_11` ( `id` int(11) NOT NULL, `t` date NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
單擊增加列test_column,自動執(zhí)行如下命令,在上一步主庫中創(chuàng)建的表中增加一列:
alter table test_11 add column test_column INT NOT NULL DEFAULT 0;
單擊主庫插入數(shù)據(jù),自動執(zhí)行如下命令,在主庫的test_11表中添加一行數(shù)據(jù):
insert into test_11(id,t,test_column) values (1111,now(),2);
單擊從庫查看test_11表情況,在從庫中自動執(zhí)行如下命令:
select * from test_11;
返回結(jié)果如下:
+------+------------+-------------+ | id | t | test_column | +------+------------+-------------+ | 1111 | 2024-01-08 | 2 | +------+------------+-------------+ 1 row in set (0.01 sec)
可以看到,主庫中創(chuàng)建表、新增列以及插入數(shù)據(jù)的動作(DML)已自動同步至從庫。
單擊分布式節(jié)點刪除test_11表結(jié)構(gòu),在主庫中自動執(zhí)行如下命令:
drop table test_11;
單擊查看test_11表結(jié)構(gòu),在從庫中自動執(zhí)行如下命令:
show create table test_11 ;
返回結(jié)果如下:
ERROR 1146 (42S02): Table 'cdc_db.test_11' doesn't exist
可以看到,主庫中刪除表的語句(DDL)也已自動同步至從庫。
結(jié)果分析
PolarDB-X支持自動分區(qū)
PolarDB-X支持自動分區(qū),默認主鍵拆分。從而讓移植到PolarDB-X的數(shù)據(jù)和業(yè)務擺脫對設計分區(qū)鍵的依賴,實現(xiàn)從單機MySQL到分布式的平滑演進。
也支持指定分區(qū)鍵拆分,從而提高整體性能。
PolarDB-X支持數(shù)據(jù)回流及數(shù)據(jù)一致性
事務型的分布式數(shù)據(jù)庫除了面向在線業(yè)務的高并發(fā)寫入以外,一般還需要將在線數(shù)據(jù)同步給下游的災備數(shù)據(jù)、匯聚業(yè)務或數(shù)據(jù)倉庫系統(tǒng)等,下游業(yè)務對于事務日志的一致性也有比較強的訴求,例如事務不能亂序、事務原子性、DDL支持同步等。
從本體驗可以看到,PolarDB-X支持將數(shù)據(jù)實時同步給下游的MySQL,其數(shù)據(jù)具有一致性。