天天看點

五年再出發,RDS MySQL叢集版助力客戶降本增效

作者:阿裡雲資料庫
RDS MySQL将雲原生技術到底,推出RDS MySQL叢集版幫助客戶降本增效,解決資料庫架構多樣化需求的問題。

RDS MySQL上次釋出新的産品系列是5年前的RDS MySQL三節點企業版。面對客戶需求的不斷變化,以及資料庫技術不斷的推陳出新,RDS MySQL将雲原生技術到底,推出RDS MySQL叢集版幫助客戶降本增效,解決資料庫架構多樣化需求的問題。

1.客戶案例

越來越多的客戶希望在一定RPO保障的前提下,以一套資料庫滿足各種業務要求,例如,

  • 主庫是線上業務,備庫僅僅是一個Standby;
  • 主庫是線上業務,備庫1是Standby,備庫2是線上分析業務;
  • 主庫是線上業務,備庫1是實時查詢業務,備庫2是線上分析,備庫3是希望一個小規格執行個體,僅拿來做公司業務員通路用;
  • ……

面對紛繁複雜的業務場景,RDS MySQL現在給客戶提供了一個新的選擇:RDS MySQL叢集版!它基于阿裡雲關系型資料庫RDS團隊多年技術的沉澱,同時深入洞察使用者需求,RDS MySQL叢集版圍繞着經濟性、靈活性、可靠性三個方面,提供了多項重要産品功能,包括:備節點可讀、按需增删節點、多可用區容災、節點級别監控、叢集拓撲管理等。

通過下面的表格,清晰的羅列了各系列之間的差別:

五年再出發,RDS MySQL叢集版助力客戶降本增效

注:

1.MGR模式計劃近期逐漸上線;

2.節點數目前開放2~3,後續逐漸開放到最大9節點。

2.資料安全性

MySQL叢集版和以往産品形态最大的差別在于資料的保障性上。衆所周知MySQL複制有三種方式:異步模式、半同步、以及GroupReplication。RDS MySQL叢集版支援了使用者自助切換資料複制方式,下面我們來看看他們三者的差別:

2.1 異步複制

異步複制是MySQL預設的複制模式,事務在主節點執行完後,會立即傳回給應用,事務資料通過binlog異步同步到備節點上,主節點不關心備節點接收以及應用binlog的情況。異步複制的主要優點在于高性能,以及備節點不可用不會影響主節點寫入。然而,如果在事務送出後,binlog傳輸到備節點之前,主節點發生當機,此時将備節點提升為主節點,會出現資料丢失和不一緻的情況。

五年再出發,RDS MySQL叢集版助力客戶降本增效

圖源:https://dev.mysql.com/doc/refman/8.0/en/group-replication-primary-secondary-replication.html

2.2 半同步複制

半同步複制是在異步複制的基礎之上,增加備節點确認機制。在事務送出之前,主節點等待至少一個備節點接收到事務資料,備節點接收到事務資料後,會向主節點發送ACK響應。主節點等待ACK逾時時間可通過參數rpl_semi_sync_master_timeout配置(預設1秒),主節點等待逾時後,會正常送出事務,同時退化成異步複制,直到備節點重新恢複。半同步複制的主要優點在于,正常情況下能夠保證已送出的事務,至少已經傳輸到一個備節點上。不足在于,備節點不可用時,會短暫影響主節點的寫入,影響時長取決于逾時時間配置,同時,備節點不可用後,會自動退化成異步複制,失去資料安全性。是以,在使用半同步複制的時候,為了避免單個備節點不可用導緻主節點寫入延遲或退化成異步複制,推薦搭配多個備節點組成叢集。

五年再出發,RDS MySQL叢集版助力客戶降本增效

圖源:https://dev.mysql.com/doc/refman/8.0/en/group-replication-primary-secondary-replication.html

2.3 MGR--MySQL Group Replication

MySQL Group Replication又稱為組複制或MGR。MGR跟以往的異步/半同步複制一樣,都是通過Binlog進行複制,最大的不同在于,MGR複制主備節點之間通過Paxos協定組成叢集,在主節點的事務送出之前,需要将事務先發生到備節點上,多數派節點通過事務提議後,事務才能送出。

五年再出發,RDS MySQL叢集版助力客戶降本增效

圖源:https://dev.mysql.com/doc/refman/8.0/en/group-replication-summary.html

到MySQL8.0.21為止,MGR(MySQL Group Replication)已經有了一套完整的錯誤響應機制。整體架構見下面的圖。這套機制由三部分構成:

  1. 故障探測(Failure Detection) 當任何節點因故障或者網絡分裂無法響應其他節點時,MGR能夠識别出發生故障的節點。
  2. 移除故障節點(Expel Member) 将故障節點從叢集中移除出去。
  3. 自動重新加入(Auto-Rejoin) 當故障消除後,恢複的節點能夠知道自己被移除了,并且自動加入叢集中。
五年再出發,RDS MySQL叢集版助力客戶降本增效

2.3.1 故障探測(Failure Detection)

故障探測是由MySQL核心的xcom(MGR的Paxos實作)完成的。xcom在每次成功的發送資料到某節點或者從某個節點接收到資料時都會記錄目前時間(detected time)。意味着這個節點在目前時間還活着,如果故障了,他會做相應的移除操作。

2.3.2 移除故障節點(Expel Member)

開除成員的流程由MySQL核心的Gcs_suspicions_manager實作。Gcs_suspicions_manager兩個重要的步驟:

  • 疑似死亡節點清單

前面說了xcom通過回調函數将處理權交給GCS子產品。Gcs_suspicions_manager将可能已經死亡節點加入到疑似死亡節點清單中. 同時将這些節點的狀态設定為UNREACHABLE。從replication_group_members表可以查詢到節點的狀态。

  • 移除死亡節點的線程

當節點疑似死亡超過一定時間後,Gcs_suspicions_manager的處理線程會發送移除指令給XCOM,将該節點從叢集中移除出去。這個時間通過group_replication_member_expel_timeout設定。

2.3.3 自動重新加入(Atuo-Rejoin)

當故障節點恢複後,會發現自己被移除出了叢集。這時,這個節點會嘗試自動加入叢集。自動加入叢集的過程和START GROUP REPLICATION不同。這個過程不需要做全局恢複(Global Recovery)。全局恢複需要通過group_replication_recovery異步通道複制加入叢集前的資料。而自動加入時,所有的資料都是通過XCOM複制,包括加入前的資料。

和自動加入功能緊密相關的一個參數是group_replication_message_cache_size. 它定義了XCOM資料緩存的大小。當緩存無法儲存所有資料時,就會将老的資料清除掉。如果緩存太小或者節點故障的時間過長,可能會導緻一部分資料無法通過XCOM複制的情況發生。這時自動加入就會失敗,必須要通過START GROUP REPLICATION 方式加入叢集。

3.産品競争力

3.1 更經濟:備節點開放讀

在經濟性上,RDS MySQL叢集版備節點可讀,無需再額外建立隻讀執行個體,可快速實作線性讀能力擴充,大幅度縮減了資源開銷和資源閑置成本。對比以往的高可用加隻讀執行個體,在相同讀寫能力下,叢集版最高可節省40%的成本。RDS MySQL叢集版執行個體支援通過叢集可讀位址或獨享代理兩種方式通路備節點。

3.1.1 通過叢集可讀位址通路備節點

RDS MySQL叢集版執行個體可以免費建立叢集可讀位址,叢集可讀位址支援将多個備節點添加到一個連接配接位址進行通路,實作多個備節點的連接配接數負載均衡,同時支援靈活調配備節點的通路權重,滿足不同場景下的負載分攤需求。

五年再出發,RDS MySQL叢集版助力客戶降本增效

3.1.2 通過獨享代理通路備節點

RDS MySQL叢集版執行個體同時支援通過開通代理執行個體實作主備節點的讀寫分離。相較于叢集可讀位址,獨享代理提供了更多高階的能力,包括:自動讀寫分離、連接配接池、延遲門檻值、事務拆分等。

五年再出發,RDS MySQL叢集版助力客戶降本增效

3.2 更靈活:按需增删節點&按需調整複制模式

在靈活性上,差別于傳統的固定節點數形态,RDS MySQL叢集版實作了節點數可變的拓撲管理,支援2 ~ 3節點,即一主一備或一主兩備,主備資料複制方式支援異步或半同步。使用者可以在建立執行個體的時候選擇備節點數,也可以在執行個體建立後,根據實際的業務負載需求,按需增删節點。

五年再出發,RDS MySQL叢集版助力客戶降本增效

同時,RDS MySQL叢集版提供了節點級别的監控資料,使用者可以直覺的看到每個節點的監控情況。

五年再出發,RDS MySQL叢集版助力客戶降本增效

3.3 更可靠:多可用區容災

在可靠性上,相較于高可用版一主一備兩個可用區容災,因為RDS MySQL叢集版每個備節點都參與選主以及單獨配置可用區,是以RDS MySQL叢集版支援三可用區容災,叢集版三節點跨三可用區的SLA最高可達99.99%。

五年再出發,RDS MySQL叢集版助力客戶降本增效

4.最佳實踐

4.1 建立RDS MySQL

在RDS MySQL下單頁面(https://rdsbuy.console.aliyun.com/create/rds/mysql),系列選擇叢集版,即可快速建立RDS MySQL叢集版執行個體。

4.2 建立叢集可讀位址

執行個體建立完成後,在執行個體詳情頁面的執行個體拓撲管理區,點選增加位址,完成叢集可讀位址的建立。叢集可讀位址建立後,預設帶有一個内網連接配接。

五年再出發,RDS MySQL叢集版助力客戶降本增效

4.3 連接配接執行個體

通過叢集讀寫位址,可以往執行個體中寫入資料。

[root@rdsmysql ~]# mysql -h rm-mysql-cluster-rw.mysql.zhangbei.rds.aliyuncs.com -u rdsmysqlcluster -p
mysql> use rds
Database changed
mysql> CREATE TABLE `demo` (`id` int(11) NOT NULL, `message` varchar(64));
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> INSERT INTO `demo` (`id`, `message`) VALUES (1, "RDS MySQL Cluster");
Query OK, 1 row affected (0.00 sec)


mysql> ^DBye           

再通過叢集可讀位址,可以讀取到前面寫入的資料。

[root@rdsmysql ~]# mysql -h rm-mysql-cluster-ro.mysql.zhangbei.rds.aliyuncs.com -u rdsmysqlcluster -p
mysql> use rds
Database changedmysql> select * from demo;
+----+-------------------+
| id | message |
+----+-------------------+
| 1 | RDS MySQL Cluster |
+----+-------------------+
1 row in set (0.01 sec)


mysql> ^DBye           

5.展望

目前RDS MySQL叢集版能力在持續不斷疊代中,相信在不遠的将來,無論業務如何使用資料庫,總有一款配置滿足您的業務需求!

作者介紹

文峰,RDS MySQL叢集版研發負責人,關于叢集版的任何問題和建議可以發郵件至:[email protected]進行咨詢!

目前RDS MySQL叢集版包月8.5折、包年7.5折的優惠活動,請點選【通知】RDS MySQL叢集版執行個體商業化釋出_關系型資料庫-阿裡雲幫助中心

繼續閱讀