注册
达梦数据库数据守护集群安装部署
专栏/培训园地/ 文章详情 /

达梦数据库数据守护集群安装部署

一辉 2025/01/14 233 0 0
摘要

1、搭建的主备集群架构如下图:

image.png

2、环境说明

本篇文章主要讲述一主一备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 监视器

主库、备库和监视器都需要安装达梦数据库,主库和备库要保证数据库名和端口号一致,实例名要不一样。监视器只需要安装数据库即可,不需要新建实例。

3、三台主机初始化准备

1、创建用户和用户组

groupadd dinstall -g 2001 useradd -G dinstall -m -d /home/dmdba -s /bin/bash -u 2001 dmdba passwd dmdba

2、创建目录

##实例保存目录 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

3、安装数据库

## 挂载iso 文件 mount -o loop /root/dm8_20231109_x86_kylin10_64.iso /mnt su - dmdba cd /mnt ./DMInstall.bin -i

出现错误,由于虚拟机磁盘分配少导致,

image.png

执行下面命令再次安装

export DM_INSTALL_TMPDIR=/dmdata/tmp ./DMInstall.bin -i

安装过程比较简单,安装完成如下所示:

image.png

4、启动AP服务

备份还原时,使用使用AP服务进行处理。
检查AP服务是否启动

ps -ef|grep dmap

如果没有启动,切换为root 执行

/home/dmdba/dmdbms/script/root/root_installer.sh

4、主库配置

1、修改dm.ini参数配置

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

2、创建dmarch.ini配置文件

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表示无限制

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配置文件

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 #指定备库重演日志的时间阈值,默认关闭

5、备份还原

关闭主库

  • 备份主库
./dmrman

BACKUP DATABASE '/dmdata/data/DAMENG/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dmdata/dmbak/BACKUP_FILE_01' 

6、启动主库

一定要以 Mount 方式启动数据库实例, 否则系统启动时会重构回滚表空间,生成 Redo 日志; 并且,启动后应用可能连接到数据库实例进行操作,破坏主备 库的数据一致性。数据守护配置结束后,守护进程会自动 Open 数据库。

cd /home/dmdba/dmdbms/bin #以mount方式启动主库 ./dmserver /dmdata/data/DAMENG/dm.ini mount

1、进程端口检测

dmserver 进程检查启动完成,要检测当前进程占用的端口 ,是否都占用了,主备守护的时候,dmserver 占用三个端口。

    ss -antlp|grep 5236
    ss -antlp|grep 7701  #查询dmserver 占用的端口号 要占用三个端口号

2、设置oguid和数据库为primary模式

./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);

3、检测实例状态和归档情况,确保都和上面配置的ini文件一致。

./disql SYSDBA/SYSDBA SQL>select * from v$instace; SQL>select * from v$arch_status;

7、备库配置

备库可以不用初始化数据库实例,基于主库的全备还原一个新的实例,进行配置。

1、还原数据库

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;

2、配置参数

备库机器里 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 #指定备库重演日志的时间阈值,默认关闭

3、启动备库

#以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);

验证是否生效

当看到备库处于备库配置状态 成功

image.png

8、启动守护进程

1、启动主库守护进程

cd /home/dmdba/dmdbms/bin ./dmwatcher /dmdata/data/DAMENG/dmwatcher.ini

2、启动备库守护进程

cd /home/dmdba/dmdbms/bin ./dmwatcher /dmdata/data/DAMENG/dmwatcher.ini

3、验证主库的状态是否为 open

./disql SYSDBA/SYSDBA SQL>select * from v$instance;

当看到为处于主库打开状态证明 已经 ok

4、验证备库状态

disql SYSDBA/SYSDBA SQL>select * from v$instance;

当看到为处于备库打开状态证明 已经 ok

9、进程都注册为服务

1、主库

## 切换为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

2、备库

## 切换为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

3、服务方式启停

  • 停止(主备库)守护进程 (前台)
  • 停止 (主备库)服务进程 (前台)
##启动 ##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

10、监视器配置

配置dmmonitor.ini文件

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

通过日志查看,显示正常。

image.png

通过上图我们可以看到2个守护进程都已被监听到,都处于OPEN状态,说明数据守护集群已经搭建完成。值得注意的是,数据守护集群只有主库能进行读写操作,备库只能进行读操作,当开启故障自动切换时,主库故障,将自动切换到备库,备库接替成为主库,直至主库恢复正常。 为了方便维护,我们可以将守护进程服务注册到服务,这样关机开机可以自动完成自启,同时,监视器也可以加入到服务,开机自启。

11、配置连接文件dm_svc.conf

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)
  • SWITCH_TIMES

表示以服务名连接数据库时,若未找到符合条件的库成功建立连接,将尝试遍历服务名中库列表的次数。有效值范围 1~9223372036854775807,默认值为 1,可以设置至少 3 次用来避免由于网卡的波动,造成数据库连接测频繁切换。

  • SWITCH_INTERVAL

表示在服务器之间切换的时间间隔,单位为毫秒,有效值范围 1~9223372036854775807。与参数 SWITCH_TIMES、EP_SELECTOR 配合使用,EP_SELECTOR 设置为 0,等待 SWITCH_INTERVAL 后会切换尝试连接下一个服务器,EP_SELECTOR 设置为 1,等待 SWITCH_INTERVAL 后会继续尝试连接该服务器,直到 SWITCH_TIMES 次再切换下一个服务器。

  • EP_SELECTOR

表示连接数据库时采用何种模型建立连接。0:依次选取列表中的不同节点建立连接,使得所有连接均匀地分布在各个节点上;1:选择列表中最前面的节点建立连接,只有当前节点无法建立连接时才会选择下一个节点进行连接。

  • AUTO_RECONNECT

表示连接发生异常或一些特殊场景下连接处理策略。0:关闭连接,1:当连接发生异常时自动切换到其他库,无论切换成功还是失败都会抛一个 SQLEXCEPTION,用于通知上层应用进行事务执行失败时的相关处理;2 配合 EP_SELECTOR=1 使用,如果服务名列表前面的节点恢复了,将当前连接切换到前面的节点上,可以根据应用的实际要求设定。

连接测试

./disql SYSDBA/SYSDBA@DM1

  • jdbc 连接串:

    jdbc:dm://DM1

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服