达梦数据库学习札记-实时主备

实时主备

实时主备介绍

配置实时主备,有以下几种配置方案,可以根据实际情况部署:
	1.只配置主库和最多 8 个实时备库。
	2.只配置主库和最多 8 个异步备库。
	3.配置主库、最多 8 个实时备库,和最多 8 个异步备库。

在实际应用中,如果数据库规模很大,并且对数据的实时性要求不是很严格,则可以配置多个异步备库用于分担统计报表等任务。

注意事项:

实际配置时,相关的端口配置和 OGUID 值建议不要和手册示例使用完全相同的值,避免多个用户在同一个环境下搭建不同的数据守护系统,出现消息乱掉或者端口冲突等问题。

环境准备、规划

	OS:中标麒麟7.3
	database:DM8
	
	架构设计
		1台虚拟机做主机
		1台虚拟机做备机
		1台虚拟机做监控
		
	三台机器都事先安装了 DM(详细安装步骤见 达梦数据库学习札记-达梦8安装),安装路径为’/dm’,执行程序保存在’/dm/bin’目录中,数据存放路径为’/dm/data’。
		
	机器名 			IP 地址 				初始状态 			操作系统 			备注
	PRIMARY			192.168.234.131		GRP1_RT_01			中标麒麟7.3			外部服务IP
					10.10.20.2													HeartBeat IP
					
	STANDBY-A		192.168.234.132		GRP1_RT_02			中标麒麟7.3			外部服务IP
					10.10.20.3													HeartBeat IP
					
	MONITOR			192.168.234.133		确认监视器			中标麒麟7.3			
					10.10.20.4
	
	实例名 		PORT_NUM 	MAL_INST_DW_PORT 	MAL_HOST 		MAL_PORT 	MAL_DW_PORT
	GRP1_RT_01 	5236 		33141 				10.10.20.2 		61141 		52141
	GRP1_RT_02 	5236 		33142 				10.10.20.3 		61142 		52142

主库、备库创建实例

	[dmdba@PRIMARY bin]$ ./dminit PATH=/dm/data INSTANCE_NAME=GRP1_RT_01
	[dmdba@STANDBY-A bin]$ ./dminit PATH=/dm/data INSTANCE_NAME=GRP1_RT_02

主库新创建实例,通过前台启动

	[dmdba@PRIMARY bin]$ ./dmserver /dm/data/DAMENG/dm.ini
	
	file dm.key not found, use default license!
	version info: develop
	Use normal os_malloc instead of HugeTLB
	Use normal os_malloc instead of HugeTLB
	DM Database Server x64 V8 1-1-87-20.06.01-122565-ENT  startup...
	Database mode = 0, oguid = 0
	License will expire on 2021-06-01
	file lsn: 0
	ndct db load finished
	ndct fill fast pool finished
	iid page's trxid[1002]
	NEXT TRX ID = 1003
	pseg_collect_items, collect 0 active_trxs, 0 cmt_trxs, 0 pre_cmt_trxs, 0 active_pages, 0 cmt_pages, 0 pre_cmt_pages
	pseg_process_collect_items end, 0 active trx, 0 active pages, 0 committed trx, 0 committed pages
	total 0 active crash trx, pseg_crash_trx_rollback sys_only(0) begin ...
	pseg_crash_trx_rollback end
	purg2_crash_cmt_trx end, total 0 page purged
	set EP[0]'s pseg state to inactive
	pseg recv finished
	nsvr_startup end.
	aud sys init success.
	aud rt sys init success.
	……
	trx: 2482 purged 1 pages
	trx: 2485 purged 8 pages
	trx: 2514 purged 1 pages
	systables desc init success.
	ndct_db_load_info success.
	nsvr_process_before_open begin.
	nsvr_process_before_open success.
	total 0 active crash trx, pseg_crash_trx_rollback sys_only(0) begin ...
	pseg_crash_trx_rollback end
	SYSTEM IS READY.

主库联机备份

	SQL> BACKUP DATABASE BACKUPSET '/dm/data/BACKUP_FILE_01';

主库拷贝备份文件到备库

[dmdba@PRIMARY data]$ scp -r /dm/data/BACKUP_FILE_01/ 192.168.234.132:/dm/data/

The authenticity of host '192.168.234.132 (192.168.234.132)' can't be established.
ECDSA key fingerprint is SHA256:kmbJVTN0u8TRXEraOVfXpiXiUvX7dYF+IJIpw8tc01o.
ECDSA key fingerprint is MD5:fc:4c:2c:e3:8f:7a:f7:fd:af:82:3d:4a:27:59:19:92.
Are you sure you want to continue connecting (yes/no)? yes
dmdba@192.168.234.132's password: 
BACKUP_FILE_01.bak                                       100% 5990KB  53.4MB/s   00:00    
BACKUP_FILE_01_1.bak                                     100%  119KB  20.0MB/s   00:00    
BACKUP_FILE_01.meta                                      100%   81KB  18.5MB/s   00:00    

备机执行脱机数据库还原与恢复

[dmdba@STANDBY-A bin] ./dmrman CTLSTMT="RESTORE DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/data/BACKUP_FILE_01'"
[dmdba@STANDBY-A bin] ./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/data/BACKUP_FILE_01'"
[dmdba@STANDBY-A bin] ./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' UPDATE DB_MAGIC"

1.主库操作

修改参数文件dm.ini

	[dmdba@PRIMARY DAMENG]$ vi dm.ini
	
	INSTANCE_NAME = GRP1_RT_01
	PORT_NUM = 5236 #数据库实例监听端口
	DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
	ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
	ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
	MAL_INI = 1 #打开 MAL 系统
	ARCH_INI = 1 #打开归档配置
	RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息

配置 dmmal.ini文件

配置 MAL 系统,各主备库的 dmmal.ini 配置必须完全一致,MAL_HOST 使用内部网络 IP,MAL_PORT 与 dm.ini 中 PORT_NUM 使用不同的端口值,MAL_DW_PORT 是各实例对应的守护进程之间,以及守护进程和监视器之间的通信端口,配置如下:

	[dmdba@PRIMARY DAMENG]$ vi dmmal.ini
	
	MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
	MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
	
	[MAL_INST1]
			MAL_INST_NAME = GRP1_RT_01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
			MAL_HOST = 10.10.20.2 #MAL 系统监听 TCP 连接的 IP 地址
			MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口
			MAL_INST_HOST = 192.168.234.131 #实例的对外服务 IP 地址
			MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
			MAL_DW_PORT = 52141 #实例本地的守护进程监听 TCP 连接的端口
			MAL_INST_DW_PORT = 33141 #实例监听守护进程 TCP 连接的端口
			
	[MAL_INST2]
			MAL_INST_NAME = GRP1_RT_02
			MAL_HOST = 10.10.20.3
			MAL_PORT = 61142
			MAL_INST_HOST = 192.168.234.132
			MAL_INST_PORT = 5236
			MAL_DW_PORT = 52142
			MAL_INST_DW_PORT = 33142

配置 dmarch.ini文件

除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 Primary 模式时,需要同步归档数据的目标实例名。
当前实例 GRP1_RT_01 是主库,需要向 GRP1_RT_02(实时备库)同步数据,因此实时归档的 ARCH_DEST 配置为 GRP1_RT_02。

	[dmdba@PRIMARY DAMENG]$ vi dmarch.ini

	[ARCHIVE_REALTIME]
	ARCH_TYPE = REALTIME #实时归档类型
	ARCH_DEST = GRP1_RT_02 #实时归档目标实例名
	
	[ARCHIVE_LOCAL1]
	ARCH_TYPE = LOCAL #本地归档类型
	ARCH_DEST = /dm/data/DAMENG/arch #本地归档文件存放路径
	ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
	ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~4294967294M

配置 dmwatcher.ini文件

修改 dmwatcher.ini 配置守护进程,配置为全局守护类型,使用自动切换模式。

	[dmdba@PRIMARY DAMENG]$ vi dmwatcher.ini

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

mount方式启动主库

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

	[dmdba@PRIMARY bin]$ ./dmserver /dm/data/DAMENG/dm.ini mount
	
	file dm.key not found, use default license!
	version info: develop
	Use normal os_malloc instead of HugeTLB
	Use normal os_malloc instead of HugeTLB
	DM Database Server x64 V8 1-1-87-20.06.01-122565-ENT  startup...
	Database mode = 0, oguid = 0
	License will expire on 2021-06-01
	file lsn: 35295
	ndct db load finished
	ndct fill fast pool finished
	nsvr_startup end.
	aud sys init success.
	aud rt sys init success.
	systables desc init success.
	ndct_db_load_info success.
	SYSTEM IS READY.

设置 OGUID

启动命令行工具 DIsql,登录主库设置 OGUID 值。

	SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
	SQL>sp_set_oguid(453301);
	SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

修改数据库模式

	SQL>alter database primary;

2.备库操作

配置 dm.ini

#实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16
INSTANCE_NAME = GRP1_RT_02
PORT_NUM = 5236 #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志重演信息

配置 dmmal.ini文件

	[dmdba@STANDBY-A bin]$ cat /dm/data/DAMENG/dmmal.ini 
	
	======================================================================================	
	MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
	MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
		
	[MAL_INST1]
	MAL_INST_NAME = GRP1_RT_01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
	MAL_HOST = 10.10.20.2 #MAL 系统监听 TCP 连接的 IP 地址
	MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口
	MAL_INST_HOST = 192.168.234.131 #实例的对外服务 IP 地址
	MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
	MAL_DW_PORT = 52141 #实例本地的守护进程监听 TCP 连接的端口
	MAL_INST_DW_PORT = 33141 #实例监听守护进程 TCP 连接的端口
				
	[MAL_INST2]
	MAL_INST_NAME = GRP1_RT_02
	MAL_HOST = 10.10.20.3
	MAL_PORT = 61142
	MAL_INST_HOST = 192.168.234.132
	MAL_INST_PORT = 5236
	MAL_DW_PORT = 52142
	MAL_INST_DW_PORT = 33142

配置 dmarch.ini

	[dmdba@STANDBY-A bin]$ cat /dm/data/DAMENG/dmarch.ini 
		
	[ARCHIVE_REALTIME]
	ARCH_TYPE = REALTIME #实时归档类型
	ARCH_DEST = GRP1_RT_01 #实时归档目标实例名
	
	[ARCHIVE_LOCAL]
	ARCH_TYPE = LOCAL
	ARCH_DEST = /dm/data/DAMENG/arch
	ARCH_FILE_SIZE = 1024
	ARCH_SPACE_LIMIT = 20480

配置 dmwatcher.ini

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

Mount 方式启动备库

[dmdba@STANDBY-A bin]$ ./dmserver /dm/data/DAMENG/dm.ini mount

设置 OGUID

启动命令行工具 DIsql,登录备库设置 OGUID 值为 453301

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(453301);
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

修改数据库为 Standby 模式

	SQL> alter database standby;

分别创建主、备守护服务开机自启动

[root@PRIMARY ~]# /dm/script/root/dm_service_installer.sh -t dmwatcher -p GRP1_RT_01 -watcher_ini /dm/data/DAMENG/dmwatcher.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmWatcherServiceGRP1_RT_01.service to /usr/lib/systemd/system/DmWatcherServiceGRP1_RT_01.service.
创建服务(DmWatcherServiceGRP1_RT_01)完成

[root@STANDBY-A ~]# /dm/script/root/dm_service_installer.sh -t dmwatcher -p GRP1_RT_02 -watcher_ini /dm/data/DAMENG/dmwatcher.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmWatcherServiceGRP1_RT_02.service to /usr/lib/systemd/system/DmWatcherServiceGRP1_RT_02.service.
创建服务(DmWatcherServiceGRP1_RT_02)完成

启动守护服务
[root@PRIMARY ~]# systemctl start DmWatcherServiceGRP1_RT_01.service
[root@STANDBY-A ~]# systemctl start DmWatcherServiceGRP1_RT_02.service

3.配置监控

[root@Monitor monitor]# cat dmmonitor.ini
	
	MON_DW_CONFIRM = 1 #确认监视器模式
	MON_LOG_PATH = /dameng/dmdbms/monitor/log #监视器日志文件存放路径
	MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
	MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
	MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
	[GRP1]
	MON_INST_OGUID = 453301 #组 GRP1 的唯一 OGUID 值
	#以下配置为监视器到组 GRP1 的守护进程的连接信息,以―IP:PORT‖的形式配置
	#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
	MON_DW_IP = 10.10.20.2:52141
	MON_DW_IP = 10.10.20.3:52142

启动监控

[dmdba@Monitor bin]$ ./dmmonitor /dameng/dmdbms/monitor/dmmonitor.ini

[monitor]         2020-12-14 11:11:13: DMMONITOR[4.0] V8
[monitor]         2020-12-14 11:11:13: DMMONITOR[4.0] IS READY.

[monitor]         2020-12-14 11:11:13: 收到守护进程(GRP1_RT_01)消息
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2020-12-14 11:11:13  OPEN           OK        GRP1_RT_01       OPEN        PRIMARY   VALID    3        39133           39133           

[monitor]         2020-12-14 11:11:13: 收到守护进程(GRP1_RT_02)消息
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2020-12-14 11:11:13  OPEN           OK        GRP1_RT_02       OPEN        STANDBY   VALID    3        39133           39133           

show
2020-12-14 11:12:00 
#================================================================================#
GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG  
GRP1             453301      TRUE            AUTO            FALSE     


<<DATABASE GLOBAL INFO:>>
IP              MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
10.10.20.2      52141        2020-12-14 11:11:59  GLOBAL    VALID     OPEN           GRP1_RT_01       OK        1     1     OPEN        PRIMARY   DSC_OPEN       REALTIME  VALID    

EP INFO:
INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
5236       OK        GRP1_RT_01       OPEN        PRIMARY   0          0            REALTIME  VALID    3968            39133           3968            39133           NONE                  

<<DATABASE GLOBAL INFO:>>
IP              MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
10.10.20.3      52142        2020-12-14 11:11:59  GLOBAL    VALID     OPEN           GRP1_RT_02       OK        1     1     OPEN        STANDBY   DSC_OPEN       REALTIME  VALID    

EP INFO:
INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
5236       OK        GRP1_RT_02       OPEN        STANDBY   0          0            REALTIME  VALID    3943            39133           3943            39133           NONE                  

DATABASE(GRP1_RT_02) APPLY INFO FROM (GRP1_RT_01):
DSC_SEQNO[0], (ASEQ, SSEQ, KSEQ)[3968, 3968, 3968], (ALSN, SLSN, KLSN)[39133, 39133, 39133], N_TSK[0], TSK_MEM_USE[0]


#================================================================================#
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值