配置方案:
只配置主库和最多 8 个实时备库
1 、环境说明:
1.1 主库 ip 地址:
10.211.55.3
10.0.0.3
备库 ip 地址:
10.211.55.11
10.211.55.4
1.2 主备库端口规划:
INSTANCE_NAME PORT_NUM DW_PORT MAL_HOST MAL_PORT MAL_DW_PORT
LJW 5236 33141 10.0.0.3 61141 52141
LJW_STD 5236 33142 10.0.0.4 61142 52142
1.3 环境准备
在搭建数据守护系统前,应注意数据守护系统中各实例使用的达梦 DM 服务器版本应一致,同时还应注意各实例所在主机的操作系统位数、大小端模式、时区及时间设置都应一致,以免系统在运行时出现意想不到的错误。
配置数据守护之前,必须先同步实例数据,确保两者保持完全一致 ; 主库可以是新初始化的数据,也可以是正在生产、使用中的数据。
2 、配置实时主备
2.1 数据库初始化阶段
主库通过 disql 进行联机备份:
SQL> BACKUP DATABASE FULL BACKUPSET '/home/dmdba/backup/BACKUP_FILE_01';
把主库备份片传输到备库备份目录 /home/dmdba/backup
备库 dm 初始化数据库:
dminit path=/home/dmdba/dmdbms/data DB_NAME=ljw_std INSTANCE_NAME=ljw_std
备库恢复:
cd /home/dmdba/dmdbms/bin
./dmrman CTLSTMT="RESTORE DATABASE '/home/dmdba/dmdbms/data/ljw_std/dm.ini' FROM BACKUPSET '/home/dmdba/backup/BACKUP_FILE_01'"
./dmrman CTLSTMT="RECOVER DATABASE '/home/dmdba/dmdbms/data/ljw_std/dm.ini' FROM BACKUPSET '/home/dmdba/backup/BACKUP_FILE_01'"
2.3 配置主库 LJW
2.3.1 配置 dm.ini
主库 dm.ini 参数配置修改如下:
INSTANCE_NAME = LJW
PORT_NUM = 5236
DW_PORT = 33141
DW_ERROR_TIME = 60
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
HA_INST_CHECK_FLAG = 1
RLOG_SEND_APPLY_MON = 64
2.3.2 配置 dmmal.ini
配置 MAL 系统,各主备库的 dmmal.ini 配置必须完全一致, MAL_HOST 使用内部网络 IP , MAL_PORT 与 dm.ini 中PORT_NUM 使用不同的端口值, MAL_DW_PORT 是各实例对应的守护进程之间,以及守护进程和监视器之间的通信端口,配置如下 :
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = ljw
MAL_HOST = 10.0.0.3
MAL_PORT = 61141
MAL_INST_HOST = 10.211.55.3
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
[MAL_INST2]
MAL_INST_NAME = ljw
MAL_HOST = 10.0.0.4
MAL_PORT = 61142
MAL_INST_HOST = 10.211.55.11
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
2.3.3 配置 dmarch.ini
修改 dmarch.ini ,配置本地归档和实时归档。
除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 Primary 模式时,需要同步归档数据的目标实例名。
当前实例 LJW 是主库,需要向 LJW_STD( 实时备库 ) 同步数据,因此实时归档的 ARCH_DEST 配置为 ljw 。
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/arch
ARCH_FILE_SIZE = 64
ARCH_SPACE_LIMIT = 0
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = ljw_std
2.3.4 配置 dmwatcher.ini
修改 dmwatcher.ini 配置守护进程,配置为全局守护类型,这里配置使用手动切换模式。
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453331
INST_INI = /home/dmdba/dmdbms/data/ljw/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
2.3.5 配置 dmwatcher.ctl (备库必须从主库拷贝过去)
同一个守护进程组,必须使用同一份 dmwatcher.ctl 。因此,只需要使用 dmctlcvt 工具生成一份 dmwatcher.ctl 文件,然后分别拷贝到各个数据库目录下即可。
在配置完成 dmwatcher.ini 后,使用 dmctlcvt 工具生成 dmwatcher.ctl:
dmctlcvt TYPE=3 SRC=/home/dmdba/dmdbms/data/ljw/dmwatcher.ini DEST=/home/dmdba/dmdbms/data/ljw
拷贝生成的 dmwatcher.ctl 文件到数据文件目录 /home/dmdba/dmdbms/data/ljw/ 。
2.3.6 启动主库
以 mount 方式启动主库
nohup dmserver /home/dmdba/dmdbms/data/ljw/dm.ini mount &
备注:数据守护配置结束后,守护进程会自动 Open 数据库。
2.3.7 设置 OGUID
启动命令行工具 DIsql ,登录主库设置 OGUID 值。
SQL>sp_set_oguid(453331);
备注:系统通过 OGUID 值确定一个守护进程组,由用户保证 OGUID 值的唯一性,并确保数据守护系统中,数据库、守护进程和监视器配置相同的 OGUID 值。
2.3.8 修改数据库模式
启动命令行工具 DIsql ,登录主库修改数据库为 primary 模式
SQL>alter database primary;
2.4 配置备库 LJW_STD
2.4.1 配置 dm.ini
dm.ini 参数修改如下 :
INSTANCE_NAME = LJW_STD
PORT_NUM = 5236
DW_PORT = 33142
DW_ERROR_TIME = 60
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
HA_INST_CHECK_FLAG = 1
RLOG_SEND_APPLY_MON = 64
2.4.2 配置 dmmal.ini
配置 MAL 系统,各主备库的 dmmal.ini 配置必须完全一致, MAL_HOST 使用内部网络 IP , MAL_PORT 与 dm.ini 中PORT_NUM 使用不同的端口值, MAL_DW_PORT 是各实例对应的守护进程之间,以及守护进程和监视器之间的通信端口,配置如下 :
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = ljw
MAL_HOST = 10.0.0.3
MAL_PORT = 61141
MAL_INST_HOST = 10.211.55.3
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
[MAL_INST2]
MAL_INST_NAME = ljw_std
MAL_HOST = 10.0.0.4
MAL_PORT = 61142
MAL_INST_HOST = 10.211.55.11
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
2.4.3 配置 dmarch.ini
修改 dmarch.ini ,配置本地归档和实时归档。
除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 Primary 模式时,需要同步归档数据的目标实例名。
当前实例 LJW_STD 是备库,守护系统配置完成后,可能在各种故障处理中, LJW_STD 切换为新的主库,正常情况下,LJW 会切换为新的备库,需要向 LJW 同步数据,因此实时归档的 ARCH_DEST 配置为 LJW 。
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/arch
ARCH_FILE_SIZE = 64
ARCH_SPACE_LIMIT = 0
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = ljw
2.4.4 配置 dmwatcher.ini
修改 dmwatcher.ini 配置守护进程,配置为全局守护类型,这里配置使用手动切换模式。
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453331
INST_INI = /home/dmdba/dmdbms/data/ljw_std/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
2.4.5 配置 dmwatcher.ctl
同一个守护进程组,必须使用同一份 dmwatcher.ctl 文件,这里直接拷贝配置主库时已经生成的 dmwatcher.ctl 到本地数据文件目录 /home/dmdba/dmdbms/data/ljw_std/ 。
2.4.6 启动备库
以 mount 方式启动备库
nohup dmserver /home/dmdba/dmdbms/data/ljw_std/dm.ini mount &
备注:数据守护配置结束后,守护进程会自动 Open 数据库。
2.4.7 设置 OGUID
启动命令行工具 DIsql ,登录备库设置 OGUID 值为 453331
SQL>sp_set_oguid(453331);
2.4.8 修改数据库模式
启动命令行工具 DIsql ,登录备库修改数据库为 standby 模式。
如果当前数据库不是 standby 模式,需要先修改 dm.ini 中 ALTER_MODE_STATUS 值 为 1 ,允许修改数据库模式,修改standby 模式成功后再改回为 0 。如果是 standby 模式, 请忽略下面的第 1 步和第 3 步。
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); ---- 第 1 步
SQL>alter database standby; ---- 第 2 步
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0); ---- 第 3 步
2.5 配置监视器
配置确认监视器。和普通监视器相比,确认监视器除了相同的命令支持外,在主库发生故障时,能够自动通知 实时备库接管为新的主库,具有自动故障处理的功能。
备注:故障自动切换模式下,必须配置确认监视器,且确认监视器最多只能配置一 个。
修改 dmmonitor.ini 配置确认监视器,其中 MON_DW_IP 中的 IP 和 PORT 和 dmmal.ini 中的 MAL_HOST 和MAL_DW_PORT 配置项保持一致。
MON_DW_CONFIRM = 1
MON_LOG_PATH = /home/dmdba/dmdbms/data/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP1]
MON_INST_OGUID = 453331
MON_DW_IP = 10.0.0.3:52141
MON_DW_IP = 10.0.0.4:52142
2.6 启动守护进程
主库启动守护进程:
nohup dmwatcher /home/dmdba/dmdbms/data/ljw/dmwatcher.ini &
备库启动守护进程:
nohup dmwatcher /home/dmdba/dmdbms/data/ljw_std/dmwatcher.ini &
守护进程启动后,进入 Startup 状态,此时实例都处于 Mount 状态。守护进程开始广播自身和其监控实例的状态信息,结合自身信息和远程守护进程的广播信息,守护进程将 本地实例 Open ,并切换为 Open 状态。
2.7 启动监视器
cd /home/dmdba/dmdbms/data
dmmonitor dmmonitor.ini
监视器提供一系列命令,支持当前守护系统状态查看以及故障处理,可输入 help 命令, 查看各种命令说明使用,结合实际情况选择使用。
至此一主一备的实时数据守护系统搭建完毕,在搭建步骤和各项配置都正确的情况下,在监视器上执行 show 命令,可以监控到所有实例都处于 Open 状态,所有守护进程也都处于 Open 状态,即为正常运行状态。