1、磐维数据库介绍
磐维数据库,简称"PanWeiDB"。是中国移动信息技术中心首个基于中国本土开源数据库打造的面向ICT基础设施的自研数据库产品。其产品内核能力基于华为openGauss开源软件,并进一步提升了系统稳定性。
磐维数据库具有高性能、高可靠、高安全、高兼容等特点,能够满足复杂多变的业务需求。磐维数据库提供了自动化、流程化的解决方案,实现了一键式数据迁移。这种高效的数据迁移方式不仅提高了迁移数据的效率,也降低了操作难度,为用户带来了极大的便利。
磐维数据库包括集中式和分布式,本文主要介绍磐维分布式数据库3.0.1安装部署过程,供大家参考。
2、环境要求
2.1 硬件环境要求

推荐服务器配置,如表 2-2 所示:

2.2 软件环境要求
推荐如下软件类型及版本:

2.3 软件依赖要求
安装 PanWeiDB 3.0.1 的软件依赖要求,见表 2-4 所示。
建议使用上述操作系统源中依赖软件的默认安装包。若默认安装包不存在,可参照软件对应的建议版本,单独进行下载安装。


3、部署规划
磐维分布式数据库采用 share nothing 架构,计算节点和存储节点分离,节点间通过高速网络进行通信。所有节点都有主从互备,确保系统的高可用性。逻辑架构如下图所示。

说明:出于安全需要,本文中的ip地址都用*.*代替,大家在实际部署过程中要换成真实的ip地址。
本文中使用了三台虚拟机,配置如下:
| 主机名 | ip地址 | OS版本 | 内存、CPU |
|---|---|---|---|
| node1 | 192.*.*.60 | Centos7.9 | 4G 、 1个双核 |
| node2 | 192.*.*.62 | Centos7.9 | 4G 、 1个双核 |
| node3 | 192.*.*.64 | Centos7.9 | 4G 、 1个双核 |
部署规划如下:
| 节点类型 | 节点名称 | 节点 IP | 端口 | 代理端口 | 角色 | 工作路径 work_dir |
|---|---|---|---|---|---|---|
| gha_server | gha_server1 | 192.*.*.60 | 20001 | - | - | - |
| dcs | - | 192.*.*.60 | 2379 | - | - | - |
| dcs | - | 192.*.*.62 | 2379 | - | - | - |
| dcs | - | 192.*.*.64 | 2379 | - | - | - |
| gtm | gtm1 | 192.*.*.60 | 6666 | 8001 | 主 | /data/gtm/gtm1 |
| gtm | gtm2 | 192.*.*.62 | 6666 | 8002 | 备 | /data/gtm/gtm2 |
| coordinator | cn1 | 192.*.*.62 | 5432 | 8003 | 主 | /data/coord/cn1 |
| coordinator | cn2 | 192.*.*.64 | 5432 | 8004 | 主 | /data/coord/cn2 |
| datanode | dn1_1 | 192.*.*.62 | 15432 | 8005 | 主 | /data/dn1/dn1_1 |
| datanode | dn1_2 | 192.*.*.64 | 15432 | 8006 | 备 | /data/dn1/dn1_2 |
| datanode | dn1_3 | 192.*.*.60 | 15432 | 8007 | 备 | /data/dn1/dn1_3 |
| datanode | dn2_1 | 192.*.*.64 | 20001 | 8008 | 主 | /data/dn1/dn2_1 |
| datanode | dn2_2 | 192.*.*.60 | 20001 | 8009 | 备 | /data/dn1/dn2_2 |
| datanode | dn2_3 | 192.*.*.62 | 20001 | 8010 | 备 | /data/dn1/dn2_3 |
4、安装准备
4.1 检查系统依赖包
rpm -q bison flex patch bzip2
如果缺少依赖包,配置好yum源进行安装:
yum install -y bison flex patch bzip2
4.2 检查是否支持 rdtscp 指令集
cat /proc/cpuinfo | grep rdtscp
4.3 创建用户和组、配置sudoer
创建用户和组:
groupadd dbgrp
useradd -m -d /home/omm omm -g dbgrp
passwd omm
返回并设置密码
配置sudoer:
# visudo
进入编辑模式,添加 omm 用户及权限:
omm ALL=(ALL) NOPASSWD:ALL
保存并退出。
4.4 关闭防火墙
systemctl status firewalld.service
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
4.5 关闭 SELINUX
检查selinux是否已关闭:
sestatus
如果系统提示以下信息,说明 selinux 已被禁用:
SELinux status: disabled
否则,执行下面命令关闭selinux:
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
重启服务器生效。
临时生效方法:
setenforce 0
4.6 同步系统时间
PanWeiDB 分布式数据库系统,需要各节点间时间同步,来保证数据库一致性。一般采用 NTP 服务方式来保证各节点间的时间同步。检查和配置 NTP 服务的操作步骤如下:
(1) 检查服务器是否安装 NTP 服务以及是否正常运行:
systemctl status ntpd.service
若 NTP 服务未处于正常运行状态,执行rpm -qa|grep ntp:
如果没有 ntp 显示,则应删除原有 ntpdate 后重新安装 ntp:
yum -y remove ntpdate-4.2.6p5-29.el7.centos.x86_64
yum -y install ntp
(2) 配置 NTP 服务
1、node1节点(192.*.*.60)作为 server
执行vi /etc/ntp.conf
添加内容:
restrict 192.*.*.60 nomodify notrap nopeer noquery
server 127.127.1.0
Fudge 127.127.1.0 stratum 10
注释:
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
2、node2节点(192.*.*.62)执行vi /etc/ntp.conf
添加内容:
restrict 192.*.*.62 nomodify notrap nopeer noquery
server 192.*.*.60
Fudge 192.*.*.60 stratum 10
注释:
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
3、node3节点(192.*.*.64)执行vi /etc/ntp.conf
添加内容:
restrict 192.*.*.64 nomodify notrap nopeer noquery
server 192.*.*.60
Fudge 192.*.*.60 stratum 10
注释:
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
4、三个节点都执行:
systemctl stop ntpd
systemctl start ntpd
systemctl status ntpd
systemctl enable ntpd
5、配置完毕后,在各节点执行以下命令,查看 NTP 服务是否连通。
ntpstat
NTP 主节点应返回:
synchronised to local net (127.127.1.0) at stratum 6
time correct to within 11 ms
polling server every 64 s
NTP 其他节点应返回:
synchronised to NTP server (192.68.100.60) at stratum 7
time correct to within 28 ms
polling server every 128 s
4.7 配置系统内核参数
vi /etc/sysctl.conf 加入:
kernel.sem = 40960 2048000 40960 20480
保存并退出
sysctl -p
4.8 关闭THP
#检查THP开启情况
cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
##关闭THP
echo never > /sys/kernel/mm/transparent_hugepage/enabled
## 设置重启后自动关闭
chmod +x /etc/rc.d/rc.local
systemctl enable rc-local.service
cat >> /etc/rc.d/rc.local <<EOF
swapoff -a
if test -f /sys/kernel/mm/transparent_hugepage/enabled;
then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag;
then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
4.9 关闭RemoveIPC
1、 修改/etc/systemd/logind.conf文件中的“RemoveIPC”值为“no”
vim /etc/systemd/logind.conf
RemoveIPC=no
2、修改/usr/lib/systemd/system/systemd-logind.service文件中的“RemoveIPC”值为“no”
vim /usr/lib/systemd/system/systemd-logind.service
RemoveIPC=no #没有参数,添加到末尾
3、 重启服务
systemctl daemon-reload
systemctl restart systemd-logind.service
4、 结果验证确认
loginctl show-session | grep RemoveIPC
systemctl show systemd-logind | grep RemoveIPC
4.10 配置互信
在所有节点创建 omm 用户免密登录。需在所有节点使用 omm 用户,进行以下操作:
# su - omm
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ ssh-keygen -t rsa
将公钥文件上传至同集群所有节点(包括本节点),即可实现免密登录(此操作需输入密码):
$ ssh-copy-id omm@192.*.*.60
$ ssh-copy-id omm@192.*.*.62
$ ssh-copy-id omm@192.*.*.64
验证互信
所有节点执行下面命令都不需要输入密码,即互信正常。
$ ssh 192.*.*.60 date
Sun Nov 24 20:57:59 CST 2024
$ ssh 192.*.*.62 date
Sun Nov 24 20:58:04 CST 2024
$ ssh 192.*.*.64 date
Sun Nov 24 20:58:08 CST 2024
5、安装部署
以下流程操作仅在第一台主机上进行。为保证正常使用,请申请 license 文件,永久生效。使用方法为:在 GTM 节点目录(例如本文中为/data/gtm/gtm1)下创建 pw_license 目录,并将向技术人员申请license 文件放置此目录中,重启后生效。
安装部署流程为:创建目录、准备安装包、编辑 yml 文件、预检查、安装。
5.1 创建安装目录
在第一台主机上创建 PanWeiDB 分布式数据库的安装目录。配置文件中 pkg_path 参数值需与安装目录保持一致。
mkdir -p /data/omm_package
5.2 准备安装包
将数据库安装文件上传到第一台主机的安装目录/data/omm_package/,并解压:
[omm@node1 omm_package]$ cd /data/omm_package/
[omm@node1 omm_package]$ ll
total 247244
-rw-r--r-- 1 omm dbgrp 253177558 Nov 24 15:37 PanWeiDB_V2.0_dist_S3.0.1_B01_x86_64.tar.gz
[omm@node1 omm_package]$ tar -xvf PanWeiDB_V2.0_dist_S3.0.1_B01_x86_64.tar.gz
[omm@node1 omm_package]$ tar -xvf PanWeiDB_V2.0_dist_S3.0.1_B01_x86_64_om.tar.gz
5.3 编辑 yml 文件
编辑集群配置文件。 模板配置文件默认在安装目录中(例如/data/omm_package)。
[omm@node1 omm_package]$ pwd
/data/omm_package
[omm@node1 omm_package]$ ls -l panwei.yml
-rw-r--r-- 1 omm dbgrp 2565 Sep 25 16:57 panwei.yml
编辑 panwei.yml 配置文件,修改后的结果如下:
[omm@node1 omm_package]$ cat panwei.yml
ha_server:
- ha_server1:
host: 192.*.*.60
port: 20001
dcs:
- host: 192.*.*.60
port: 2379
- host: 192.*.*.62
port: 2379
- host: 192.*.*.64
port: 2379
gtm:
- gtm1:
host: 192.*.*.60
agent_host: 192.*.*.60
role: primary
port: 6666
agent_port: 8001
work_dir: /data/gtm/gtm1
- gtm2:
host: 192.*.*.62
agent_host: 192.*.*.62
role: standby
port: 6666
agent_port: 8002
work_dir: /data/gtm/gtm2
coordinator:
- cn1:
host: 192.*.*.62
agent_host: 192.*.*.62
role: primary
port: 5432
agent_port: 8003
work_dir: /data/coord/cn1
- cn2:
host: 192.*.*.64
agent_host: 192.*.*.64
role: primary
port: 5432
agent_port: 8004
work_dir: /data/coord/cn2
datanode:
- dn1:
- dn1_1:
host: 192.*.*.62
agent_host: 192.*.*.62
role: primary
port: 15432
agent_port: 8005
work_dir: /data/dn1/dn1_1
- dn1_2:
host: 192.*.*.64
agent_host: 192.*.*.64
role: standby
port: 15432
agent_port: 8006
work_dir: /data/dn1/dn1_2
- dn1_3:
host: 192.*.*.60
agent_host: 192.*.*.60
role: standby
port: 15432
agent_port: 8007
work_dir: /data/dn1/dn1_3
- dn2:
- dn2_1:
host: 192.*.*.64
agent_host: 192.*.*.64
role: primary
port: 20010
agent_port: 8008
work_dir: /data/dn2/dn2_1
# numa:
# cpu_node_bind: 0,1
# mem_node_bind: 0,1
- dn2_2:
host: 192.*.*.60
agent_host: 192.*.*.60
role: standby
port: 20010
agent_port: 8009
work_dir: /data/dn2/dn2_2
# numa:
# cpu_node_bind: 2
# mem_node_bind: 2
- dn2_3:
host: 192.*.*.62
agent_host: 192.*.*.62
role: standby
port: 20010
agent_port: 8010
work_dir: /data/dn2/dn2_3
# numa:
# cpu_node_bind: 3
# mem_node_bind: 3
env:
# cluster_type allowed values: multiple-nodes, single-inst, default is multiple-nodes
cluster_type: multiple-nodes
pkg_path: /data/omm_package
prefix: /data/omm_db
version: V2.0_dist_S3.0.1_B01
user: omm
port: 22
third_ssh: false
# constant:
# virtual_ip: 100.0.1.254/24
[omm@node1 omm_package]$
5.4 预检查
完成两层安装包解压后,会在安装目录下生成 script 子目录。执行 ha_preinstall 命令进行环境配置,包括建立用户互信、安装前环境检查和环境修复功能。
安装前环境检查
[omm@node1 ~]$ cd /data/omm_package/script/
[omm@node1 script]$ ./ha_preinstall -i A -h 192.*.*.60,192.*.*.62,192.*.*.64 -u omm -p 22
Checking items:
A1. [ OS version status ] : Normal
A2. [ Kernel version status ] : Normal
A3. [ Unicode status ] : Normal
A4. [ Time zone status ] : Normal
A5. [ Swap memory status ] : Normal
A6. [ Bash type ] : Normal
A7. [ System limits ] : Normal
A8. [ Disk configuration status ] : Normal
A9. [ Pre-read block size status ] : Normal
A10.[ IO scheduler status ] : Normal
A11.[ Network card configuration status ] : Normal
A12.[ Time consistency status ] : Normal
A13.[ Firewall/Ufw service status ] : Normal
A14.[ THP service status ] : Normal
A15.[ SELinux status ] : Normal
A16.[ Dependency version ] : Normal
A17.[ Sudo privilege ] : Normal
A18.[ Command permission ] : Normal
Total numbers:18. Abnormal numbers:0. Warning numbers:0.
5.5 安装数据库
完成两层安装包解压后,会在安装目录下生成 script 子目录。执行 ha_ctl 命令安装PanWeiDB 分布式数据库。语法格式为:
ha_ctl install <-c cluster> <-p confpath>
其中参数说明:
- -c 参数:指定数据库集群名称,为可选字段。缺省默认值 panwei。
- -p 参数:指定配置文件保存路径,为可选字段。
注意:
- 集群名需与配置文件名保持一致。
- 安装完成后,不要删除 ha_ctl 命令文件所在的 script 目录,否则将导致运维命令丢失。
- 安装数据库时环境变量尚未配置,需进入 script 目录执行 ha_ctl 命令。安装成功后,可在任意目录下以 omm 用户执行 ha_ctl 命令。
./ha_ctl install -c panwei -p /data/omm_package
执行结果如下:
[omm@node1 script]$ ./ha_ctl install -c panwei -p /data/omm_package
{
"ret":0,
"msg":"Success"
}
这一步在虚拟机里面花费8分钟,物理机上会更快。
6、集群管理
6.1 数据库状态监控
登录任一节点都可以执行。
语法:
ha_ctl monitor all/server/gtm/coordinator/datanode/dcs <-c cluster> <-H> -l dcslist
其中参数说明:
- -c 参数:表示数据库名称,为可选字段。缺省默认值 panwei。
- dcslist 为 DCS 地址,一般情况下可以只列出一个节点地址,其他节点会自动同步消息。为了保证高可用,也可以列出所有节点地址。
- -H 参数:如指定该参数,则集群状态结果以表格形式展示。
running:节点处于正常运行状态
stopped:节点处于正常停止状态
unstable:节点处于不稳定的中间状态。检查故障处理。
命令执行结果如下:
[omm@node1 ~]$ ha_ctl monitor all -l http://192.*.*0.60:2379 -H
+----+------------+----------------+-------+---------+--------+
| No | name | host | port | state | leader |
+----+------------+----------------+-------+---------+--------+
| 0 | ha_server1 | 192.*.*.60 | 20001 | running | True |
+----+------------+----------------+-------+---------+--------+
+----+------+----------------+------+----------------+---------+---------+
| No | name | host | port | work_dir | state | role |
+----+------+----------------+------+----------------+---------+---------+
| 0 | gtm1 | 192.*.*.60 | 6666 | /data/gtm/gtm1 | running | primary |
| 1 | gtm2 | 192.*.*.62 | 6666 | /data/gtm/gtm2 | running | standby |
+----+------+----------------+------+----------------+---------+---------+
+----+------+----------------+------+-----------------+---------+---------+
| No | name | host | port | work_dir | state | role |
+----+------+----------------+------+-----------------+---------+---------+
| 0 | cn1 | 192.*.*.62 | 5432 | /data/coord/cn1 | running | primary |
| 1 | cn2 | 192.*.*.64 | 5432 | /data/coord/cn2 | running | primary |
+----+------+----------------+------+-----------------+---------+---------+
+----+-------+-------+----------------+-------+-----------------+---------+---------+
| No | group | name | host | port | work_dir | state | role |
+----+-------+-------+----------------+-------+-----------------+---------+---------+
| 0 | dn1 | dn1_1 | 192.*.*.62 | 15432 | /data/dn1/dn1_1 | running | primary |
| 1 | dn1 | dn1_2 | 192.*.*.64 | 15432 | /data/dn1/dn1_2 | running | standby |
| 2 | dn1 | dn1_3 | 192.*.*.60 | 15432 | /data/dn1/dn1_3 | running | standby |
| 3 | dn2 | dn2_1 | 192.*.*.64 | 20010 | /data/dn2/dn2_1 | running | primary |
| 4 | dn2 | dn2_2 | 192.*.*.60 | 20010 | /data/dn2/dn2_2 | running | standby |
| 5 | dn2 | dn2_3 | 192.*.*.62 | 20010 | /data/dn2/dn2_3 | running | standby |
+----+-------+-------+----------------+-------+-----------------+---------+---------+
+----+----------------------------+--------+---------+----------+
| No | url | name | state | isLeader |
+----+----------------------------+--------+---------+----------+
| 0 | http://192.*.*.64:2379 | node_2 | healthy | True |
| 1 | http://192.*.*.62:2379 | node_1 | healthy | False |
| 2 | http://192.*.*.60:2379 | node_0 | healthy | False |
+----+----------------------------+--------+---------+----------+
6.2 启动数据库
语法:
ha_ctl start all -l dcslist <-c cluster>
命令执行结果如下:
[omm@node1 ~]$ ha_ctl start all -l http://192.*.*.60:2379
{
"ret":0,
"msg":"Success"
}
[omm@node1 ~]$
6.3 停止数据库
语法:
ha_ctl stop all -l dcslist <-c cluster>
命令执行结果如下:
[omm@node1 ~]$ ha_ctl stop all -l http://192.*.*.60:2379
{
"ret":0,
"msg":"Success"
}
[omm@node1 ~]$
6.4 数据库卸载
1、集群卸载语法格式:
ha_ctl uninstall <-f> <-c cluster> -l dcslist
参数说明:
-f 参数:表示清理安装目录,为可选字段。缺省保留目录文件夹。
2、卸载完成后删除 DCS 工具:
在集群卸载后环境变量自动清除,因此再次执行 ha_ctl 命令需要进入 script 目录。
cd /data/omm_package/script
ha_ctl destroy dcs -l dcslist
7、连接与使用
7.1 本地连接(gsql访问)
1、以 omm 用户登录数据库读写 CN 节点。
2、连接数据库。
gsql -d dbname -p port <-U user_name> <-h hostip>
示例:以最简便的方式,通过 CN 节点连接到 postgres 数据库
gsql -d postgres -p 5432
命令执行结果如下:
[omm@node2 ~]$ gsql -d postgres -p 5432
gsql ((PanWeiDB_V2.0(openGauss)-distributed version-3.0.1_B01 build d2edb141) compiled at 2024-09-25 16:30:33 commit 0 last mr 2715 )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
postgres=#
7.2 远程访问(gsql访问)
设置白名单
gs_guc reload -Z coordinator -N all -I all -h "host all all 192.0.0.0/8 sha256"
执行结果如下:
[omm@node2 ~]$ gs_guc reload -Z coordinator -N all -I all -h "host all all 192.0.0.0/8 sha256"
The gs_guc run with the following arguments: [gs_guc -Z coordinator -N all -I all -h host all all 192.0.0.0/8 sha256 reload ].
Begin to perform the total nodes: 3.
Popen count is 2, Popen success count is 2, Popen failure count is 0.
Begin to perform gs_guc for coordinators.
Command count is 2, Command success count is 2, Command failure count is 0.
Total instances: 2.
ALL: Success to perform gs_guc!
测试:
[omm@node1 ~]$ gsql -h 192.*.*.62 -d postgres -U test
Password for user test:
gsql ((PanWeiDB_V2.0(openGauss)-distributed version-3.0.1_B01 build d2edb141) compiled at 2024-09-25 16:30:33 commit 0 last mr 2715 )
SSL connection (cipher: ECDHE-RSA-AES128-GCM-SHA256, bits: 128)
Type "help" for help.
postgres=> \du
List of roles
Role name | Attributes | Member of
-----------+------------+-----------
test | | {}
postgres=>
7.3 远程访问(dbeaver工具)
数据库连接配置:

测试连接:

查询数据:

8、碰到的问题
[omm@node1 script]$ ./ha_preinstall -i A -h 192.*.*.60,192.*.*.62,192.*.*.64 -u omm -p 22
Checking items:
A1. [ OS version status ] : Abnormal
A2. [ Kernel version status ] : Warning
A3. [ Unicode status ] : Abnormal
A4. [ Time zone status ] : Abnormal
A5. [ Swap memory status ] : Warning
A6. [ Bash type ] : Abnormal
A7. [ System limits ] : Warning
A8. [ Disk configuration status ] : Warning
A9. [ Pre-read block size status ] : Abnormal
A10.[ IO scheduler status ] : Abnormal
A11.[ Network card configuration status ] : Warning
A12.[ Time consistency status ] : Abnormal
A13.[ Firewall/Ufw service status ] : Warning
A14.[ THP service status ] : Warning
A15.[ SELinux status ] : Abnormal
A16.[ Dependency version ] : Abnormal
A17.[ Sudo privilege ] : Abnormal
A18.[ Command permission ] : Abnormal
Total numbers:18. Abnormal numbers:11. Warning numbers:7.
Do checking operation finished. Result: Abnormal.
解决办法:
[omm@node1 script]$ ./ha_preinstall -i A1 -h 192.*.*.60,192.*.*.62,192.*.*.64 -u omm -p 22 --detail
Checking items
A1. [ OS version status ] : Abnormal
check A1 failed, Error:
[Errno -2] Name or service not known
please check error message and run: "/data/omm_package/script/ha_preinstall -i A1 -h 192.*.*.60,192.*.*.62,192.*.*0.64 -u omm -p 22 --detail" to try it again!
Total numbers:1. Abnormal numbers:1. Warning numbers:0.
Do checking operation finished. Result: Abnormal.
编辑/etc/hosts加入:
192.*.*.60 node1
192.*.*.62 node2
192.*.*.64 node3
9、总结
按文档一步一步地部署磐维分布式数据库还是比较简单的,有需求的朋友们快来试一试吧!




