Categories
程式開發

GaussDB野生教程:GaussDB T上生產整體規劃


本文由 dbaplus 社群授權轉載。

前言

“學習GaussDB是一種什麼體驗?”

“路漫漫其修遠兮,吾將上下而求索!”

“說人話。”

“打臉,打臉,再打臉……”

上面就是筆者寫這個系列文章的原因了,筆者學習GaussDB的過程中被“打臉”太多,現在想稍稍停步,做個總結。而為了掩飾自己個人能力不足,筆者還補充了下面幾個學習困難的原因:

  • GaussDB T方面資料有限,目前僅有官方教材、產品文檔、開髮指南等十份左右的文檔,部分內容語焉不詳甚至相互矛盾;
  • Oracle等傳統數據庫的思維限制;
  • 作為發展中的國產數據庫,產品確有不足;
  • 項目經歷有限。

筆者寫這個系列文章的契機為GaussDB T 1.0.2剛發布不久,想藉著“安裝數據庫”這種最基礎的操作,以加固對GaussDB T的理解。與著重展示搭建步驟的文章不同,本文是奔著生產部署以及後續運維而去的,安裝只是過程,理解才是關鍵,而實際運維怎麼辦才是重中之重。這個系列的文章將由五部分組成:

  1. 整體規劃(即本文):著重介紹GaussDB T的軟件架構並給出規劃建議。
  2. 資源申請:以提升溝通效率為出發點,探討GaussDB T在搭建前的環境準備要素,此外筆者還總結了一份“系統變更匯總”,分享了部分學習環境虛擬機使用經驗。
  3. 軟件部署:除了GaussDB T、Database Manager的基本安裝命令以外,筆者還附帶了大量“過於真實”的補充說明和建議。
  4. 簡要測試:介紹瞭如何使用zql、gs_om、gs_gucZenith工具,並附帶了幾個實驗案例,供讀者更好地理解GaussDB T。
  5. 常規變更:探討了真實生產環境中安裝GaussDB T後常見且必須的各種操作,如數據庫參數調整、表空間管理、黑白名單管理等。

如何理解單機、主備、分佈式三種架構

共性和差異

GaussDB野生教程:GaussDB T上生產整體規劃 1

GaussDB野生教程:GaussDB T上生產整體規劃 2

GaussDB野生教程:GaussDB T上生產整體規劃 3

上面是從官方產品文檔中摘錄出來的三種軟件架構圖,從圖中我們可以看到:

  • ETCD、DN、CM是三種軟件架構共有的組件;
  • GTS、CN則是分佈式架構獨有的組件;
  • 各種架構均可接入運維工具DM以及開發工具Data Studio。

對於單機、主備兩種架構來說,值得商榷的一點是,到底ETCD以及CM需不需要安裝。根據官方教材中所描述的“數據庫安裝”以及官方培訓,單機和主備的安裝步驟均為上傳一個不到10MB的安裝包,然後執行幾條簡單的命令,即可完成安裝步驟,此處的安裝對應的是DN,至於ETCD和CM是不涉及其中的。

而筆者所實際接觸的某個架構為主備的項目中是完整部署ETCD以及CM的,由此,筆者偏向於實際生產是需要安裝ETCD和CM的。而從理論而言,CM可以在主備架構中承擔“主備倒換”的功能從而實現故障自動切換,ETCD則為CM運行的基礎,故而應當在主備環境中部署這兩個組件;至於單機模塊,基本僅會在測試環境中涉及,who care?本系列文章以完整安裝CM、ETCD的前提下進行。裝與不裝這兩類實例對於生產而言最大的差異在於運維的命令都得改變,這點會在後續軟件部署的章節中探討。

單機和主備兩種架構和傳統的關係型數據庫在使用上沒有太大的區別,就某個角度而言,甚至可以說是“簡化版”。至於分佈式,在理解上則復雜一些,筆者將通過一個實際的例子讀者理解。

Database Manager(簡稱DM,下同)是官方的運維工具,實際效果一般,而其內存消耗更是讓虛擬機吃不消,然而考慮到實際生產中,此工具可用於數據庫升級。因此筆者還是建議就學習而言,還是帶上此工具。

各種組件/術語的描述

下面的表格是筆者結合官方文檔、官方教材以及個人理解,總結出的各種組件的要素,理解這部分內容是規劃實例分佈情況的前提。

GaussDB野生教程:GaussDB T上生產整體規劃 4

理解分佈式環境中的CN和DN

下面是筆者的其中一個分佈式測試環境(注:GTS僅單實例是錯誤示範,筆者僅是方便測試GTS實例所在主機宕機的影響才這麼做的)。

GaussDB野生教程:GaussDB T上生產整體規劃 5

這是一個由3CN3DN組成的5節點分佈式環境,具體描述如下:

1)DN組共三個,每組均為兩副本,主DN分佈在主機1、主機2、主機3上,備DN則分佈在主機3、主機4、主機5,此環境的“分片數”為3。

2)CN共三個,客戶可以通過連接主機1、主機2或者主機4訪問業務數據。

假設這裡有八條業務數據,其中ID為主鍵,(NUM業務上也可以保證唯一且非空)詳情如下:

GaussDB野生教程:GaussDB T上生產整體規劃 6

在把這八條數據存儲到數據庫之前,我們首先得創建一個數據庫表。與在Oracle等傳統關係型數據庫上建表不同的是,我們需要考慮額外一個問題是,數據怎麼在這三個DN組裡面分配呢?這就是GaussDB裡面的“水平分錶”,具體包括HASH、RANGE、LIST、Replication實在方式,具體可以參考產品文檔相應描述,筆者這裡選擇使用ID字段做HASH分佈。

選定水平分錶方式之後,筆者需要做的就是創建表並插入數據,問題來了,在哪裡操作呢?作為業務數據,我們可以在主機1、主機2和主機4上隨機選擇一個執行操作即可,此處筆者選擇主機1並完成相應執行。

至此,表創建好,數據也導入好了,為了驗證CN之間的平等性,我們可以連接分別主機2、主機4上驗證確定相應表和數據均可被訪問。這裡引申出一個實際問題,生產環境中,應用程序該連哪個CN。官方給了F5硬負載均衡以及GaussDB軟負載均衡兩種方式,具體可以參考官方產品文檔工作負載管理部分。

接下去我們還可以分別連接到DN中,查看數據的分佈情況,筆者實測的結果為三個DN裡面分佈含有5、2、1條記錄。數據量實在太少,這也可以理解。

最後,回到表裡面,我們最初的描述裡面,NUM字段是唯一且非空的,那我們能不能直接基於NUM字段創建一個唯一索引呢?答案是否定的,創建索引語句直接遇到”GS-00101, Capability: table’s distribute columns list not the subset of unique index columns list not supported”這個報錯,好吧,不帶DISTRIBUTE BY的字段玩是不行的。這也對應了官方開發者指南里面的一句話“不支持跨DN節點的唯一性約束;如果需要支持唯一性約束,唯一性約束列必須包含所有分片列。”

通過上面的例子,我們可以大概了解CN和DN的作用了,也大概能看到分佈式架構的難處:每個表都得考慮水平分佈策略,而水平分錶策略還可能和唯一性約束等常規項目相抵觸。

如何規劃單機和主備架構

單機架構的規劃一句話帶過即可,集群包括三個ETCD、一個CM、一個DN,均部署在一台主機上。

主備架構的規劃方面可以說的有如下幾點:

1)建議配置浮動IP共業務使用

如上文所述,這可以減少主備切換對業務的影響。

2)重點關注高可用部分

高可用是一個可以展開慢慢研究的項目。

對於“一主一備”這種簡單環境,其實僅需要設置一個QUORUM_ANY = 1即可,此配置默認關聯“最大可用”,有備機時相當於最大保護,沒主機時相當於最佳性能,可是說是最合理的選項了。

3)“一主一備”環境中ETCD分佈並不均勻

“一主一備”環境包含兩台機器,那必然會導致一台主機上2個ETCD,另一台主機上1個ETCD,這是正常現象。

單機架構規劃例子如下:

GaussDB野生教程:GaussDB T上生產整體規劃 7

主備架構(一主一備)規劃例子如下:

GaussDB野生教程:GaussDB T上生產整體規劃 8

如何規劃分佈式架構

分佈式架構的規劃涉及如下幾點:

1)是否需要GTS

GTS涉及分佈式事務中的ACID,這個具體看業務需求而定了。筆者需要提醒的是,目前GTS只能一主一備,要是都涼了,集群的狀態也會變成不可用。

2)是否需要GBP

GBP總不能有TCP協議作死吧,還是得有RDMA協議支持,筆者暫時還沒研究這塊。

3)CN要多少個

CN目前只能一台主機上部署一個,而且DN是沒有主備同步的,只能多部署幾個當買個保險了。要是CN都涼了,集群狀態同樣會變成不可用。此外,官方的建議是CN數少於10個。

當然,CN多了也會帶來運維上的麻煩,例如CN所在的主機掉線了,默認的5分鐘(通過coordinatorheartbeattimeout控制)內不恢復的話,CN就出於DELETED狀態,接下去就是兩杯毒酒挑一杯的事了。

  • 手動重建,需要人工保證掉線的CN與其餘CN之間的數據字典一致性,同時還得手工執行十來個步驟;
  • 自動重建,需要重建當前CN,而且這個重建是不完整的(筆者實測重建後在原有CN上基於clsmgr的授權操作將丟失,從技術原理來說可以理解。問題來了,運維規範得跟上,類似系統視圖授權之類操作需要加入到重建步驟裡面)。

4)DN同步協議怎麼選

DN的同步協議通過配置文件的clusterconfig.xml的datanodeType參數控制,可選擇有DN_ZENITH_ZPAXO、DN_ZENITH_HA。

DN_ZENITH_ZPAXOS:DN主備同步協議使用GS-Paxos,適合對可靠性要求較高的系統。集群部署時,最少必須部署2台備機,最多支持8台備機。

DN_ZENITH_HA:DN主備同步協議使用Quorum,適合對靈活性要求較高的系統。集群部署時,最少可部署1台備機,最多支持9台備機。

如上文所述,DN組是一個都不能少的,哪怕多個DN組中僅一個存在異常,整個集群均會變成不可用狀態,因此請慎重配置DN。

分佈式架構(2CN3DN,採用ZPAXOS協議)規劃例子如下:

GaussDB野生教程:GaussDB T上生產整體規劃 9

一起來打臉

對於本文內容有什麼疑問或點贊或吐槽,又或者你在學習和使用GaussDB過程中有什麼心得體會,都歡迎大家在評論區留言,一起探討交流。筆者先自問自答起個頭:

Q:GaussDB T如何下載?

A:介質方面GaussDB T軟件只能從華為官方渠道通過相應的項目去申請。官方文檔倒是可以從官方的support網站上下載。 GaussDB T的最新版文檔,大家可以經常關注下:https://support.huawei.com/carrier/productNewOffering?col=product&path=PBI1-21430725/PBI1-21430757/PBI1-21431665/PBI1-250430182/PBI1-250399837

下篇內容預告

“GaussDB野生教程”系列的下一篇內容將針對“資源申請”展開,以提升溝通效率為出發點,探討GaussDB T在搭建前的環境準備要素。此外,筆者還總結了一份“系統變更匯總”,分享部分學習環境虛擬機的使用經驗。敬請持續關注。

作者介紹

黎君原,新炬網絡服役10+年的老鳥,期間打過雜、搬過磚、挖過坑(運維、割接、系統建設),目前對於國產數據庫來說只是個新兵。

原文鏈接

https://mp.weixin.qq.com/s?__biz=MzI4NTA1MDEwNg==&mid=2650786678&idx=1&sn=1252eb529230bfac2f16226ab4485394&chksm=f3f97ee3c48ef7f5e20a11d532b4ca27477190a8b01d2b0757b0291f3355a0446d9e398b94b7&scene=27#wechat_redirect