主备集群为最基础的高可用架构,只有主库对外提供数据库服务,备库仅做备份,根据实际要求及网络条件,可以选择配置为自动切换或者手动切换模式。
1 手动切换模式
1.1部署规划
1主1备,2节点主备集群部署规划
IP规划:
| 主机名 | 服务ip | 心跳ip | 数据库名 | 实例名 |
|---|---|---|---|---|
| dmdb01 | 192.168.10.100 | 10.0.0.100 | dmdb | dw1 |
| dmdb02 | 192.168.10.101 | 10.0.0.101 | dmdb | dw2 |
端口规划:
| 实例名 | 实例端口 | MAL 系统监听 TCP 连接的端口 | 实例本地的守护进程监听 TCP 连接的端口 | 实例监听守护进程 TCP 连接的端口 |
|---|---|---|---|---|
| dw1 | 5236 | 7336 | 7436 | 7536 |
| dw2 | 5236 | 7336 | 7436 | 7536 |
本地存储LVM磁盘规划:(按实际需求调整磁盘空间)
| 磁盘 | LVM磁盘名/用途 |
|---|---|
| /dev/sdc(100G) | /dev/dmappvg/dmapplv (数据库安装磁盘) |
| /dev/sde(500G) | /dev/dmdatavg/dmdatalv (数据磁盘) |
| /dev/sdf(500G) | /dev/dmbakvg/dmbaklv (备份磁盘) |
目录规划:(在对应服务器上创建目录owner为dmdba组为dinstall)
| 目录名 | 目录位置 |
|---|---|
| 数据库软件安装目录 | /home/dmdba/dmdbms |
| 实例安装目录 | /dmdata/ |
| 归档日志存放目录 | /dmdata/arch |
| 备份文件存放目录 | /dmdata/dmbak/ |
1.2 数据库软件安装
参考单机安装文档第2节:《DM8单机部署》https://www.modb.pro/db/2067442898636447744
1.3主备集群配置
1.3.1初始化实例
3个节点完成实例初始化
执行以下命令
dminit path=/dmdata page_size=32 extent_size=32 charset=1 log_size=2048 db_name=dmdb instance_name=dmdb SYSDBA_PWD="Hn@dameng123" SYSAUDITOR_PWD="Hn@dameng123" SYSAUDITOR_PWD="Hn@d****g123"
--安全版需要SYSSSO_PWD="Hn@d****g123" 参数
以主机dmdb01为主库,启动实例
dmserver /dmdata/dmdb/dm.ini
出现system is ready后输入exit停止数据库。
1.3.2脱机备份数据库
在主机dmdb01上执行以下命令,确认主库 dmap 服务已启动:
ps -ef|grep dmap

若未启动,则先启动 DMAP 服务,dmdba 到安装目录的 bin 下执行以下命令:
./DmAPService start
dmdba用户 启动dmrman工具
dmrman use_ap=2
执行 backup 全库:
backup database '/dmdata/dmdb/dm.ini' backupset '/home/dmdba/bakfull';
1.3.3备份还原备库
将备份的文件/home/dmdba/bakfull拷贝到备库服务器上。
在主机dmdb02上使用 dmrman 工具还原备库,dmdba 用户执行:
dmrman
进入dmrman工具交互界面执行 restore:
restore database '/dmdata/dmdb/dm.ini' from backupset '/home/dmdba/bakfull';
完成后执行 recover:
recover database '/dmdata/dmdb/dm.ini' from backupset '/home/dmdba/bakfull';
最后执行 recover update db_magic。
recover database '/dmdata/dmdb/dm.ini' update db_magic;
1.3.4修改dm.ini参数
所有节点都要修改
执行以下命令:
vi /dmdata/dmdb/dm.ini
主库dmdb01上修改以下参数值:
INSTANCE_NAME = dw1
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
备库dmdb02上修改以下参数值:
INSTANCE_NAME = dw2
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
1.3.5配置归档配置文件 dmarch.ini
在实例目录下新建文件 dmarch.ini,执行以下命令:
vi /dmdata/dmdb/dmarch.ini
主库dmdb01上添加以下内容:
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = dw2
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
备库Dmdb02上添加以下内容:
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = dw1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
1.3.6配置MAL系统配置文件 dmmal.ini
在实例目录下新建文件 dmmal.ini,执行以下命令。
vi /dmdata/dmdb/dmmal.ini
主备库3个节点文件内容要相同。
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 15
[MAL_INST1]
MAL_INST_NAME = dw1
MAL_HOST = 10.0.0.100
MAL_PORT = 7336
MAL_INST_HOST = 192.168.10.100
MAL_INST_PORT = 5236
MAL_DW_PORT = 7436
MAL_INST_DW_PORT = 7536
[MAL_INST2]
MAL_INST_NAME = dw2
MAL_HOST = 10.0.0.101
MAL_PORT = 7336
MAL_INST_HOST = 192.168.10.101
MAL_INST_PORT = 5236
MAL_DW_PORT = 7436
MAL_INST_DW_PORT = 7536
1.3.7配置守护进程配置文件 dmwatcher.ini
在实例目录下新建文件 dmwatcher.ini,执行以下命令:
vi /dmdata/dmdb/dmwatcher.ini
主备库2节点文件内容要相同。
[GRP_DW]
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 30
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 20
INST_OGUID = 453331
INST_INI = /dmdata/dmdb/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
以 mount 方式启动数据库实例
使用 dmdba 用户,执行以下命令(主备库都执行):
dmserver /dmdata/dmdb/dm.ini mount
在新的终端使用 disql 工具连接数据库:
disql SYSDBA/'"Hn@d****g123"'
主备库都修改 oguid,执行以下命令:
sp_set_oguid(453331);
如果提示修改不了,使用以下方式修改:
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(453331);
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
主库dmdb01上修改数据库模式为 primary,执行以下命令:
alter database primary;
备库dmdb02上修改数据库模式为 standby,执行以下命令:
alter database standby;
启动守护进程
dmdba 用户下,到数据库安装目录的 bin 下执行以下命令(主备库都执行):
dmwatcher /dmdata/dmdb/dmwatcher.ini
守护进程启动后,会将 Mount 的实例 Open。
启动普通监视器(可以在任意节点配置,一般在备节点配置,手动切换时可以配置验证一下集群状态)
守护进程配置为自动切换时,必须配置确认监视器。在主备服务器以外的服务器上配置(需安装有 DM 数据库软件,且与主备心跳网络端口开放)。见2.1.2章节。
新建普通监视器配置文件 dmmonitor.ini,执行以下命令:
vi /dmdata/dmdb/dmmonitor.ini
添加以下内容:
说明:具体配置时,请把#和#之后的中文内容删除。
MON_DW_CONFIRM = 0 #普通监视器模式
MON_LOG_PATH = /home/dmdba/dmdbms/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60 s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 200 #每个日志文件最大 32 MB
MON_LOG_SPACE_LIMIT = 1024 #不限定日志文件总占用空间
[GRP_DW]
MON_INST_OGUID = 453331 #组 GRP_DW 的唯一 OGUID 值
#以下配置为监视器到组 GRP_DW 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 10.0.0.100:7436
MON_DW_IP = 10.0.0.101:7436
执行以下命令,启动监视器。
dmmonitor /dmdata/dmdb/dmmonitor.ini
启动后输入 show 命令查看集群状态。
1.3.8 配置sql日志
所有节点修改sqllog.ini
到实例路径下
cd /dmdata/dmdb/
vi sqllog.ini
BUF_TOTAL_SIZE = 10240
BUF_SIZE = 1024
BUF_KEEP_CNT = 6
[SLOG_ALL]
FILE_PATH = ../log
PART_STOR = 1
SWITCH_MODE = 2
SWITCH_LIMIT = 512
ASYNC_FLUSH = 1
FILE_NUM = 5
ITEMS = 0
SQL_TRACE_MASK = 2:3:25
MIN_EXEC_TIME = 1500
USER_MODE = 0
USERS =
1.3.9 注册服务
以上启动为前台方式启动,仅用户搭建过程中验证配置。配置没问题后需要将实例,守护进程和确认监视器注册为系统服务。
使用 root 用户,到数据库安装目录的script/root下。
注册守护进程服务(主备库都执行)。
./dm_service_installer.sh -t dmwatcher -p dw -watcher_ini /dmdata/dmdb/dmwatcher.ini
注册数据库实例服务(主备库都执行):
./dm_service_installer.sh -t dmserver -p dw -dm_ini /dmdata/dmdb/dm.ini
以服务方式启动
执行以下命令,启动数据库实例:
systemctl start DmServicedw
执行以下命令,启动守护进程:
systemctl start DmWatcherServicedw
1.3.10 验证主备集群同步状态
监视器查看主备集群状态
集群任意节点,配置普通监视器配置文件 dmmonitor.ini,执行以下命令:
vi /dmdata/dmdb/dmmonitor.ini
添加以下内容:
说明:具体配置时,请把#和#之后的中文内容删除。
MON_DW_Confirm = 0 #普通监视器模式
MON_LOG_PATH = /home/dmdba/dmdbms/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60 s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 200 #每个日志文件最大 32 MB
MON_LOG_SPACE_LIMIT = 1024 #不限定日志文件总占用空间
[GRP_DW]
MON_INST_OGUID = 453331 #组 GRP_DW 的唯一 OGUID 值
#以下配置为监视器到组 GRP_DW 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 10.0.0.100:7436
MON_DW_IP = 10.0.0.101:7436
执行以下命令,启动监视器:
./dmmonitor /dmdata/dmdb/dmmonitor.ini
输入 show 命令查看集群状态:
其中守护进程状态 WSTATUS 为 OPEN,实例状态 ISTATUS 为 OPEN,归档类型 RTYPE 为 TIMELY,归档状态 RSTAT 为VALID。
disql 客户端验证
使用 disql 客户端登录主库,创建测试表,插入数据,执行以下命令:
disql SYSDBA/'"Hn@d****g123"'@192.168.10.100:5236
SQL 提示符下执行以下命令:
create table test(id int);
insert into test values (1);
commit;
使用 disql 客户端登录备库,查询测试表验证,执行以下命令:
disql SYSDBA/'"Hn@d****g123"'@192.168.10.101:5236
SQL 提示符下执行以下命令:
select * from test;
查看数据是否正常同步。
1.3.11参数优化
集群部署完成后,需要优化 dm.ini 参数,主备库都需要修改。参数值优化需要联系达梦获取最新脚本。
重启集群(参数修改后需要重启集群)
严格安装顺序执行
集群重启:
关闭主库守护进程:systemctl stop DmWatcherServicedw
关闭备库守护进程:systemctl stop DmWatcherServicedw
关闭主库实例:systemctl stop DmServicedw
关闭备库实例:systemctl stop DmServicedw
启动主库实例:systemctl start DmServicedw
启动备库实例:systemctl start DmServicedw
启动主库守护进程:systemctl start DmWatcherServicedw
启动备库守护进程:systemctl start DmWatcherServicedw
1.3.12定制备份策略
备份与单机相同,详见《DM8单机部署》https://www.modb.pro/db/2067442898636447744
(主库备份即可)
1.3.13客户端连接集群
客户端主机上需要配置 dm_svc.conf 文件(未安装 DM 数据库的机器新建即可),文件路径:
32 位的 DM 安装在 Win32 操作平台下,此文件位于 %SystemRoot%\system32 目录;
64 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\system32 目录;
32 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\SysWOW64 目录;
在 Linux 平台下,此文件位于/etc 目录。
文件内容:
# 以#开头的行表示是注释
# 全局配置区
DMDW=(192.168.10.100:5236,192.168.10.101:5236)
TIME_ZONE=(+480) #表示+8:00 时区
LOGIN_ENCRYPT=(0)
DIRECT=(Y)
# 服务配置区
[DMDW]
LOGIN_MODE=(1) #只连主库
客户端程序连接数据库时,需要指定 IP 端口处替换为服务名即可,例如:
disql SYSDBA/'"Hn@d****g123"'@DMDW
jdbc的url为:jdbc:dm://DMDW
注意
当修改了 dm_svc.conf 内容后,需要重启客户端程序,修改的配置才能生效。
2.自动切换模式
自动切换模式需要修改守护进程模式为自动模式(DW_MODE=AUTO),需要在集群外服务器上部署确认监视器,(注意数据库版本统一)
2.1.1配置守护进程配置文件 dmwatcher.ini
在实例目录下新建文件 dmwatcher.ini,执行以下命令:
vi /dmdata/dmdb/dmwatcher.ini
主备库2节点文件内容要相同。
DW_MODE改为自动切换模式
[GRP_DW]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 30 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 20 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /dmdata/dmdb/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动
2.1.2启动监视器(在主备之外节点配置)
守护进程配置为自动切换时,必须配置确认监视器。在主备服务器以外的服务器上(需安装有 DM 数据库软件,且与主备机器心跳网络端口开放)。
新建确认监视器配置文件 dmmonitor.ini,执行以下命令:
vi /dmdata/dmdb/dmmonitor.ini
添加以下内容:
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /home/dmdba/dmdbms/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60 s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 200 #每个日志文件最大 32 MB
MON_LOG_SPACE_LIMIT = 1024 #不限定日志文件总占用空间
[GRP_DW]
MON_INST_OGUID = 453331 #组 GRP_DW 的唯一 OGUID 值
#以下配置为监视器到组 GRP_DW 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 10.0.0.100:7436
MON_DW_IP = 10.0.0.101:7436
注册监视器服务:
使用 root 用户,到数据库安装目录的script/root下。
注册守护进程服务(主备库都执行)。
./dm_service_installer.sh -t dmmonitor -p confirm -monitor_ini /dmdata/dmdb/dmmonitor.ini
以服务方式启动监视器服务
执行以下命令,启动数据库实例:
systemctl start DmMonitorServiceconfirm




