一、MogDB簡介
MogDB是EnMotech openGauss DataBase Enterprise Edition的縮寫,是云和恩墨基于openGauss開源數據庫進行定制、推出的企業發行版。
它將圍繞高可用、安全、自動化運維、數據庫一體機和SQL審核優化等企業需求,解決企業用戶落地。其核心價值是易用性、高性能、高可用等和全天候的企業支持。

上面這段介紹文字,摘錄自MogDB官方文檔(https://docs.mogdb.io/zh/mogdb),字數不多,但卻言簡意賅、內含豐厚。從以上介紹可知:
1、MogDB是基于華為openGauss開源數據庫進行的定制
openGauss是源自于開源數據庫中以性能和功能著稱的PostgreSQL(簡稱PG),可以說是系出名門。
openGauss結合企業級場景需求、深度融合了華為在數據庫領域的多年經驗,是經過華為強大技術力量精心打磨的優秀數據庫產品。
2、MogDB是云和恩墨的數據庫產品
對于云和恩墨,我想但凡是搞過數據庫的小伙伴,都會清楚,這是一家匯集了數據庫頂級牛人的技術公司。在數據庫領域,堪稱是泰山北斗級的存在。
云和恩墨這家以數據庫技術著稱的公司,打造自家的數據庫產品,絕對是經過深思熟慮的。選擇在華為openGauss基礎上,進一步做企業級應用的定制,可以說,MogDB是建立在高山(PostgreSQL)頂峰(openGauss)之上的高塔。
那么,今天我們就從使用者的角度,用MogDB來實際搭建一套企業應用中最廣泛使用的主備數據庫集群,來初步感受一下這個雄踞高山之巔,優上加優的國產數據庫產品——云和恩墨的MogDB。
二、安裝規劃
| 主機IP | 網關 | 網卡名 | CPU | 內存 | 磁盤 | OS版本 |
| 192.168.20.171 | 192.168.20.2 | ens32 | 2核 | 4GB | 30GB | CentOS Linux release 7.9.2009 |
| 192.168.20.172 | ||||||
| 192.168.20.175(VIP) | ||||||
三、安裝MogDB數據庫主備集群
1、軟件依賴要求
| 所需軟件 | 建議版本 | 安裝后的實際版本 |
| libaio-devel | 建議版本:0.3.109-13 | libaio-devel-0.3.109-13.el7.x86_64 |
| flex | 要求版本:2.5.31 以上 | flex-2.5.37-6.el7.x86_64 |
| bison | 建議版本:2.7-4 | bison-3.0.4-2.el7.x86_64 |
| ncurses-devel | 建議版本:5.9-13.20130511 | ncurses-devel-5.9-14.20130511.el7_4.x86_64 |
| glibc-devel | 建議版本:2.17-111 | glibc-devel-2.17-326.el7_9.x86_64 |
| patch | 建議版本:2.7.1-10 | patch-2.7.1-12.el7_7.x86_64 |
| redhat-lsb-core | 建議版本:4.1 | redhat-lsb-core-4.1-27.el7.centos.1.x86_64 |
| readline-devel | 建議版本:7.0-13 | readline-devel-6.2-11.el7.x86_64 |
| openssh | 建議版本 :8.4p1 | openssh-7.4p1-22.el7_9.x86_64 |
| expect | 建議版本 :5.45.4 | expect-5.45-14.el7_1.x86_64 |
2、操作系統配置
(1)禁用SeLinux
sed -i ‘s/^SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config
(2)禁用防火墻
systemctl stop firewalld
systemctl disable firewalld
(3)字符集
echo $LANG
en_US.UTF-8
(4)時區
ls -l /etc/localtime
/etc/localtime -> …/usr/share/zoneinfo/Asia/Shanghai
(5)關閉swap交換內存(此步可選)
swapoff -a
(6)設置網卡MTU值
將各數據庫節點的網卡MTU值設置為相同大小。MTU值推薦8192
對于CentOS 7,默認沒有ifconfig命令,需要先做以下安裝:
yum -y install net-tools
然后,執行以下命令設置網卡MTU值:
ifconfig ens32 mtu 8192
(7)關閉RemoveIPC
vi /etc/systemd/logind.conf
RemoveIPC=no
然后執行如下命令生效:
systemctl daemon-reload
systemctl restart systemd-logind
(8)關閉HISTORY記錄
為避免指令歷史記錄安全隱患,需關閉各主機的history指令。
vi /etc/profile
HISTSIZE=0
然后執行如下命令生效:
source /etc/profile
(9)設置root用戶遠程登錄
vi /etc/ssh/sshd_config
PermitRootLogin yes
vim /etc/ssh/sshd_config
注釋掉“Banner”所在的行
(10)動態關閉使用透明大頁
echo never > /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
3、下載并解壓PTK工具包
PTK(Provisioning ToolKit)是一款針對 MogDB 數據庫開發的軟件安裝和運維工具,可幫助用戶更便捷地安裝部署MogDB數據庫。
PTK的官方文檔詳見:https://docs.mogdb.io/zh/ptk/
PTK下載地址:https://cdn-mogdb.enmotech.com/ptk/latest/ptk_linux_x86_64.tar.gz
解壓命令如下:
| tar -xzvf ptk_linux_x86_64.tar.gz |
解壓后會得到一個名為 ptk 的二進制文件,該文件即為 PTK 的可執行文件。
(1)查看 PTK 版本信息:
命令如下:
| ptk -v |

(2)創建并設置拓撲配置文件:
命令如下:
| ptk template > config.yaml |

以上配置文件的參數說明如下:
| 參數名:參數值 | 說明 |
| global: | 集群級別的配置信息 |
| cluster_name: mogdb_cluster1 | 集群名稱,PTK管理的集群的唯一標識 |
| user: omm | 運行數據庫的操作系統用戶名 |
| user_password: "pTk6O...W8=" | 數據庫的初始用戶密碼,該字段不支持明文填寫,需使用 ptk encrypt PASSWORD 加密后填寫 |
| base_dir: /opt/mogdb | 數據庫安裝的基礎目錄 |
| db_servers: | 集群內的數據庫實例服務器配置信息 |
| - host: 192.168.20.171 | 數據庫實例服務器 IP (僅支持 IPv4) |
| db_port: 26000 | 數據庫端口號 |
| role: primary | 數據庫實例角色 |
| ssh_option: | SSH 登錄信息 |
| port: 22 | SSH 服務端口 |
| user: root | SSH 登錄用戶 |
| password: "pTk6N...nc=" | SSH 登錄用戶密碼,該字段不支持明文填寫,需使用 ptk encrypt PASSWORD 加密后填寫 |
4、安裝前的系統檢查
在安裝數據庫之前,需要先對要安裝數據庫的服務器進行一下系統參數以及軟件依賴等檢查,確保安裝過程可以順利執行。
檢查命令如下:
| ptk checkos -f config.yaml -i A --detail |
檢查命令的輸出結果如下:

上面輸出結果的檢查類別說明如下:
| 類別編號 | 類別 | 檢查項 | 說明 |
| A1 | 系統版本 | Check_OS_Version | 檢查系統版本 |
| A2 | 內核版本 | Check_Kernel_Version | 檢查內核版本 |
| A3 | 字符集 | Check_Unicode | 檢查字符集 |
| A4 | 時區 | Check_TimeZone | 檢查時區 |
| A5 | 內存交換區 | Check_Swap_Memory_Configure | 檢查 swap 內存配置 |
| A6 | sysctl參數 | Check_SysCtl_Parameter | 檢查 sysctl 參數 |
| A7 | 文件系統 | Check_FileSystem_Configure | 檢查文件系統配置 |
| A8 | 磁盤配置 | Check_Disk_Configure | 檢查磁盤配置 |
| A9 | 預讀塊設置 | Check_BlockDev_Configure | 檢查塊設備配置 |
| Check_Logical_Block | 檢查邏輯塊 | ||
| A10 | IO調度 | Check_IO_Request | 檢查 IO 請求參數 |
| Check_Asynchronous_IO_Request | 檢查異步 IO 請求參數 | ||
| Check_IO_Configure | 檢查 IO 配置 | ||
| A11 | 網絡配置 | Check_Network_Configure | 檢查網絡配置 |
| A12 | 時鐘一致性 | Check_Time_Consistency | 檢查時鐘一致性 |
| A13 | 防火墻配置 | Check_Firewall_Service | 檢查防火墻配置 |
| A14 | 透明大頁配置 | Check_THP_Service | 檢查透明大頁配置 |
| A15 | 依賴包 | Check_Dependent_Package | 檢查數據庫系統安裝依賴 |
| A16 | CPU指令集 | Check_CPU_Instruction_Set | 檢查CPU指令集 |
| A17 | 端口狀態 | Check_Port | 檢查數據庫端口是否被占用 |
PTK 的檢查結果分為四個等級:
- OK:符合預期值,滿足安裝需求
- Warning: 不符合預期值,但可以滿足安裝需求
- Abnormal: 不滿足安裝要求,可能會導致安裝過程失敗,需根據 PTK 給出的修改建議腳本,人工執行修改
- ExecuteError: 執行錯誤,該等級表示 PTK 在檢查時執行命令失敗,可能為用戶環境工具缺失或內部BUG,需根據實際錯誤提示進行修正
5、下載MogDB安裝包,并通過PTK安裝數據庫集群
(1)下載MogDB安裝包
下載地址:https://www.mogdb.io/downloads/allDownload
選擇相應平臺的安裝包,下載并上傳到數據庫服庫器主機上(只需上傳到一臺主機上即可)。
(2)通過PTK安裝數據庫集群
命令如下:
| ptk install -f config.yaml --pkg ./MogDB-3.0.1-CentOS-x86_64.tar.gz |
在安裝過中,會要求對集群信息進行確認,如下所示:

隨后,會提示輸入數據庫密碼,此密碼要符合密碼復雜度規則,否則會有如下提示:

此后,PTK就會根據拓撲配置文件,自動向各個節點傳送、安裝和初始化MogDB數據庫實例,如下所示:

PTK完成安裝,最后輸出的日志內容如下:

可以看到集群的兩個節點上的數據庫實例已經啟動成功了。
此時也可以查看主庫和備庫的數據庫服務進程,如下所示:
主庫:

備庫:

執行到此處時,我曾經有些疑惑,因為對PG有過一點了解,知道PG是有多個服務進程的,但是MogDB怎么就一個服務進程呢?于是繼續查看,如下所示:
主庫:

備庫:

可以看到MogDB是以更細粒度的多線程方式在運行各個服務,而且服務功能明顯多于PG!
通過進一步的了解,知道了openGauss(MogDB)雖然源自于PG,但是不同于PG的多進程服務,openGauss(MogDB)是單進程多線程服務。
線程的啟動和切換的開銷,都遠小于進程。而且一個進程中的多個線程之間使用相同的地址空間,共享大部分數據,線程的數據可以直接為其他線程所用。
因此線程間的數據通信,也比進程間的通信要方便快捷。采用多線程的方式,更能發揮出多核心CPU的運算優勢和潛力,更加適合并行計算。
openGauss(MogDB)內核雖然源于PostgreSQL,但是在開發過程中結合企業級場景需求,通過C++語言(PostgreSQL是用C語言寫的)對80+%的數據庫內核代碼進行了重構,修改和新增了70多萬行核心代碼。
在整體架構、數據庫內核三大引擎 (優化器、執行引擎、存儲引擎)、事務、以及鯤鵬芯片等方面做了大量的深度優化。例如,通過引入向量化引擎和編譯執行引擎等從多個維度重構了執行引擎,通過列存及自適應壓縮等全新重構了存儲引擎。除了數據庫內核,在高可用、數據庫安全和AI特性方面,openGauss(MogDB)也做了極大的增強。可以看到openGauss(MogDB)對PG的內核做了非常大的改造和增強。
通過以上實驗場景所列出的MogDB的服務線程也可以看到,除了PG原有的服務功能外,還增加很多服務功能,由于目前我還沒有深入學習,但是從線程的字面,可以粗略的猜測出其功能,比如:
jemolloc_bg_thd,猜測是采用jemolloc內存分配方式的后臺線程;
alarm,猜測是告警檢查線程;
reaper,猜測是資源回收線程
Jobscheduler,猜測是后臺定時任務服務線程;
ashworker,猜測是類似于ORACLE ash活動會話歷史信息采集線程;
auditor,猜測是審計日志線程;
2pccleaner,猜測是兩階段清理線程
通過翻看MogDB的官方文檔,了解到MogDB在“AI4DB:數據庫自治運維”、“DB4AI:數據庫驅動AI”、“AI in DB:數據庫內AI功能”,以及“數據庫安全管理(密態等值查詢、賬本數據庫、透明數據加密)”等重要方面做了大量的研發和優化工作,這些都是更加符合企業級應用的重要特色和亮點。在此真的為華為和云和恩墨贊嘆!
6、查看集群信息
(1)查看集群列表
命令如下:
| ptk ls |

(2)查看集群狀態
命令如下:
| ptk cluster status --name mogdb_cluster1 |

7、登錄數據庫
命令如下:
| su - omm gsql -d postgres -p 26000 |
登錄后,就可以進行相關的數據庫操作了,如下所示:

8、測試主備庫數據同步
(1)在主庫創建測試用的數據庫和數據表并插入測試數據

(2)在備庫,查看驗證是否正常同步了主庫的測試數據庫和表數據

四、安裝集群高可用軟件MogHA
1、MogHA介紹
MogHA 是云和恩墨基于 MogDB 同步異步流復制技術自研的一款保障數據庫主備集群高可用的企業級軟件系統。適用于 MogDB 和 openGauss 數據庫。
MogHA 能夠自主探測故障實現故障轉移,虛擬IP自動漂移等特性,使得數據庫的故障持續時間從分鐘級降到秒級(RPO=0,RTO<30s),確保數據庫集群的高可用服務。
關于MogHA更詳細的介紹,請看官方文檔:https://docs.mogdb.io/zh/mogha/
2、為什么數據庫支持主備,還需要 MogHA?
首先我們需要理解一下什么是高可用,高可用的目的是為了讓數據庫盡可能提供連續服務,以保證上層業務的穩定運行。數據庫雖然支持主備庫的部署結構,其目的是防止單點故障。但數據庫并不提供故障檢測以及自動化切換主備的功能,這也不屬于數據庫的處理范疇。所以需要有 MogHA 這樣的一套高可用系統,來保證數據庫服務的連續性。
3、MogHA系統架構示意

4、MogHA支持的模式
(1)Lite 模式(推薦)
Lite 模式,顧名思義即輕量級模式,該模式僅需在主庫和一臺同步備機器上啟動 MogHA 服務,此時 MogHA 服務可以保證這兩臺機器上數據庫實例的高可用,當主庫發生不可修復的問題或者網絡隔離時,MogHA 可以自主地進行故障切換和虛擬IP漂移。

(2)Full 模式
Full模式相較于 lite 模式,需要在所有實例機器上運行 MogHA 服務,且所有的實例有由 MogHA 來自動管理,當出現主庫故障時,會優先選擇本機房同步備進行切換,如果本機房同步備也是故障的情況,會選擇同城備機房的同步備進行切換。為了達到RPO=0,MogHA 不會選擇異步備庫進行切換,以防止數據丟失。該模式會在主備切換時,會自動修改數據庫的復制連接及同步備列表配置。
5、安裝MogHA的系統環境要求
(1)gsql, gs_ctl 可以免密執行
查看pg_hba.conf 認證文件,確認本地連接的校驗方式為 trust
命令如下:
| su - omm vi /opt/mogdb/data/pg_hba.conf |
測試確認,可以免密執行:
| gs_ctl query |
(2)設置數據庫安裝用戶的 sudo 權限
vi /etc/sudoers
加入如下內容:
omm ALL=(ALL) NOPASSWD: /usr/sbin/ifconfig
(3)確認MogHA通信端口暢通(未被占用)
MogHA 需要一個固定的端口(默認為 8081,可配置,修改配置文件中的 agent_port)用于不同節點的 MogHA 之間通信,所以需確認要配置的端口可以在節點直接互相訪問。
(4)校對時間
使用 ntp 或 chronyd 校對主庫和備庫的時間。確保主庫和備庫的時間一致。
6、MogHA的安裝步驟
! 注意:安裝過程請使用 root 用戶進行操作,涉及到給數據庫安裝用戶sudo權限以及注冊系統服務。
(1)下載并解壓MogHA安裝包
下載地址:https://cdn-mogdb.enmotech.com/mogha/2.3.6/mogha-2.3.6-CentOS-x86_64.tar.gz
解壓命令如下:
| tar -zxvf mogha-2.3.6-CentOS-x86_64.tar.gz -C /home/omm |
(2)安裝 MogHA 服務
命令如下:
| cd /home/omm/mogha sudo ./install.sh omm /opt/mogdb/data |
安裝過程輸出的日志信息如下:

(3)完善 node.conf 配置
執行完MogHA安裝腳本后,不要立即啟動 MogHA 服務,需要先完善配置文件,然后再啟動服務。
命令如下:
| su - omm vi /home/omm/mogha/node.conf |
對node.conf配置文件調整的內容如下:


(4)啟動MogHA 服務,并查看服務狀態
命令如下:
| sudo systemctl start mogha |
查看MogHA服務狀態,命令如下:
| sudo systemctl status mogha |

通過查看以上MogHA的服務狀態,可以看到其主要的服務進程。
(5)設置MogHA服務開機自啟
命令如下:
| sudo systemctl enable mogha |
(6)MogHA的日志文件:
- mogha_heartbeat.log
這個日志文件會存放在安裝目錄中,在本示例中為 /home/omm/mogha,這個日志主要記錄HA的心跳日志,也是排查問題主要的優先檢查的日志文件。
查看此日志文件內容的命令如下:
| sudo more /home/omm/mogha/mogha_heartbeat.log |
- mogha_web.log
這個日志文件存放目錄和心跳日志相同。這個日志主要記錄 web api 接口的請求日志。
查看此日志文件內容的命令如下:
| more /home/omm/mogha/mogha_web.log |
在此我有個疑問:以上兩個日志文件實時記錄著心跳和請求,文件大小一直在增長,如果在生產環境中,是否要做定期的文件清理策略?
7、查看MogHA管理的VIP

可以看到當前VIP(192.168.20.175)在主庫的網卡上。
8、MogHA模擬故障測試
(1)模擬主庫宕機
直接停止主庫所在主機的運行,模擬主庫所在主機宕機。
(2)查看VIP
在主庫主機宕機后,稍后查看VIP已經飄移到另一個可用的節點上,如下所示:

(3)重啟主庫主機
由于設置了mogha服務開機自啟動。因此在主機啟動后,自動拉起了mogha服務。而mogha服務又拉起了MogDB數據庫服務。
此時再查看集群狀態,如下:

可以看到集群各節點的數據庫服務已經恢復正常。但由于原來的主庫宕機,導致原來的備庫轉換成為主庫角色。
而原來的主庫在宕機恢復后,就成為了備庫角色。
五、對MogDB初步使用的體會
經過以上對MogDB的初步體驗,我看到了官方文檔的邏輯層次清晰與內容簡潔明了。采用PTK工具安裝數據庫集群,更是方便快捷,通過安裝過程輸出的日志,可以清楚的了解到安裝過程的每一步細節。MogHA高可用服務,更是大大加強了企業級數據庫應用的高可用性。整個體驗過程,讓我直觀的感受到了MogDB的安穩易用。
透過這良好的使用體驗,我知道這是國產數據庫人,用努力拼搏灑下的艱辛汗水和一路走來的堅定步伐,所踏就鑄成了今天的平坦之路。做為國人一員,我為有這樣的國產數據庫,而感到驕傲!
借此次“首屆MogDB征文活動”的大好時機,我認真地學習了MogDB官方文檔,并通過做實驗有了更進一步的了解,在對MogDB有了些許認知的基礎上,整理了以上的文字。希望對準備學習MogDB的小伙伴有所幫助。
另外,也把這些文字做為引玉之磚,一方面請老師和同學們幫我糾正文中可能存在的錯誤,另一方面也希望在墨天輪上看到更多、更充實、更深入的關于MogDB的文章。
附錄:MogDB 3.0 墨天輪在線實訓環境
對于MogDB數據庫,各位小伙伴,是不是已經心動了。如果想嘗試,又苦于沒有資源環境,那么可以使用墨天輪提供的MogDB 3.0 在線實訓環境,網址如下:http://www.sunline.cc/terminal
讓我們共同學習、共同進步,共同為國產數據庫技術的發展助力、加油!





