本文主要**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映象乙個唯一的前台程序作為啟動容器的命令,這樣才能是容器一直處於執行狀態.否則命令一旦執行完畢,容器...
順序容器概述
元素在容器中的排列次序只與元素加入容器的次序有關,可以按照順序訪問元素。按照元素在記憶體中儲存的方式,可以將順序容器分為連續儲存和離散儲存兩種 連續儲存的順序容器 容器在記憶體中佔據一整塊連續的記憶體空間,元素在容器中的排列方式就是在物理記憶體中的排列方式。這樣的順序容器有兩個特點 可以隨機訪問元素...