DM9达梦自治容灾集群部署
·
DM9达梦自治容灾集群
1 环境说明
-
CPU x86
-
OS kylin v10
-
DM9 03151060506-20260417-322930-20218
-
DM9 AFC集群采用3~9奇数副本的共识架构,可容忍(N-1)/2个副本失效;以3副本为例,允许1个副本故障而不影响服务,但当2个副本故障时,剩余1个副本因无法满足多数派(Quorum)要求会自动停止对外服务,仅保留数据安全。相比之下,DM8/DM9主备集群在配置自动故障切换的前提下,只要尚有至少一个健康实例(主库或可被提升的备库)即可持续提供服务,直至所有节点均不可用;但若未配置自动切换,则主库故障后备库不会自动接管,服务将立即中断。
2 环境规划
- 安装包存放目录 /home
- 配置环境说明
| 实例名 | IP | PORT_NUM | XMAL_IP | XMAL_PORT | 库路径 |
|---|---|---|---|---|---|
| RAFT_01 | 192.168.100.190 | 1577 | 192.168.100.190 | 10007 | /data/dmdba/dmdata/DAMENG |
| RAFT_02 | 192.168.100.191 | 1577 | 192.168.100.191 | 10007 | /data/dmdba/dmdata/DAMENG |
| RAFT_03 | 192.168.100.192 | 1577 | 192.168.100.192 | 10007 | /data/dmdba/dmdata/DAMENG |
3 操作系统配置
- 190,191,192 节点相同操作
1 修改操作系统资源限制
# 使用 root 用户
vi /etc/security/limits.conf
* soft nproc 10240
* hard nproc 10240
dmdba soft nproc 10240
dmdba hard nproc 10240
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba hard data unlimited
dmdba soft data unlimited
dmdba hard fsize unlimited
dmdba soft fsize unlimited
dmdba soft core unlimited
dmdba hard core unlimited
2 操作系统创建用户
# 使用 root 用户
groupadd dinstall
useradd -g dinstall dmdba
passwd dmdba
dameng@123
mkdir -p /data/dmdba
chown -R dmdba:dinstall /data/dmdba
3 操作系统配置
# 使用 root 用户
cat /etc/sysctl.conf
# 1 操作系统内存配置overcommit_memory设置为0(详情见上线规范)
echo vm.overcommit_memory = 0 >> /etc/sysctl.conf && sysctl -p
# 2 core 文件生产路径修改 (详情见上线规范)
echo kernel.core_pattern = /data/dmdba/dmcore/core-%e-%p-%s >> /etc/sysctl.conf && sysctl -p
# 3 关闭numa
echo vm.numa_stat = 0 >> /etc/sysctl.conf && sysctl -p
# 4 内存≤32G 不用改vm.min_free_kbytes
echo vm.min_free_kbytes = 1153434 >> /etc/sysctl.conf && sysctl -p
# 5 内存不足时,建议设置为 1
echo vm.swappiness = 10 >> /etc/sysctl.conf && sysctl -p
# 6 永久关闭swap 缓存 重启生效
sed -ri 's/.*swap.*/#&/' /etc/fstab
# 7 调整系统服务配置 system.conf 参数 重启生效
echo DefaultLimitNOFILE=65536 >> /etc/systemd/system.conf && cat /etc/systemd/system.conf
echo DefaultLimitNPROC=10240 >> /etc/systemd/system.conf && cat /etc/systemd/system.conf
# 8 关闭numa +关闭透明大页 重启生效
# 编辑 vi /etc/default/grub 文件 或编辑 vi /etc/grub.conf 文件
# (必须看上线规范操作验证)
在 GRUB_CMDLINE_LINUX 那一行后面追加 numa=off transparent_hugepage=never
# Kylin查询结果是 UEFI 或 BIOS
[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS
# UEFI 执行命令
grub2-mkconfig -o /boot/efi/EFI/kylin/grub.cfg
# BIOS 执行命令
grub2-mkconfig -o /boot/grub2/grub.cfg
#UOS
grub2-mkconfig -o /etc/grub2.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg
# 重启后验证
cat /sys/kernel/mm/transparent_hugepage/enabled
# 9 磁盘调算法 (详情见上线规范)
# 要求磁盘调度算法为 deadline
cat /sys/block/{DEVICE-NAME}/queue/scheduler
# 注意把{DEVICE-NAME}替换会数据库所使用的对应的磁盘名称,以下以 sda,sdb,vdb 为例。
cat /sys/block/sda/queue/scheduler
cat /sys/block/sdb/queue/scheduler
cat /sys/block/vdb/queue/scheduler
# 10 麒麟 V10sp1 检查 RemoveIPC 参数 (详情见上线规范)
查看麒麟版本命令: nkvers
# 修改/etc/systemd/logind.conf 配置文件中的 RemoveIPC 参数,
将#注释去掉,并修改 yes 为 no
# 重启服务
systemctl daemon-reload;
systemctl restart systemd-logind
# 检查确认
systemctl show systemd-logind | grep -i removeipc
# 11 关闭防火墙或放开端口 (详情见上线规范)
systemctl stop firewalld
systemctl disable firewalld
# 12 关闭 SELinux(CentOS6.5) (详情见上线规范)
4 数据库安装
- 190,191,192 节点相同操作
4.1 解压安装包
cd /home
unzip dm9_20260509_x86_kylin10_sp1_64.zip
mount -o loop dm9_20260509_x86_kylin10_sp1_64.iso /mnt
4.2 安装数据库程序(使用dmdba系统用户)
su - dmdba
cd /mnt
./DMInstall.bin -i
安装语言
请输入选项[1]:1
阅读并同意《DM9许可协议与服务条款》
请输入选项[2]:2
安装组件
请输入选项[1,2]:1,2
指定安装目录[/home/dmdba/dmdbms]:/data/dmdba/dmdbms
-- 安装小结 --
产品名称: 达梦数据库V9
安装目录: /data/dmdba/dmdbms
安装内容: 服务器,客户端工具
所需磁盘空间: 2.23GB
可用磁盘空间: 39.14GB
可用内存: 6.13GB
版本信息:
有效日期:
确认安装?[y/n]:y
-- 安装中 --
[*] 正在初始化安装日志...
[✓] 初始化安装日志完成
[*] 正在拷贝文件...
[✓] 拷贝文件完成
[*] 正在修改文件...
[✓] 修改文件完成
[*] 正在修改环境变量...
[✓] 修改环境变量完成
[*] 正在安装服务...
[✓] 安装服务完成
[*] 正在配置...
[✓] 配置完成
-- 安装总结 --
达梦数据库DM9安装完成
安装目录: /data/dmdba/dmdbms
更多安装信息, 请查看安装日志文件: /data/dmdba/dmdbms/log/install.log
请以root用户执行脚本: /data/dmdba/dmdbms/script/root/root_installer.sh
# 退出dmdba用户,回到 root用户
exit
/data/dmdba/dmdbms/script/root/root_installer.sh
4.3 初始化数据库
#注意:在初次搭建 DM AFC 集群的过程中,务必在启动全新初始化的库之前,优先配置本地归档,确保系统能够正常启动并正常退出后再配置 Raft 归档,
# 使用 dminit 工具初始化数据库实例 RAFT_01
su - dmdba
cd /data/dmdba/dmdbms/bin
190节点
./dminit PATH=/data/dmdba/dmdata page_size=32 extent_size=32 log_size=2048 charset=0 case_sensitive=1 DB_NAME=DAMENG PORT_NUM=1577 INSTANCE_NAME=RAFT_01 SYSDBA_PWD=Dameng@123 SYSAUDITOR_PWD=Dameng@123
4.4 配置数据库dm.ini
配置 dm.ini,先备份
cp /data/dmdba/dmdata/DAMENG/dm.ini /data/dmdba/dmdata/DAMENG/dm.ini.bak
vi /data/dmdba/dmdata/DAMENG/dm.ini
ARCH_INI = 1 #打开归档配置
ALTER_MODE_STATUS = 0 #不允许用户直接通过 SQL 语句修改服务器模式
4.5 配置数据库归档dmarch.ini
配置 dmarch.ini
vi /data/dmdba/dmdata/DAMENG/dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/dmdba/dmdata/dmarch #本地归档文件路径
ARCH_FILE_SIZE = 2048 #本地单个归档文件最大值,单位:MB
ARCH_SPACE_LIMIT = 102400 #本地归档文件总大小,0 表示无限制
5 启停数据库+再次配置归档
5.1 启停数据库
# 正常启动、正常退出
# 启动 RAFT_01 到 Open 状态。
su - dmdba
cd /data/dmdba/dmdbms/bin
./dmserver /data/dmdba/dmdata/DAMENG/dm.ini
# 确认 RAFT_01 可以正常启动后(SYSTEM IS READY),
# 直接执行 exit 命令正常退出 RAFT_01 即可。
5.2 再次配置归档dmarch.ini
# 再次修改归档
vi /data/dmdba/dmdata/DAMENG/dmarch.ini
XMAL_HB_INTERVAL = 60 #副本通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 3000 #选举超时时间,三个库设置不同以尽快选出主库
XMAL_IP = 192.168.100.190 #本地 XMAL 通信 IP
XMAL_PORT = 10007 #本地 XMAL 通信端口
RAFT_SELF_ID = 1 #当前副本号
[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #Raft 归档
ARCH_DEST = RAFT_02 #归档目标实例名
ARCH_DEST_IP = 192.168.100.191 #归档目标 XMAL 通信 IP
ARCH_DEST_PORT = 10007 #归档目标 XMAL 通信端口
ARCH_DEST_ID = 2 #归档目标副本号
[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #Raft 归档
ARCH_DEST = RAFT_03 #归档目标实例名
ARCH_DEST_IP = 192.168.100.192 #归档目标 XMAL 通信 IP
ARCH_DEST_PORT = 10007 #归档目标 XMAL 通信端口
ARCH_DEST_ID = 3 #归档目标副本号
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/dmdba/dmdata/dmarch #本地归档文件路径
ARCH_FILE_SIZE = 2048 #本地单个归档文件最大值,单位:MB
ARCH_SPACE_LIMIT = 102400 #本地归档文件总大小,0 表示无限制
6 --190节点备份后拷贝到191,192节点
# 脱机备份
# 正常退出 RAFT_01 后,使用 dmrman 工具对 RAFT_01 执行脱机备份。
./dmrman CTLSTMT="BACKUP DATABASE '/data/dmdba/dmdata/DAMENG/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/data/dmdba/dmdata/BACKUP_FILE_01' COMPRESSED PARALLEL 8"
# 将dmdata目录打压缩包
cd /data/dmdba
zip -r dmdata.zip dmdata
# 将压缩文件分别拷贝到191节点和192节点
scp dmdata.zip dmdba@192.168.100.191:/data/dmdba/
scp dmdata.zip dmdba@192.168.100.192:/data/dmdba/
7 --191节点 数据库配置
su - dmdba
cd /data/dmdba
unzip dmdata.zip
# 还原数据库
cd /data/dmdba/dmdbms/bin
./dmrman CTLSTMT="RESTORE DATABASE '/data/dmdba/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/data/dmdba/dmdata/BACKUP_FILE_01'"
./dmrman CTLSTMT="RECOVER DATABASE '/data/dmdba/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/data/dmdba/dmdata/BACKUP_FILE_01'"
## 更新数据库魔数
./dmrman CTLSTMT="RECOVER DATABASE '/data/dmdba/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC"
# 配置 dm.ini
vi /data/dmdba/dmdata/DAMENG/dm.ini
INSTANCE_NAME=RAFT_02
# 配置 dmarch.ini
vi /data/dmdba/dmdata/DAMENG/dmarch.ini
XMAL_HB_INTERVAL = 60 #副本通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 6000 #选举超时时间,三个库设置不同以尽快选出主库
XMAL_IP = 192.168.100.191 #本地 XMAL 通信 IP
XMAL_PORT = 10007 #本地 XMAL 通信端口
RAFT_SELF_ID = 2 #当前副本号
[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #Raft 归档
ARCH_DEST = RAFT_01 #归档目标实例名
ARCH_DEST_IP = 192.168.100.190 #归档目标 XMAL 通信 IP
ARCH_DEST_PORT = 10007 #归档目标 XMAL 通信端口
ARCH_DEST_ID = 1 #归档目标副本号
[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #Raft 归档
ARCH_DEST = RAFT_03 #归档目标实例名
ARCH_DEST_IP = 192.168.100.192 #归档目标 XMAL 通信 IP
ARCH_DEST_PORT = 10007 #归档目标 XMAL 通信端口
ARCH_DEST_ID = 3 #归档目标副本号
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/dmdba/dmdata/dmarch #本地归档文件路径
ARCH_FILE_SIZE = 2048 #本地单个归档文件最大值,单位:MB
ARCH_SPACE_LIMIT = 102400 #本地归档文件总大小,0 表示无限制
8 --192节点 数据库配置
su - dmdba
cd /data/dmdba/
unzip dmdata.zip
# 还原数据库
./dmrman CTLSTMT="RESTORE DATABASE '/data/dmdba/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/data/dmdba/dmdata/BACKUP_FILE_01'"
./dmrman CTLSTMT="RECOVER DATABASE '/data/dmdba/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/data/dmdba/dmdata/BACKUP_FILE_01'"
# 更新数据库魔数
./dmrman CTLSTMT="RECOVER DATABASE '/data/dmdba/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC"
# 配置 dm.ini
vi /data/dmdba/dmdata/DAMENG/dm.ini
INSTANCE=RAFT_03
# 配置 dmarch.ini
vi /data/dmdba/dmdata/DAMENG/dmarch.ini
XMAL_HB_INTERVAL = 60 #副本通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 9000 #选举超时时间,三个库设置不同以尽快选出主库
XMAL_IP = 192.168.100.192 #本地 XMAL 通信 IP
XMAL_PORT = 10007 #本地 XMAL 通信端口
RAFT_SELF_ID = 3 #当前副本号
[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #Raft 归档
ARCH_DEST = RAFT_01 #归档目标实例名
ARCH_DEST_IP = 192.168.100.190 #归档目标 XMAL 通信 IP
ARCH_DEST_PORT = 10007 #归档目标 XMAL 通信端口
ARCH_DEST_ID = 1 #归档目标副本号
[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #Raft 归档
ARCH_DEST = RAFT_02 #归档目标实例名
ARCH_DEST_IP = 192.168.100.191 #归档目标 XMAL 通信 IP
ARCH_DEST_PORT = 10007 #归档目标 XMAL 通信端口
ARCH_DEST_ID = 2 #归档目标副本号
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/dmdba/dmdata/dmarch #本地归档文件路径
ARCH_FILE_SIZE = 2048 #本地单个归档文件最大值,单位:MB
ARCH_SPACE_LIMIT = 102400 #本地归档文件总大小,0 表示无限制
9 启动DM9 AFC自治容灾集群
# 启动数据库
# 190节点 启动 RAFT_01:
su - dmdba
cd /data/dmdba/dmdbms/bin
./dmserver /data/dmdba/dmdata/DAMENG/dm.ini mount
# 191节点 启动 RAFT_02:
su - dmdba
cd /data/dmdba/dmdbms/bin
./dmserver /data/dmdba/dmdata/DAMENG/dm.ini mount
# 192节点 启动 RAFT_03:
su - dmdba
cd /data/dmdba/dmdbms/bin
./dmserver /data/dmdba/dmdata/DAMENG/dm.ini mount
# 在主库前台日志窗口执行命令,关闭集群实例
exit all
10 注册服务与后台启动集群
# 190节点,191节点,192节点命令相同
# 使用root用户注册服务
cd /data/dmdba/dmdbms/script/root
./dm_service_installer.sh -t dmserver -p 1577 -dm_ini /data/dmdba/dmdata/DAMENG/dm.ini -m mount
# 启动各个节点服务
/data/dmdba/dmdbms/bin/DmService1577 start
# 关闭集群后台服务
# 向主库发送 SIGUSR1(kill -10)信号
# 效果和在主库上执行 exit all 命令相同。
kill -10 dmserver的pid # 整个集群会自动退出
11 查询集群状态
-- 在主库查询备库归档是否有效
SELECT * FROM V$ARCH_STATUS;
-- 检查主库最近一次向备库发送日志的统计信息
SELECT ARCH_DEST,LAST_END_TIME,LAST_SEND_LSN,MAX_SEND_LSN,* FROM V$ARCH_SEND_INFO;
12 主备手动切换
-- 主库执行:
-- 功能说明:
-- 连接主库执行,挂起主库除当前会话外的所有工作线程,用于禁止主库产生新日志,在主库成功切换为备库后,被挂起的工作线程会被自动唤醒。此过程执行成功之后会强制将当前会话设置为只读属性,后续当前会话仅允许执行只读操作。
SP_RAFT_SUSPEND_THREAD()
-- 备库执行:
-- 功能说明:
-- 连接待切换的备库执行,将备库手动切换为主库。
SP_RAFT_SWITCHOVER()
--举例说明:
--备库手动切换为主库流程如下:
--1)首先连接主库执行挂起:
SP_RAFT_SUSPEND_THREAD();
--2)连接备库执行手动切换:
SP_RAFT_SWITCHOVER();
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)