一、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 在线实训环境,网址如下:https://www.modb.pro/terminal
让我们共同学习、共同进步,共同为国产数据库技术的发展助力、加油!