DM8数据库读写分离集群安装部署
大家想学习达梦数据库或者解决报错问题,可以去达梦数据库社区(https://eco.dameng.com)
文章目录
- DM8数据库读写分离集群安装部署
-
- [1 前言](#1 前言)
- [2 系统设计规划](#2 系统设计规划)
-
- [2.1 硬件配置](#2.1 硬件配置)
- [2.2 端口配置](#2.2 端口配置)
- [2.3 目录规划](#2.3 目录规划)
- [3 数据库部署](#3 数据库部署)
-
- [3.1 操作系统配置](#3.1 操作系统配置)
-
- [3.1.1 配置时间同步](#3.1.1 配置时间同步)
- [3.1.2 防火墙设置](#3.1.2 防火墙设置)
- [3.1.3 SELINUX 设置](#3.1.3 SELINUX 设置)
- [3.1.4 磁盘挂载(LVM)](#3.1.4 磁盘挂载(LVM))
- [3.1.5 磁盘调度算法](#3.1.5 磁盘调度算法)
- [3.1.6 关闭透明大页(THP)](#3.1.6 关闭透明大页(THP))
- [3.1.7 内核参数调整](#3.1.7 内核参数调整)
- [3.1.8 修改资源限制(limits.conf)](#3.1.8 修改资源限制(limits.conf))
- [3.1.9 调整 system.conf](#3.1.9 调整 system.conf)
- [3.1.10 创建用户与目录](#3.1.10 创建用户与目录)
- [3.1.11 RemoveIPC 参数设置](#3.1.11 RemoveIPC 参数设置)
- [3.1.12 调整 login(PAM)](#3.1.12 调整 login(PAM))
- [3.2 数据库安装](#3.2 数据库安装)
- [3.3 配置 node1 机器](#3.3 配置 node1 机器)
-
- [3.3.1 初始化实例并备份数据](#3.3.1 初始化实例并备份数据)
- [3.3.2 dmarch.ini](#3.3.2 dmarch.ini)
- [3.3.3 dmmal.ini](#3.3.3 dmmal.ini)
- [3.3.4 dmwatcher.ini](#3.3.4 dmwatcher.ini)
- [3.3.5 拷贝备份文件](#3.3.5 拷贝备份文件)
- [3.3.6 注册服务](#3.3.6 注册服务)
- [3.4 配置 node2 机器](#3.4 配置 node2 机器)
-
- [3.4.1 初始化实例并恢复数据](#3.4.1 初始化实例并恢复数据)
- [3.4.2 dmarch.ini(备库)](#3.4.2 dmarch.ini(备库))
- [3.4.3 dmmal.ini(同 node1)](#3.4.3 dmmal.ini(同 node1))
- [3.4.4 dmwatcher.ini(同 node1)](#3.4.4 dmwatcher.ini(同 node1))
- [3.4.5 注册服务](#3.4.5 注册服务)
- [3.5 配置 node3 机器](#3.5 配置 node3 机器)
- [3.6 启动数据库并修改参数](#3.6 启动数据库并修改参数)
-
- [3.6.1 node1(主库)](#3.6.1 node1(主库))
- [3.6.2 node2(备库)](#3.6.2 node2(备库))
- [3.6.3 node3(备库)](#3.6.3 node3(备库))
- [3.6.4 启动守护进程](#3.6.4 启动守护进程)
- [3.7 配置确认监视器](#3.7 配置确认监视器)
-
- [3.7.1 dmmonitor.ini(确认模式)](#3.7.1 dmmonitor.ini(确认模式))
- [3.7.2 dmmonitor_manual.ini(非确认/手动切换)](#3.7.2 dmmonitor_manual.ini(非确认/手动切换))
- [4 dm_svc.conf 配置(客户端)](#4 dm_svc.conf 配置(客户端))
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 配置时间同步
检查并确保时间配置正常:
bash
ll /etc/localtime
date
hwclock --show
若时区非 Asia/Shanghai,修正时区:
bash
timedatectl set-timezone 'Asia/Shanghai'
集群各节点应保持时间同步,使用 chronyd 服务:
bash
yum install -y chrony
systemctl disable ntpd && systemctl stop ntpd
注意:CentOS/RedHat 环境下,
chronyd与ntpd冲突,只能二选一,推荐chronyd。
方式一:对接外部时间服务器(192.168.100.5)
bash
vim /etc/chrony.conf
ini
server 192.168.100.5 prefer
maxdistance 1800.0
方式二:集群自建时间服务器(以 192.168.100.1 为例)
- 主节点配置:
ini
allow all
local stratum 10
- 其他节点配置:
ini
server 192.168.100.1 prefer
maxdistance 1800.0
启动并开机自启:
bash
systemctl start chronyd
systemctl enable chronyd
systemctl status chronyd
检查时间同步:
bash
chronyc sources -v
同步系统时间到硬件:
bash
hwclock -w
3.1.2 防火墙设置
关闭防火墙
bash
systemctl status firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld
开放端口
bash
firewall-cmd --zone=public --permanent --add-port=5236/tcp
firewall-cmd --reload
firewall-cmd --list-port
3.1.3 SELINUX 设置
- 查看状态:
bash
getenforce
- 临时关闭:
bash
setenforce 0
- 永久关闭:
bash
vim /etc/selinux/config
ini
SELINUX=disabled
修改后重启:reboot
3.1.4 磁盘挂载(LVM)
bash
# 创建物理卷
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
ini
UUID=f68eca84-e311-4ad1-99de-a16f061c460c /data xfs defaults 0 0
3.1.5 磁盘调度算法
达梦建议设为 deadline;NVMe 设备默认 none,无需设置。
查看:
bash
cat /sys/block/sda/queue/scheduler
临时修改:
bash
echo deadline > /sys/block/vdc/queue/scheduler
永久修改(内核参数):
bash
vim /boot/grub/menu.lst
在内核行添加:
ini
elevator=deadline
3.1.6 关闭透明大页(THP)
创建系统服务:
bash
vim /etc/systemd/system/disable-thp.service
ini
[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
生效:
bash
systemctl daemon-reload
systemctl start disable-thp
systemctl enable disable-thp
3.1.7 内核参数调整
bash
vim /etc/sysctl.conf
ini
vm.overcommit_memory = 0
生效:
bash
sysctl -p
参数说明:
- 0:内核校验内存充足才允许申请
- 1:允许分配全部物理内存
- 2:允许超物理内存+交换空间总和分配
3.1.8 修改资源限制(limits.conf)
bash
vim /etc/security/limits.conf
ini
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
bash
vim /etc/systemd/system.conf
ini
DefaultLimitNOFILE=65536
DefaultLimitNPROC=10240
3.1.10 创建用户与目录
bash
# 创建用户组与用户
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 参数设置
bash
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)
bash
vim /etc/pam.d/login
ini
session required /lib64/security/pam_limits.so
session required pam_limits.so
3.2 数据库安装
挂载镜像:
bash
mount dm8_20260317_x86_kylin10_sp3_64.iso /mnt/
安装参考:《DM 数据库单节点安装部署.docx》
安装完成后,root 执行脚本:
bash
/home/dmdba/dmdbms/script/root/root_installer.sh
3.3 配置 node1 机器
3.3.1 初始化实例并备份数据
初始化实例
bash
su - dmdba
cd /home/dmdba/dmdbms/bin
./dminit PATH=/dmdata/data INSTANCE_NAME=GRP1_RWW_01 SYSDBA_PWD='Linux123!@#' SYSAUDITOR_PWD='Linux123!@#'
前台启动
bash
./dmserver /dmdata/data/DAMENG/dm.ini -NOCONSOLE &
登录 disql
bash
disql SYSDBA/'"Linux123!@#"'@127.0.0.1:5236
开启归档
sql
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/dmdata/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';
ALTER DATABASE OPEN;
全库备份
sql
BACKUP DATABASE BACKUPSET '/dmdata/dmbak/';
修改 dm.ini(动态参数)
sql
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
bash
vim /dmdata/data/DAMENG/dmarch.ini
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
bash
vim /dmdata/data/DAMENG/dmmal.ini
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
bash
vim /dmdata/data/DAMENG/dmwatcher.ini
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 拷贝备份文件
bash
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 注册服务
bash
# 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 初始化实例并恢复数据
初始化
bash
su - dmdba
cd /home/dmdba/dmdbms/bin
./dminit PATH=/dmdata/data INSTANCE_NAME=GRP1_RWW_02 SYSDBA_PWD='Linux123!@#' SYSAUDITOR_PWD='Linux123!@#'
恢复
bash
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(备库)
bash
vim /dmdata/data/DAMENG/dmarch.ini
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 注册服务
bash
# 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(主库)
bash
/home/dmdba/dmdbms/bin/DmServiceGRP1_RWW_01 start
disql SYSDBA/'"Linux123!@#"'@127.0.0.1:5236
sql
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(备库)
bash
/home/dmdba/dmdbms/bin/DmServiceGRP1_RWW_02 start
disql SYSDBA/'"Linux123!@#"'@127.0.0.1:5236
sql
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(备库)
bash
/home/dmdba/dmdbms/bin/DmServiceGRP1_RWW_03 start
disql SYSDBA/'"Linux123!@#"'@127.0.0.1:5236
sql
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);
查看状态
sql
select INSTANCE_NAME,STATUS$,MODE$ from v$instance;
3.6.4 启动守护进程
bash
su - dmdba
cd /home/dmdba/dmdbms/bin
./DmWatcherServiceWatcher start
3.7 配置确认监视器
3.7.1 dmmonitor.ini(确认模式)
bash
vim /home/dmdba/dmdbms/bin/dmmonitor.ini
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
注册并启动:
bash
# 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(非确认/手动切换)
bash
vim /home/dmdba/dmdbms/bin/dmmonitor_manual.ini
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
前台运行:
bash
./dmmonitor dmmonitor_manual.ini
常用命令:
tip
show
choose switchover GRP1
switchover GRP1.GRP1_RWW_02
4 dm_svc.conf 配置(客户端)
文件放在客户端,实现读写分离、负载均衡、高可用。
ini
# 全局配置
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)