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

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 环境下,chronydntpd 冲突,只能二选一,推荐 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 设置
  1. 查看状态:
bash 复制代码
getenforce
  1. 临时关闭:
bash 复制代码
setenforce 0
  1. 永久关闭:
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)
相关推荐
IT研究所1 小时前
从系统选型到ITR智能服务流落地的关键一步
大数据·运维·服务器·数据库·人工智能·科技·自动化
wang3zc1 小时前
CSS如何让最后一行项目左对齐_利用flex布局配合伪元素空项填充
jvm·数据库·python
2303_821287381 小时前
如何用 Chrome 的 Rendering 面板监控页面的重排频率
jvm·数据库·python
m0_631529821 小时前
C#怎么解析XML文件 C#如何用XmlDocument和LINQ to XML读写XML数据【基础】
jvm·数据库·python
六月雨滴1 小时前
Oracle 数据库用户管理
数据库·oracle·dba
Jetev1 小时前
如何配置MongoDB驱动以支持快速的主备切换感知_SRV记录与拓扑监控
jvm·数据库·python
m0_631529821 小时前
golang如何实现目录大小统计_golang目录大小统计实现方案
jvm·数据库·python
运维行者_1 小时前
理解应用性能监控
大数据·服务器·网络·数据库·人工智能·网络协议·安全
2301_769340671 小时前
Golang怎么限制请求Body大小_Golang如何防止客户端发送过大的请求体【避坑】
jvm·数据库·python