达梦实时主备搭建

一、数据库部署

数据库部署可参考如下内容
centos7部署dm8数据库

唯一需要注意的先不要注册数据库服务

二、实时主备搭建

1、规划

主库信息如下:

实例名dm1
PORT_NUM5236
MAL_INST_HOST192.168.197.15
MAL_INST_DW_PORT5237
MAL_DW_PORT5238
MAL_HOST10.0.0.15
MAL_PORT5239
MAL_INST_PORT5236
hostnamemaster
instance_namedm1
数据库服务名DmServicedm1

备库信息如下

实例名dm2
PORT_NUM5236
MAL_INST_HOST192.168.197.16
MAL_INST_DW_PORT5237
MAL_DW_PORT5238
MAL_HOST10.0.0.16
MAL_PORT5239
MAL_INST_PORT5236
hostnamestandby
instance_namedm2
数据库服务名DmServicedm2

2、数据准备

备份主库

备份时需停止数据库

[dmdba@master ~]$ DmServicedm1 stop
Stopping DmServicedm1:                                     [ OK ]

#备份
[dmdba@master ~]$ dmrman 
dmrman V8
RMAN> backup database '/dmdata/dmdb/dm.ini' backupset '/dmbackup/dmdb_full_01';
backup database '/dmdata/dmdb/dm.ini' backupset '/dmbackup/dmdb_full_01';
file dm.key not found, use default license!
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[27813], file_lsn[27813]
Processing backupset /dmbackup/dmdb_full_01
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00]                                 
backup successfully!
time used: 00:00:01.176
恢复到备库

恢复三步走:restore,recover,update db_magic

[dmdba@standby ~]$ DmServicedm2 stop 
Stopping DmServicedm2:                                     [ OK ]
[dmdba@standby dmdb_full_01]$ dmrman 
dmrman V8
RMAN> restore database '/dmdata/dmdb/dm.ini' from backupset '/dmbackup/dmdb_full_01';
restore database '/dmdata/dmdb/dm.ini' from backupset '/dmbackup/dmdb_full_01';
file dm.key not found, use default license!
[Percent:0.00%][Speed:0.00M/s][Cost:00:00:01][Remaining:00:00:00]Normal of FAST                     
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00]                                 
restore successfully.
time used: 00:00:02.338
RMAN> recover database '/dmdata/dmdb/dm.ini' from backupset '/dmbackup/dmdb_full_01';
recover database '/dmdata/dmdb/dm.ini' from backupset '/dmbackup/dmdb_full_01';
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[27813], file_lsn[27813]
备份集[/dmbackup/dmdb_full_01]备份过程中未产生日志
recover successfully!
time used: 278.284(ms)
RMAN> recover database '/dmdata/dmdb/dm.ini' update db_magic;
recover database '/dmdata/dmdb/dm.ini' update db_magic;
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[27813], file_lsn[27813]
recover successfully!
time used: 00:00:01.035

3、主库配置文件修改

dm.ini

以下是需要修改的参数

INSTANCE_NAME = DM1
PORT_NUM = 5236
DW_PORT = 5237
DW_ERROR_TIME = 60 
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2 
MAL_INI = 1
ARCH_INI = 1
RLOG_SEND_APPLY_MON = 64 
dmmal.ini

此文件是不存在的,需手动创建

MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
	MAL_INST_NAME = DM1 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
	MAL_HOST = 10.0.0.15 #MAL 系统监听 TCP 连接的 IP 地址
	MAL_PORT = 5239 #MAL 系统监听 TCP 连接的端口
	MAL_INST_HOST = 192.168.197.15 #实例的对外服务 IP 地址
	MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
	MAL_DW_PORT = 5238 #实例本地的守护进程监听 TCP 连接的端口
	MAL_INST_DW_PORT = 5237 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
	MAL_INST_NAME = DM2
	MAL_HOST = 10.0.0.16
	MAL_PORT = 5239
	MAL_INST_HOST = 192.168.197.16
	MAL_INST_PORT = 5236
	MAL_DW_PORT = 5238
	MAL_INST_DW_PORT = 5237
dmarch.ini

如果未开启归档,此文件需手动创建

[ARCHIVE_LOCAL1]
	ARCH_TYPE            = LOCAL        
	ARCH_DEST            = /dmarch        
	ARCH_FILE_SIZE       = 1024        
	ARCH_SPACE_LIMIT     = 20480        
	ARCH_FLUSH_BUF_SIZE  = 0        

[ARCHIVE_REALTIME]
	ARCH_TYPE = REALTIME #实时归档
	ARCH_DEST = dm2      #归档到备库
dmwatcher.ini

数据守护配置

[GRP1]
	DW_TYPE = GLOBAL #全局守护类型
	DW_MODE = MANUAL #手动切换模式
	DW_ERROR_TIME = 10 #远程守护进程故障认定时间
	INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
	INST_ERROR_TIME = 10 #本地实例故障认定时间
	INST_OGUID = 453331 #守护系统唯一 OGUID 值
	INST_INI = /dmdata/dmdb/dm.ini #dm.ini 配置文件路径
	INST_AUTO_RESTART = 1 #打开实例的自动启动功能
	INST_STARTUP_CMD = /dmsoft/bin/dmserver #命令行方式启动
	RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
	RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭

4、备库配置文件修改

dm.ini
INSTANCE_NAME = DM2
PORT_NUM = 5236
DW_PORT = 5237
DW_ERROR_TIME = 60 
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2 
MAL_INI = 1
ARCH_INI = 1
RLOG_SEND_APPLY_MON = 64 
dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
	MAL_INST_NAME = DM1 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
	MAL_HOST = 192.168.197.15 #MAL 系统监听 TCP 连接的 IP 地址
	MAL_PORT = 5239 #MAL 系统监听 TCP 连接的端口
	MAL_INST_HOST = 192.168.197.15 #实例的对外服务 IP 地址
	MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
	MAL_DW_PORT = 5238 #实例本地的守护进程监听 TCP 连接的端口
	MAL_INST_DW_PORT = 5237 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
	MAL_INST_NAME = DM2
	MAL_HOST = 192.168.197.16
	MAL_PORT = 5239
	MAL_INST_HOST = 192.168.197.16
	MAL_INST_PORT = 5236
	MAL_DW_PORT = 5238
	MAL_INST_DW_PORT = 5237
dmarch.ini
[ARCHIVE_LOCAL1]
	ARCH_TYPE            = LOCAL        
	ARCH_DEST            = /dmarch        
	ARCH_FILE_SIZE       = 1024        
	ARCH_SPACE_LIMIT     = 20480        
	ARCH_FLUSH_BUF_SIZE  = 0        
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = dm1
dmwatcher.ini
[GRP1]
	DW_TYPE = GLOBAL #全局守护类型
	DW_MODE = MANUAL #手动切换模式
	DW_ERROR_TIME = 10 #远程守护进程故障认定时间
	INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
	INST_ERROR_TIME = 10 #本地实例故障认定时间
	INST_OGUID = 453331 #守护系统唯一 OGUID 值
	INST_INI = /dmdata/dmdb/dm.ini #dm.ini 配置文件路径
	INST_AUTO_RESTART = 1 #打开实例的自动启动功能
	INST_STARTUP_CMD = /dmsoft/bin/dmserver #命令行方式启动
	RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
	RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭

5、实时主备配置

以mount方式启动主库
dmserver /dmdata/dmdb/dm.ini mount
修改OGUID,及dm1为主库
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(453331);
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
alter database primary;
以mount试启动备库
dmserver /dmdata/dmdb/dm.ini mount
修改OGUID,及dm2为备库
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(453331);
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
 alter database standby;
 SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

6、监视器配置

dmmonitor.ini配置
vi /dmdata/dmmonitor.ini
MON_DW_CONFIRM = 1
MON_LOG_PATH = /dmlog
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.15:5238
MON_DW_IP = 10.0.0.16:5238
dmmonitor服务注册
/dmsoft/script/root/dm_service_installer.sh -t dmmonitor -monitor_ini /dmdata/dmmonitor.ini -p mon

7、实时主备启动

启动主库守护进程
[dmdba@master ~]$ DmWatcherServicedw1 start
Starting DmWatcherServicedw1:                              [ OK ]
启动备库守护进程
[dmdba@standby ~]$ DmWatcherServicedw2 start
Starting DmWatcherServicedw2:                              [ OK ]
启动监视器
[dmdba@dmmon dmdata]$ dmmonitor /dmdata/dmmonitor.ini 
[monitor]         2022-05-05 10:14:59: DMMONITOR[4.0] V8
[monitor]         2022-05-05 10:14:59: DMMONITOR[4.0] IS READY.

查看主备信息

[monitor]         2022-05-05 10:14:59: 收到守护进程(DM2)消息
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2022-05-05 10:14:58  OPEN           OK        DM2              OPEN        STANDBY   NULL     3        30274           30274           

[monitor]         2022-05-05 10:14:59: 收到守护进程(DM1)消息
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2022-05-05 10:14:59  OPEN           OK        DM1              OPEN        PRIMARY   VALID    3        30274           30274

8、主备切换测试

choose switchover grp1
Can choose one of the following instances to do switchover:
1: DM2

switchover DM2
[monitor]         2022-05-05 16:21:28: 开始切换实例DM2
[monitor]         2022-05-05 16:21:28: 通知守护进程DM1切换SWITCHOVER状态
[monitor]         2022-05-05 16:21:28: 守护进程(DM1)状态切换 [OPEN-->SWITCHOVER]
[monitor]         2022-05-05 16:21:29: 切换守护进程DM1为SWITCHOVER状态成功
[monitor]         2022-05-05 16:21:29: 通知守护进程DM2切换SWITCHOVER状态
[monitor]         2022-05-05 16:21:29: 守护进程(DM2)状态切换 [OPEN-->SWITCHOVER]
[monitor]         2022-05-05 16:21:29: 切换守护进程DM2为SWITCHOVER状态成功
[monitor]         2022-05-05 16:21:29: 实例DM1开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句
[monitor]         2022-05-05 16:21:29: 实例DM1执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功
[monitor]         2022-05-05 16:21:29: 实例DM2开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句
[monitor]         2022-05-05 16:21:29: 实例DM2执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功
[monitor]         2022-05-05 16:21:29: 实例DM1开始执行ALTER DATABASE MOUNT语句
[monitor]         2022-05-05 16:21:30: 实例DM1执行ALTER DATABASE MOUNT语句成功
[monitor]         2022-05-05 16:21:30: 实例DM2开始执行SP_APPLY_KEEP_PKG()语句
[monitor]         2022-05-05 16:21:31: 实例DM2执行SP_APPLY_KEEP_PKG()语句成功
[monitor]         2022-05-05 16:21:31: 实例DM2开始执行ALTER DATABASE MOUNT语句
[monitor]         2022-05-05 16:21:31: 实例DM2执行ALTER DATABASE MOUNT语句成功
[monitor]         2022-05-05 16:21:31: 实例DM1开始执行ALTER DATABASE STANDBY语句
[monitor]         2022-05-05 16:21:31: 实例DM1执行ALTER DATABASE STANDBY语句成功
[monitor]         2022-05-05 16:21:31: 实例DM2开始执行ALTER DATABASE PRIMARY语句
[monitor]         2022-05-05 16:21:32: 实例DM2执行ALTER DATABASE PRIMARY语句成功
[monitor]         2022-05-05 16:21:32: 通知实例DM2修改所有归档状态无效
[monitor]         2022-05-05 16:21:32: 修改所有实例归档为无效状态成功
[monitor]         2022-05-05 16:21:32: 实例DM1开始执行ALTER DATABASE OPEN FORCE语句
[monitor]         2022-05-05 16:21:33: 实例DM1执行ALTER DATABASE OPEN FORCE语句成功
[monitor]         2022-05-05 16:21:33: 实例DM2开始执行ALTER DATABASE OPEN FORCE语句
[monitor]         2022-05-05 16:21:33: 实例DM2执行ALTER DATABASE OPEN FORCE语句成功
[monitor]         2022-05-05 16:21:33: 实例DM1开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句
[monitor]         2022-05-05 16:21:34: 实例DM1执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功
[monitor]         2022-05-05 16:21:34: 实例DM2开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句
[monitor]         2022-05-05 16:21:35: 实例DM2执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功
[monitor]         2022-05-05 16:21:35: 通知守护进程DM1切换OPEN状态
[monitor]         2022-05-05 16:21:35: 守护进程(DM1)状态切换 [SWITCHOVER-->OPEN]
[monitor]         2022-05-05 16:21:36: 切换守护进程DM1为OPEN状态成功
[monitor]         2022-05-05 16:21:36: 通知守护进程DM2切换OPEN状态
[monitor]         2022-05-05 16:21:36: 守护进程(DM2)状态切换 [SWITCHOVER-->OPEN]
[monitor]         2022-05-05 16:21:37: 切换守护进程DM2为OPEN状态成功
[monitor]         2022-05-05 16:21:37: 通知组(GRP1)的守护进程执行清理操作
[monitor]         2022-05-05 16:21:37: 清理守护进程(DM1)请求成功
[monitor]         2022-05-05 16:21:37: 清理守护进程(DM2)请求成功
[monitor]         2022-05-05 16:21:37: 实例DM2切换成功

2022-05-05 16:21:37 
#================================================================================#
GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG  
GRP1             453331      TRUE            MANUAL          FALSE     


<<DATABASE GLOBAL INFO:>>
DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
192.168.197.16      5238         2022-05-05 16:21:36  GLOBAL    VALID     OPEN           DM2              OK        1     1     OPEN        PRIMARY   DSC_OPEN       REALTIME  VALID    

EP INFO:
INST_IP             INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
192.168.197.16      5236       OK        DM2              OPEN        PRIMARY   0          0            REALTIME  VALID    4479            37738           4479            37738           NONE                  

<<DATABASE GLOBAL INFO:>>
DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
192.168.197.15      5238         2022-05-05 16:21:37  GLOBAL    VALID     OPEN           DM1              OK        1     1     OPEN        STANDBY   DSC_OPEN       REALTIME  INVALID  

EP INFO:
INST_IP             INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
192.168.197.15      5236       OK        DM1              OPEN        STANDBY   0          0            REALTIME  INVALID  4453            35292           4453            35292           NONE                  

DATABASE(DM1) APPLY INFO FROM (DM2), REDOS_PARALLEL_NUM (1):
DSC_SEQNO[0], (RSEQ, SSEQ, KSEQ)[4453, 4453, 4453], (RLSN, SLSN, KLSN)[35292, 35292, 35292], N_TSK[0], TSK_MEM_USE[0] 
REDO_LSN_ARR: (35292)


#================================================================================#

[monitor]         2022-05-05 16:21:39: 守护进程(DM2)状态切换 [OPEN-->RECOVERY]
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2022-05-05 16:21:38  RECOVERY       OK        DM2              OPEN        PRIMARY   VALID    6        37738           37738           

[monitor]         2022-05-05 16:21:41: 守护进程(DM2)状态切换 [RECOVERY-->OPEN]
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2022-05-05 16:21:40  OPEN           OK        DM2              OPEN        PRIMARY   VALID    6        37738           37738

达梦技术社区

达梦技术社区 https://eco.dameng.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用 Docker 搭建达梦数据库实时主备,需要遵循以下步骤: 1. 安装 Docker 和 Docker Compose。 2. 创建两个目录,一个用于存放主库的数据,一个用于存放备库的数据。例如: ``` mkdir /data/dm_primary mkdir /data/dm_standby ``` 3. 创建一个 `docker-compose.yml` 文件,并在其中定义主备两个数据库的容器。 ``` version: '3.7' services: primary: image: registry.cn-hangzhou.aliyuncs.com/dameng/dameng8:latest container_name: dm_primary restart: always volumes: - /data/dm_primary:/opt/dm8/data environment: - DBNAME=primary - DBPORT=5236 - DBUSER=SYSDBA - DBPASSWD=SYSDBA ports: - "5236:5236" networks: - dm standby: image: registry.cn-hangzhou.aliyuncs.com/dameng/dameng8:latest container_name: dm_standby restart: always volumes: - /data/dm_standby:/opt/dm8/data environment: - DBNAME=standby - DBPORT=5237 - DBUSER=SYSDBA - DBPASSWD=SYSDBA ports: - "5237:5237" networks: - dm networks: dm: driver: bridge ``` 在上述配置文件中,我们使用了达梦数据库 8 的最新版本,并创建了两个容器,一个用于主库,一个用于备库。在 `volumes` 部分,我们将主库和备库的数据目录分别挂载到了 `/data/dm_primary` 和 `/data/dm_standby` 目录中。在 `environment` 部分,我们分别为主库和备库设置了数据库名、端口号、用户名和密码,并在 `ports` 部分将主库和备库的端口都映射到了宿主机的 5236 和 5237 端口上。 4. 在终端中切换到 `docker-compose.yml` 文件所在的目录,并运行以下命令启动容器: ``` docker-compose up -d ``` 5. 在主库容器中创建一个用于复制的用户,并授予复制权限。例如: ``` docker exec -it dm_primary /bin/bash /opt/dm8/bin/dmuseradd -u repl -p repl /opt/dm8/bin/dmusermod -u repl -r repl exit ``` 6. 在备库容器中启动复制进程,将备库连接到主库。例如: ``` docker exec -it dm_standby /bin/bash /opt/dm8/bin/dmrepl -s primary -p 5236 -u repl -w repl -r /opt/dm8/data/standby -i exit ``` 在上述命令中,`-s primary` 参数指定了主库的地址,`-p 5236` 参数指定了主库的端口,`-u repl -w repl` 参数指定了用于复制的用户和密码,`-r /opt/dm8/data/standby` 参数指定了备库的数据目录,`-i` 参数表示首次启动复制进程。 7. 在主库上进行一些操作,例如创建表或插入数据,然后在备库上检查是否同步成功。 以上就是使用 Docker 搭建达梦数据库实时主备的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值