本篇文章主要讲述一主一备DMWatch数据守护集群搭建(达梦数据库最多支持一主八备)
3台虚拟机:一台监视器,一台主库,一台备库
操作系统:Kylin Linux Advanced Server V10
处理器内核总数:4
内存:4G
硬盘容量:40G
数据库版本:DM8 安全版(标准版和开发版不支持数据守护集群)
ip | 数据库名称 | 实例名 | 端口号 | |
---|---|---|---|---|
192.168.220.141 | 主库 | DAMENG | GRP1_RT_01 | 5236 |
192.168.220.142 | 备库 | DAMENG | GRP1_RT_02 | 5236 |
192.168.220.143 | 监视器 |
主库、备库和监视器都需要安装达梦数据库,主库和备库要保证数据库名和端口号一致,实例名要不一样。监视器只需要安装数据库即可,不需要新建实例。
groupadd dinstall -g 2001 useradd -G dinstall -m -d /home/dmdba -s /bin/bash -u 2001 dmdba passwd dmdba
##实例保存目录
mkdir -p /dmdata/data
##归档保存目录
mkdir -p /dmdata/arch
##备份保存目录
mkdir -p /dmdata/dmbak
## 临时数据文件目录
mkdir -p /dmdata/tmp
## mal通信文件路径
mkdir -p /dmdata/malpath
## monitor 目录
mkdir -p /dmdata/monitorpath
##修改目录拥有者
chown -R dmdba:dinstall /dmdata/data
chown -R dmdba:dinstall /dmdata/arch
chown -R dmdba:dinstall /dmdata/dmbak
chown -R dmdba:dinstall /dmdata/tmp
chown -R dmdba:dinstall /dmdata/malpath
chown -R dmdba:dinstall /dmdata/monitorpath
##修改目录权限
chmod -R 755 /dmdata/data
chmod -R 755 /dmdata/arch
chmod -R 755 /dmdata/dmbak
chmod -R 755 /dmdata/tmp
chmod -R 755 /dmdata/malpath
chmod -R 755 /dmdata/monitorpath
## 挂载iso 文件
mount -o loop /root/dm8_20231109_x86_kylin10_64.iso /mnt
su - dmdba
cd /mnt
./DMInstall.bin -i
出现错误,由于虚拟机磁盘分配少导致,
执行下面命令再次安装
export DM_INSTALL_TMPDIR=/dmdata/tmp
./DMInstall.bin -i
安装过程比较简单,安装完成如下所示:
备份还原时,使用使用AP服务进行处理。
检查AP服务是否启动
ps -ef|grep dmap
如果没有启动,切换为root 执行
/home/dmdba/dmdbms/script/root/root_installer.sh
vi /dmdata/data/DAMENG/dm.ini
INSTANCE_NAME = GRP1_RT_01
PORT_NUM = 5236
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
vi /dmdata/data/DAMENG/dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = GRP1_RT_02 #实时归档目标实例名,备库实例名称
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmdata/arch/ #本地归档存放路径
ARCH_FILE_SIZE = 128 #单个归档文件大小
ARCH_SPACE_LIMIT = 0 #归档上限,0表示无限制
vi /dmdata/data/DAMENG/dmmal.ini
MAL_CHECK_INTERVAL = 10 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间
MAL_TEMP_PATH = /dmdata/malpath/ #临时文件目录
MAL_BUF_SIZE = 512 #单个 MAL 缓存大小,单位 MB
MAL_SYS_BUF_SIZE = 2048 #MAL 总大小限制,单位 MB
MAL_COMPRESS_LEVEL = 0 #MAL 消息压缩等级,0 表示不压缩
[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01 #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST = 192.168.220.141 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.220.141 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 192.168.220.142
MAL_PORT = 5336
MAL_INST_HOST = 192.168.220.142
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
vi /dmdata/data/DAMENG/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME = 20 #远程守护进程故障认定时间
INST_ERROR_TIME = 20 #本地实例故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_OGUID = 45331 #守护系统唯一 OGUID 值
INST_INI = /dmdata/data/DAMENG/dm.ini #dm.ini 文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
关闭主库
./dmrman
BACKUP DATABASE '/dmdata/data/DAMENG/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dmdata/dmbak/BACKUP_FILE_01'
一定要以 Mount 方式启动数据库实例, 否则系统启动时会重构回滚表空间,生成 Redo 日志; 并且,启动后应用可能连接到数据库实例进行操作,破坏主备 库的数据一致性。数据守护配置结束后,守护进程会自动 Open 数据库。
cd /home/dmdba/dmdbms/bin
#以mount方式启动主库
./dmserver /dmdata/data/DAMENG/dm.ini mount
dmserver 进程检查启动完成,要检测当前进程占用的端口 ,是否都占用了,主备守护的时候,dmserver 占用三个端口。
ss -antlp|grep 5236
ss -antlp|grep 7701 #查询dmserver 占用的端口号 要占用三个端口号
./disql SYSDBA/SYSDBA
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(45331);
SQL>alter database primary;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
./disql SYSDBA/SYSDBA
SQL>select * from v$instace;
SQL>select * from v$arch_status;
备库可以不用初始化数据库实例,基于主库的全备还原一个新的实例,进行配置。
scp -r root@192.168.220.141:/dmdata/dmbak/BACKUP_FILE_01 ./
./dmrman
#还原一个新的数据库实例 还原备份,还原到目录的时候,要和主库的目录结构一样,要不可能会出错。
RESTORE DATABASE to '/dmdata/data/DAMENG' FROM BACKUPSET '/dmdata/dmbak/BACKUP_FILE_01';
#还原魔数
RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
备库机器里 dmmal.ini、dmwatcher.ini 与 主库机器 GRP1_RT_01 的 dmmal.ini、dmwatcher.ini 相同,参照 主库机器 dmmal.ini、dmwatcher.ini 文件进行配置。
1、修改dm.ini参数配置
vi /dmdata/data/DAMENG/dm.ini
INSTANCE_NAME = GRP1_RT_02
PORT_NUM = 5236
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
2、创建dmarch.ini配置文件
vi /dmdata/data/DAMENG/dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = GRP1_RT_01 #实时归档目标实例名(主库实例名称)
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmdata/arch/ #本地归档存放路径
ARCH_FILE_SIZE = 128 #单个归档文件大小
ARCH_SPACE_LIMIT = 0 #归档上限,0表示无限制
3、创建dmmal.ini配置文件
主库和备库一样
vi /dmdata/data/DAMENG/dmmal.ini
MAL_CHECK_INTERVAL = 10 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间
MAL_TEMP_PATH = /dmdata/malpath/ #临时文件目录
MAL_BUF_SIZE = 512 #单个 MAL 缓存大小,单位 MB
MAL_SYS_BUF_SIZE = 2048 #MAL 总大小限制,单位 MB
MAL_COMPRESS_LEVEL = 0 #MAL 消息压缩等级,0 表示不压缩
[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01 #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST = 192.168.220.141 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.220.141 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 192.168.220.142
MAL_PORT = 5336
MAL_INST_HOST = 192.168.220.142
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
4、创建dmwatcher.ini配置文件
备库删除这个配置项
RLOG_SEND_THRESHOLD = 0
vi /dmdata/data/DAMENG/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME = 20 #远程守护进程故障认定时间
INST_ERROR_TIME = 20 #本地实例故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_OGUID = 45331 #守护系统唯一 OGUID 值
INST_INI = /dmdata/data/DAMENG/dm.ini #dm.ini 文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
#以mount方式启动备库
./dmserver /dmdata/data/DAMENG/dm.ini mount
./disql SYSDBA/SYSDBA
#启动命令行工具 DIsql
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(45331);
SQL>alter database standby;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
验证是否生效
当看到备库处于备库配置状态 成功
cd /home/dmdba/dmdbms/bin
./dmwatcher /dmdata/data/DAMENG/dmwatcher.ini
cd /home/dmdba/dmdbms/bin
./dmwatcher /dmdata/data/DAMENG/dmwatcher.ini
./disql SYSDBA/SYSDBA
SQL>select * from v$instance;
当看到为处于主库打开状态证明 已经 ok
disql SYSDBA/SYSDBA
SQL>select * from v$instance;
当看到为处于备库打开状态证明 已经 ok
## 切换为root 用户
## 注册server
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p GRP1_RT_01 -dm_ini /dmdata/data/DAMENG/dm.ini
## 注册watcher
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdata/data/DAMENG/dmwatcher.ini
## 切换为root 用户
## 注册server
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p GRP1_RT_02 -dm_ini /dmdata/data/DAMENG/dm.ini
## 注册watcher
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdata/data/DAMENG/dmwatcher.ini
##启动
##A/B 机器
[dmdba@~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start
##停止
##A/B机器
[dmdba@~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher stop
##A 机器
[dmdba@~]$ /home/dmdba/dmdbms/bin/DmServiceGRP1_RT_01 stop
##B机器
[dmdba@~]$ /home/dmdba/dmdbms/bin/DmServiceGRP1_RT_02 stop
MON_DW_CONFIRM = 1 #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH = /dmdata/monitorpath #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT = 0 #日志上限,单位 MB
[GRP1]
MON_INST_OGUID = 45331 #组 GRP1 的唯一 OGUID 值
MON_DW_IP = 192.168.220.141:5436 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP = 192.168.220.142:5436
非确认监视器无需注册服务。
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /dmdata/data/dmmonitor.ini
cd /home/dmdba/dmdbms/bin
./DmMonitorServiceMonitor start
通过日志查看,显示正常。
通过上图我们可以看到2个守护进程都已被监听到,都处于OPEN状态,说明数据守护集群已经搭建完成。值得注意的是,数据守护集群只有主库能进行读写操作,备库只能进行读操作,当开启故障自动切换时,主库故障,将自动切换到备库,备库接替成为主库,直至主库恢复正常。 为了方便维护,我们可以将守护进程服务注册到服务,这样关机开机可以自动完成自启,同时,监视器也可以加入到服务,开机自启。
Linux环境:dm_svc.conf放在应用服务器/etc目录下。
Windows32环境:dm_svc.conf放在应用服务器System32目录下。
Windows64环境:dm_svc.conf放在应用服务器System32和SysWOW64目录下
TIME_ZONE=(+8:00)
LANGUAGE=(cn)
DM1=(192.168.220.141:5236,192.168.220.142:5236)
[DM1]
LOGIN_MODE=(1)
SWITCH_TIME=(300)
SWITCH_INTERVAL=(200)
表示以服务名连接数据库时,若未找到符合条件的库成功建立连接,将尝试遍历服务名中库列表的次数。有效值范围 1~9223372036854775807,默认值为 1,可以设置至少 3 次用来避免由于网卡的波动,造成数据库连接测频繁切换。
表示在服务器之间切换的时间间隔,单位为毫秒,有效值范围 1~9223372036854775807。与参数 SWITCH_TIMES、EP_SELECTOR 配合使用,EP_SELECTOR 设置为 0,等待 SWITCH_INTERVAL 后会切换尝试连接下一个服务器,EP_SELECTOR 设置为 1,等待 SWITCH_INTERVAL 后会继续尝试连接该服务器,直到 SWITCH_TIMES 次再切换下一个服务器。
表示连接数据库时采用何种模型建立连接。0:依次选取列表中的不同节点建立连接,使得所有连接均匀地分布在各个节点上;1:选择列表中最前面的节点建立连接,只有当前节点无法建立连接时才会选择下一个节点进行连接。
表示连接发生异常或一些特殊场景下连接处理策略。0:关闭连接,1:当连接发生异常时自动切换到其他库,无论切换成功还是失败都会抛一个 SQLEXCEPTION,用于通知上层应用进行事务执行失败时的相关处理;2 配合 EP_SELECTOR=1 使用,如果服务名列表前面的节点恢复了,将当前连接切换到前面的节点上,可以根据应用的实际要求设定。
连接测试
./disql SYSDBA/SYSDBA@DM1
jdbc 连接串:
jdbc:dm://DM1
文章
阅读量
获赞