AntDB容器化設計概述

2021-09-05 03:42:51 字數 4290 閱讀 6819

本文主要**antdb基於docker的虛擬化分布式資料庫設計。

作業系統

centos7.4

docker版本

1.13

antdb版本

4.0antdb架構

2c2d, 每物理機1c1d啟動2個docker容器, 每個元件在單獨容器執行

物理機數量

2臺目的

設計規則

節點型別

主機名字首

主機名字尾

gtmgtm

不支援字尾

coordinator

keyword_cd[0-9]+

無字尾或無限制

datanode

keyword_db[0-9]+

無字尾或無限制

其中主機名字首keyword設計

type

可識別的關鍵字

關鍵字字尾[0-9]+

keyword_cd

cd/cn/coordinator

正規表示式,至少1個或n個數字

keyword_db

db/dn/datanode

正規表示式,至少1個或n個數字

最終主機名

gtm容器:gtm

coordinator容器:

coordinator主機名

是否支援

cd1yes

cn1yes

coordinator1

yescd

nocn

nocoordinator

nocd1-china

yescd1_china

yeschina_cd1

nochina_cd1_gd

nodatanode容器:

同coordinator,不贅述。

編號賬號資訊

根目錄許可權

1root/123456

預設預設

2adb/123456

/home/adb

sudo

目的

設計規則目錄

目錄名是否固定

儲存內容

/home/adb/data/shell

固定dockerfile檔案cmd啟動指令碼&&pgxc_node初始化指令碼

/home/adb/data/keyword_gtm[0-9]+/keyword_gtm[0-9]+

不固定gtm節點資料

/home/adb/data/keyword_cd[0-9]+/keyword_cd[0-9]+

不固定coordinator節點資料

/home/adb/data/keyword_db[0-9]+/keyword_db[0-9]+

不固定datanode節點資料

其中keyword設計

type

可識別的關鍵字

關鍵字字尾[0-9]+

keyword_gtm

gtm正規表示式,至少1個或n個數字

keyword_cd

cd/cn/coordinator

正規表示式,至少1個或n個數字

keyword_db

db/dn/datanode

正規表示式,至少1個或n個數字

注:為了簡化容器的主機名和目錄名,一般要求主機名和目錄名保持一致。如:

容器主機名設計為cd1_china,則容器目錄名設計為 /home/adb/data/cd1_china/cd1_china

容器目錄以 /home/adb/data/cd1_china/cd1_china 為例

宿主機目錄以 /home/ips/data/cd1_china/cd1_china 為例

對映關係:-v /home/ips/data/cd1_china: /home/adb/data/cd1_china

目錄全路徑,出現連續重複的子目錄,這種設計其實挺怪異的。

主要出於以下幾點考慮:

目錄對映之後,需要考慮容器和宿主機是否存在同乙個系統使用者,如不存在、或雖然存在,但是uid/gid不一致,則在initdb時,會出現無許可權寫的問題。

當然可以在啟動容器時,給予系統許可權(docker run --privileged=true)來解決無許可權寫的問題。但是這種系統許可權賦予容器後,勢必帶來安全性風險。因此,這種對映方式直接放棄。

所以只能以這種方式對映-v /home/ips/data/cd1_china: /home/adb/data/cd1_china,並且需要解決 initdb時可能出現無許可權寫的問題。

解決方式有兩種:

宿主機建立和容器一樣的使用者,包括uid/gid也一致

對映目錄賦予777許可權,並建立乙個同名子目錄,initdb即可有許可權寫磁碟。

方式1,需要修改宿主機的配置,且極可能與現有的uid/gid衝突,直接放棄。最終以方式2處理。

目的

該檔案在docker run時,自動生成,無需人為干預。

這裡主要強調下檔案內 主機名 ,一定要符合步驟1的設計說明,否則init_pgxc_node.sh指令碼在解析hosts檔案進行初始化pgxc_node表時,極有可能會失敗。

該指令碼會解析容器/etc/hosts檔案的對應關鍵字,來確認adb集群中coordinator和datanode的節點名稱及對應節點數量。

設計規則

針對coordinator/datanode:

容器主機名=節點名稱=資料路徑中的連續重複子目錄名稱=容器名

如:cd1=cd1=/home/adb/data/cd1/cd1=cd1

針對gtm:

容器主機名[0-9]+=節點名稱=資料路徑中的連續重複子目錄名稱=容器名

如:gtm1=gtm1=/home/adb/data/gtm1/gtm1=gtm1

docker run -d \ -e params="gtm1&/home/adb/data/gtm1>m" -v /home/ips/data/gtm1:/home/adb/data/gtm1 \ -p 9435:5432 \ --name gtm1 \ --hostname gtm \ --net=net_adb1 \ --ip 172.30.88.11 \ --add-host gtm:172.30.88.11 \ --add-host cd1:172.30.88.21 \ --add-host cd2:172.30.98.22 \ --add-host db1:172.30.88.31 \ --add-host db2:172.30.98.32 \ adb24

–name gtm1 :容器名稱,無限制。便於維護,一般和容器的主機名一致。

gtm容器名稱比容器的主機名,一般會多一部分數字編號的字尾。

–hostname gtm :容器主機名,務必符合步驟1的設計說明。

-v /home/ips/data/gtm1:/home/adb/data/gtm1 : 根目錄(/home/ips/data)+adb資料庫節點名稱(gtm1).

其中,adb資料庫節點名稱指,initdb時指定的—nodename引數,如下:

initdb -d /home/adb/data/cd1/cd1 --nodename cd1 -e utf8 --locale=c -k

-p 9435:5432 :埠對映

–net=net_adb1 :自定義網路名稱

–ip 172.30.88.11 :固定ip

–add-host gtm:172.30.88.11 : 格式[容器的主機名:固定ip],自動寫入容器hosts檔案

-e params=「gtm1&/home/adb/data/gtm1>m」 :docker run時攜帶的引數以符號 & 分割,此處攜帶了3個引數,由左至右,分別命名為 1,p2,p3.

其中:

請務必在docker run時配置正確的上述3個引數。

adb24 : 映象名稱

分布式資料庫上雲,需要考慮諸多因素。

目前antdb初步具備上雲的能力,尚有許多不足之處,需進一步探索和完善。

antdb qq群號:496464280

antdb github鏈結

AntDB容器化應用介紹

作業系統 centos7.4 docker版本 1.13 antdb版本 4.0antdb架構 2c2d,每物理機1c1d啟動2個docker容器,每個元件在單獨容器執行 物理機數量 2臺gtm容器ip 172.30.88.11 容器埠對映 9435 5432 cd1容器ip 172.30.88.2...

容器化交付流程設計

dockerfile編寫 dockerfile的目標是將應用進行抽象打包,通過構建出產出的docker image實現標準化交付 乙個好的docker執行起來的容器必須遵守單一程序原則.給docker映象乙個唯一的前台程序作為啟動容器的命令,這樣才能是容器一直處於執行狀態.否則命令一旦執行完畢,容器...

順序容器概述

元素在容器中的排列次序只與元素加入容器的次序有關,可以按照順序訪問元素。按照元素在記憶體中儲存的方式,可以將順序容器分為連續儲存和離散儲存兩種 連續儲存的順序容器 容器在記憶體中佔據一整塊連續的記憶體空間,元素在容器中的排列方式就是在物理記憶體中的排列方式。這樣的順序容器有兩個特點 可以隨機訪問元素...