DM8数据库读写分离集群安装部署

大家想学习达梦数据库或者解决报错问题,可以去达梦数据库社区https://eco.dameng.com

1 前言

达梦数据库管理系统(以下简称 DM)是基于客户/服务器方式的数据库管理系统,可以安装在多种计算机操作系统平台上,本文主要介绍 DM 数据库读写分离集群的安装部署流程。

DM 安装成功后,可在安装目录的 doc 子目录下找到 DM 的其他用户手册和技术文档。

  • DM 标准版:包含基础数据库功能,资源受限,无高级集群与安全特性,性价比高、可升级。
  • DM 企业版:功能完整、无资源限制,支持各类集群、高级特性,适配各类企业业务场景。
  • DM 安全版:包含企业版全部能力,强化安全机制,支持四权分立,高安全等级、适配敏感业务。

2 系统设计规划

2.1 硬件配置

本次部署的数据库节点硬件配置如下:

节点IP 主机名 操作系统 CPU 内存 硬盘
192.168.157.141~143 node1~3 Kylin V10 2 8GB 40GB

2.2 端口配置

数据库使用的默认端口号如下,如冲突可调整:

参数 node1 node2 node3
实例端口 5236 5236 5236
MAL 端口 5336 5336 5336
MAL 守护进程端口 5436 5436 5436
守护进程端口 5536 5536 5536
OGUID 45331 45331 45331
守护组 GRP1 GRP1 GRP1
归档上限(MB) 51200 51200 51200

2.3 目录规划

软件安装使用以下路径,也可按需调整:

目录名称 所属用户 目录路径 权限
数据库软件目录 dmdba /home/dmdba/dmdbms 755
数据库实例目录 dmdba /dmdata/data 755
数据库备份目录 dmdba /dmdata/dmbak 755
数据库归档目录 dmdba /dmdata/arch 755

3 数据库部署

3.1 操作系统配置

3.1.1 配置时间同步

检查并确保时间配置正常:

ll /etc/localtime
date
hwclock --show

若时区非 Asia/Shanghai,修正时区:

timedatectl set-timezone 'Asia/Shanghai'

集群各节点应保持时间同步,使用 chronyd 服务:

yum install -y chrony
systemctl disable ntpd && systemctl stop ntpd

注意:CentOS/RedHat 环境下,chronydntpd 冲突,只能二选一,推荐 chronyd

方式一:对接外部时间服务器(192.168.100.5)

vim /etc/chrony.conf
server 192.168.100.5 prefer
maxdistance 1800.0

方式二:集群自建时间服务器(以 192.168.100.1 为例)

  • 主节点配置:
allow all
local stratum 10
  • 其他节点配置:
server 192.168.100.1 prefer
maxdistance 1800.0

启动并开机自启:

systemctl start chronyd
systemctl enable chronyd
systemctl status chronyd

检查时间同步:

chronyc sources -v

同步系统时间到硬件:

hwclock -w
3.1.2 防火墙设置

关闭防火墙

systemctl status firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld

开放端口

firewall-cmd --zone=public --permanent --add-port=5236/tcp
firewall-cmd --reload
firewall-cmd --list-port
3.1.3 SELINUX 设置
  1. 查看状态:
getenforce
  1. 临时关闭:
setenforce 0
  1. 永久关闭:
vim /etc/selinux/config
SELINUX=disabled

修改后重启:reboot

3.1.4 磁盘挂载(LVM)
# 创建物理卷
pvcreate /dev/sdb

# 创建卷组
vgcreate datavg /dev/sdb

# 创建逻辑卷
lvcreate -l 100%VG -n datalv datavg

# 格式化
mkfs.xfs /dev/datavg/datalv

# 获取 UUID
blkid

# 写入 fstab
vim /etc/fstab
UUID=f68eca84-e311-4ad1-99de-a16f061c460c  /data xfs defaults 0 0
3.1.5 磁盘调度算法

达梦建议设为 deadline;NVMe 设备默认 none,无需设置。

查看:

cat /sys/block/sda/queue/scheduler

临时修改:

echo deadline > /sys/block/vdc/queue/scheduler

永久修改(内核参数):

vim /boot/grub/menu.lst

在内核行添加:

elevator=deadline
3.1.6 关闭透明大页(THP)

创建系统服务:

vim /etc/systemd/system/disable-thp.service
[Unit]
Description=Disable Transparent Huge Pages (THP)

[Service]
Type=simple
ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag"

[Install]
WantedBy=multi-user.target

生效:

systemctl daemon-reload
systemctl start disable-thp
systemctl enable disable-thp
3.1.7 内核参数调整
vim /etc/sysctl.conf
vm.overcommit_memory = 0

生效:

sysctl -p

参数说明:

  • 0:内核校验内存充足才允许申请
  • 1:允许分配全部物理内存
  • 2:允许超物理内存+交换空间总和分配
3.1.8 修改资源限制(limits.conf)
vim /etc/security/limits.conf
dmdba soft nice 0
dmdba hard nice 0
dmdba soft as unlimited
dmdba hard as unlimited
dmdba soft fsize unlimited
dmdba hard fsize unlimited
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft data unlimited
dmdba hard data unlimited
3.1.9 调整 system.conf
vim /etc/systemd/system.conf
DefaultLimitNOFILE=65536
DefaultLimitNPROC=10240
3.1.10 创建用户与目录
# 创建用户组与用户
groupadd dinstall -g 2001
useradd -G dinstall -m -d /home/dmdba -s /bin/bash -u 2001 dmdba
passwd dmdba

# 密码永不过期
chage -m 0 -M 99999 -E -1 dmdba

# 创建目录
mkdir -p /dmdata/data
mkdir -p /dmdata/arch
mkdir -p /dmdata/dmbak

# 授权
chown -R dmdba:dinstall /dmdata/*
chmod -R 755 /dmdata/*
3.1.11 RemoveIPC 参数设置
echo "RemoveIPC=no" >> /etc/systemd/logind.conf
echo "RemoveIPC=no" >> /usr/lib/systemd/system/systemd-logind.service

systemctl daemon-reload
systemctl stop systemd-logind
systemctl start systemd-logind
3.1.12 调整 login(PAM)
vim /etc/pam.d/login
session  required  /lib64/security/pam_limits.so
session  required  pam_limits.so

3.2 数据库安装

挂载镜像:

mount dm8_20260317_x86_kylin10_sp3_64.iso /mnt/

安装参考:《DM 数据库单节点安装部署.docx》

安装完成后,root 执行脚本:

/home/dmdba/dmdbms/script/root/root_installer.sh

3.3 配置 node1 机器

3.3.1 初始化实例并备份数据

初始化实例

su - dmdba
cd /home/dmdba/dmdbms/bin

./dminit PATH=/dmdata/data INSTANCE_NAME=GRP1_RWW_01 SYSDBA_PWD='Linux123!@#' SYSAUDITOR_PWD='Linux123!@#'

前台启动

./dmserver /dmdata/data/DAMENG/dm.ini -NOCONSOLE &

登录 disql

disql SYSDBA/'"Linux123!@#"'@127.0.0.1:5236

开启归档

ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/dmdata/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';
ALTER DATABASE OPEN;

全库备份

BACKUP DATABASE BACKUPSET '/dmdata/dmbak/';

修改 dm.ini(动态参数)

SP_SET_PARA_VALUE(2,'PORT_NUM',5236);
SP_SET_PARA_VALUE(2,'DW_INACTIVE_INTERVAL',60);
SP_SET_PARA_VALUE(2,'ALTER_MODE_STATUS',0);
SP_SET_PARA_VALUE(2,'ENABLE_OFFLINE_TS',2);
SP_SET_PARA_VALUE(2,'MAL_INI',1);
SP_SET_PARA_VALUE(2,'RLOG_SEND_APPLY_MON',64);

关闭前台实例后,配置集群文件。

3.3.2 dmarch.ini
vim /dmdata/data/DAMENG/dmarch.ini
ARCH_WAIT_APPLY = 0

[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/arch/
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200

[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RWW_02

[ARCHIVE_REALTIME2]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RWW_03
3.3.3 dmmal.ini
vim /dmdata/data/DAMENG/dmmal.ini
MAL_CHECK_INTERVAL = 10
MAL_CONN_FAIL_INTERVAL = 10
MAL_TEMP_PATH = /home/dmdba/dmdbms/malpath/
MAL_BUF_SIZE = 512
MAL_SYS_BUF_SIZE = 2048
MAL_COMPRESS_LEVEL = 0

[MAL_INST1]
MAL_INST_NAME = GRP1_RWW_01
MAL_HOST = 192.168.157.141
MAL_PORT = 5336
MAL_INST_HOST = 192.168.157.141
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536

[MAL_INST2]
MAL_INST_NAME = GRP1_RWW_02
MAL_HOST = 192.168.157.142
MAL_PORT = 5336
MAL_INST_HOST = 192.168.157.142
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536

[MAL_INST3]
MAL_INST_NAME = GRP1_RWW_03
MAL_HOST = 192.168.157.143
MAL_PORT = 5336
MAL_INST_HOST = 192.168.157.143
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
3.3.4 dmwatcher.ini
vim /dmdata/data/DAMENG/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 20
INST_ERROR_TIME = 20
INST_RECOVER_TIME = 60
INST_OGUID = 45331
INST_INI = /dmdata/data/DAMENG/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
3.3.5 拷贝备份文件
su - dmdba
scp -r /dmdata/dmbak/ dmdba@192.168.157.142:/dmdata/
scp -r /dmdata/dmbak/ dmdba@192.168.157.143:/dmdata/
3.3.6 注册服务
# root
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p GRP1_RWW_01 -dm_ini /dmdata/data/DAMENG/dm.ini -m mount

/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdata/data/DAMENG/dmwatcher.ini

3.4 配置 node2 机器

3.4.1 初始化实例并恢复数据

初始化

su - dmdba
cd /home/dmdba/dmdbms/bin

./dminit PATH=/dmdata/data INSTANCE_NAME=GRP1_RWW_02 SYSDBA_PWD='Linux123!@#' SYSAUDITOR_PWD='Linux123!@#'

恢复

dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/'"
dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/'"
dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' UPDATE DB_MAGIC"
3.4.2 dmarch.ini(备库)
vim /dmdata/data/DAMENG/dmarch.ini
ARCH_WAIT_APPLY = 0

[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/arch/
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200

[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RWW_01

[ARCHIVE_REALTIME2]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RWW_03
3.4.3 dmmal.ini(同 node1)

直接复制 node1 的 dmmal.ini,内容完全一致。

3.4.4 dmwatcher.ini(同 node1)

内容同 node1。

3.4.5 注册服务
# root
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p GRP1_RWW_02 -dm_ini /dmdata/data/DAMENG/dm.ini -m mount

/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdata/data/DAMENG/dmwatcher.ini

3.5 配置 node3 机器

流程同 node2,仅实例名改为 GRP1_RWW_03

3.6 启动数据库并修改参数

3.6.1 node1(主库)
/home/dmdba/dmdbms/bin/DmServiceGRP1_RWW_01 start

disql SYSDBA/'"Linux123!@#"'@127.0.0.1:5236
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_OGUID(45331);
ALTER DATABASE PRIMARY;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
3.6.2 node2(备库)
/home/dmdba/dmdbms/bin/DmServiceGRP1_RWW_02 start

disql SYSDBA/'"Linux123!@#"'@127.0.0.1:5236
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_OGUID(45331);
ALTER DATABASE STANDBY;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
3.6.3 node3(备库)
/home/dmdba/dmdbms/bin/DmServiceGRP1_RWW_03 start

disql SYSDBA/'"Linux123!@#"'@127.0.0.1:5236
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_OGUID(45331);
ALTER DATABASE STANDBY;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

查看状态

select INSTANCE_NAME,STATUS$,MODE$ from v$instance;
3.6.4 启动守护进程
su - dmdba
cd /home/dmdba/dmdbms/bin
./DmWatcherServiceWatcher start

3.7 配置确认监视器

3.7.1 dmmonitor.ini(确认模式)
vim /home/dmdba/dmdbms/bin/dmmonitor.ini
MON_DW_CONFIRM = 1
MON_LOG_PATH = ../log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 512
MON_LOG_SPACE_LIMIT = 2048

[GRP1]
MON_INST_OGUID = 45331
MON_DW_IP = 192.168.157.141:5436
MON_DW_IP = 192.168.157.142:5436
MON_DW_IP = 192.168.157.143:5436

注册并启动:

# root
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /home/dmdba/dmdbms/bin/dmmonitor.ini

# dmdba
/home/dmdba/dmdbms/bin/DmMonitorServiceMonitor start
3.7.2 dmmonitor_manual.ini(非确认/手动切换)
vim /home/dmdba/dmdbms/bin/dmmonitor_manual.ini
MON_DW_CONFIRM = 0
MON_LOG_PATH = ../log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 512
MON_LOG_SPACE_LIMIT = 2048

[GRP1]
MON_INST_OGUID = 45331
MON_DW_IP = 192.168.157.141:5436
MON_DW_IP = 192.168.157.142:5436
MON_DW_IP = 192.168.157.143:5436

前台运行:

./dmmonitor dmmonitor_manual.ini

常用命令:

tip
show
choose switchover GRP1
switchover GRP1.GRP1_RWW_02

4 dm_svc.conf 配置(客户端)

文件放在客户端,实现读写分离、负载均衡、高可用。

# 全局配置
TIME_ZONE=(480)
LANGUAGE=(cn)

DMRW=(192.168.157.141:5236,192.168.157.142:5236,192.168.157.143:5236)

# 服务配置
[DMRW]
LOGIN_MODE=(1)
RW_SEPARATE=(1)
RW_PERCENT=(30)
SWITCH_TIMES=(60)
SWITCH_INTERVAL=(1000)
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐