1. 集群相关知识
1.1 实时主备集群:
实时主备由一个主库以及一个或者多个配置了实时(Realtime)归档的备库组成,其主要目的是保障数据库可用性,提高数据安全性。
实时主备系统中,主库提供完整的数据库功能,备库提供只读服务。
主库修改数据产生的redo日志,通过实时归档机制,在写入联机redo日志文件之前发送到备库,实时备库通过重演redo日志与主库保持数据同步。当主库出现故障时,备库在将所有redo日志重演结束后,就可以切换为主库对外提供数据库服务。
主备可以使单机,也可以是DSC、MPP。
1.2 DM数据守护的实现原理:
将主库(生产库)产生的redo日志传输到备库,备库接收并重新应用redo日志,从而实现备库与主库的数据同步。
DM数据守护的核心思想是监控数据库状态,获取主、备数据同步情况,为redo日志传输与重演过程中出现的各种异常情况提供一些列的解决方案。
DM数据守护系统结构:
主库、备库
Redo日志、Redo日志传输、Redo日志重演
数据守护(dmwatcher)、监听器(dmmonitor)
1.3 归档类型
本地归档:
Redo日志写入日志文件后,又由归档线程再写入本地服务器中的归档日志。
实时归档(Realtime):
实时归档只有在数据库模式为Primary主库才生效,是实现mpp和实时主备的基础。在redo日志写入联机日志文件之前,再通过MAL系统将redo_buf发送到备库。
即时归档(Timely):
在redo日志写入联机日志文件之后,再通过MAL系统将redo_buf发送到备库,即时归档是读写分离实现的基础,一个主库最多配8个即时备库。
注意:说白了只有即时归档是在写入内存之后就发送过去了,并未发生IO,其余模式是写到磁盘之后再发送。
这里说的归档之前说过了,所以就简单介绍下,不做过多赘述。
远程归档:
Redo日志写入日志文件后,又由归档线程再写入远程服务器中的归档日志。
2. 集群部署
2.1 端口规划
实例名 | PORT_NUM | MAL_INST_HOST | MAL_INST_PORT | MAL_DM_INST_PORT | MAL_DM_PORT | MAL_PORT | MAL_HOST | |||
DWC1 | 5236 | 192.168.1.119 | 5236 | 5237 | 5238 | 5239 | 192.168.1.119 | |||
DWC2 | 5236 | 192.168.1.120 | 5236 | 5237 | 5238 | 5239 | 192.168.1.120 | |||
MONITOR | 192.168.1.121 |
端口号相关说明:
PORT_NUM:数据库实例监听端口
MAL_INST_HOST:数据库的对外服务IP地址
MAL_INST_PORT:实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_INST_DM_PORT:实例监听守护进程TCP连接的端口
MAL_DM_PORT:实例对应的守护进程监听TCP连接的端口
MAL_HOST:MAL系统监听TCP连接的IP地址
MAL_PORT:MAL系统监听TCP连接的端口
初始化数据库:
分别在两台数据库执行如下命令:
./dminit path=/dm/data/DAMENG db_name=DAMENG instance_name=DMSERVER01 PAGE_SIZE=16 extent_size=16 case_sensitive=Y CHARSET=1 port_num=5236 log_size=2048
分别在两台数据库服务器修改dm.ini、dmmal.ini、dmwatch.ini、dmarch.ini
dm.ini:根据之前的规划参数修改IP、PORT
dmmal.ini
MAL_CHECK_INTERVAL = 5 MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 判定MAL链路断开的时间
MAL_TEMP_PATH = /data/dmdata/DAMENG/DAMENG/MAL_TEMP
[DMSERVER01]
MAL_INST_NAME = DMSERVER01 实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST =192.168.1.119 MAL系统监听TCP连接的IP地址
MAL_PORT = 5239 MAL系统监听TCP连接的端口
MAL_INST_HOST =192.168.1.119 实例的对外服务IP地址
MAL_INST_PORT = 5236 实例的对外服务端口,和dm.ini中的PORT_NUM 一致
MAL_DW_PORT = 5238 实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 5237
[DMSERVER02]
MAL_INST_NAME = DMSERVER02 实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST =192.168.1.120 MAL系统监听TCP连接的IP地址
MAL_PORT = 5239 MAL系统监听TCP连接的端口
MAL_INST_HOST =192.168.1.120 实例的对外服务IP地址
MAL_INST_PORT = 5236 实例的对外服务端口,和dm.ini中的PORT_NUM 一致
MAL_DW_PORT = 5238 实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 5237
dmwatcher.ini
[GROUP_DMSERVER]
DW_TYPE = GLOBAL 全局守护类型
DW_MODE = AUTO 自动切换模式
DW_ERROR_TIME = 10 远程守护进程故障认定时间
INST_RECOVER_TIME = 60 主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 60 本地实例故障认定时间
INST_OGUID = 453331 守护系统唯一 OGUID 值
INST_INI = /data/dmdata/DAMENG/DAMENG/dm.ini dm.ini 配置文件路径
INST_AUTO_RESTART = 1 打开实例的自动启动功能
INST_STARTUP_CMD = /dm/data/dmdbms/bin/DmServiceDMSERVER01 restart 命令行方式启动
RLOG_SEND_THRESHOLD = 0 指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0
dmarch.ini
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME 实时归档类型
ARCH_DEST = DMSERVER02
[ARCHIVE_DMSERVER01]
ARCH_TYPE = LOCAL 本地归档类型
ARCH_DEST = /dm/data/dmarch 本地归档文件存放路径
ARCH_FILE_SIZE = 1024 单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 512000
对dwc1进行一次全库备份:
RMAN> backup database '/dm/data/DAMENG/DAMENG/dm.ini' backupset '/data/dmdata/DAMENG/DAMENG/bak/full_backup_zdsb';
将dwc1的备份集拷贝到dwc2,并在dwc2上进行全库的还原、恢复:
RMAN> restore database '/data/dmdata/DAMENG/DAMENG/dm.ini' from backupset '/data/dmdata/DAMENG/DAMENG/bak/full_backup_zdsb';
RMAN> recover database '/data/dmdata/DAMENG/DAMENG/dm.ini' from backupset '/data/dmdata/DAMENG/DAMENG/bak/full_backup_zdsb';
RMAN> recover database '/data/dmdata/DAMENG/DAMENG/dm.ini' update db_magic;
在monitor服务器部署dmmonitor,修改dmmonitor.ini:
MON_DW_CONFIRM = 1 确认监视器模式 0:为普通监视器,缺省为0。1:为确认监视器
MON_LOG_PATH = /dm/data/dmdbms/log/log_dmmonitor 监视器日志文件存放路径
MON_LOG_INTERVAL = 60 每隔60s定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 512 每个日志文件最大32M
MON_LOG_SPACE_LIMIT = 4096 不限定日志文件总占用空间
[GROUP_DMSERVER]
MON_INST_OGUID = 453331 组GROUP_A的唯一OGUID值
以下配置为监视器到组GRP1的守护进程的连接信息,以“IP:PORT”的形式配置
IP对应dmmal.ini中的MAL_HOST,PORT对应dmmal.ini中的MAL_DW_PORT
MON_DW_IP =192.168.1.119:5238
MON_DW_IP =192.168.1.120:5238
注册数据库服务:
/dm/data/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DMSERVER01 -dm_ini /dm/data/DAMENG/DAMENG/dm.ini
注册守护服务:
/dm/data/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DMSERVER01 -dm_ini /dm/data/DAMENG/DAMENG/dm.ini
注册监视器服务:
/dm/data/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DMSERVER01 -dm_ini /dm/data/DAMENG/DAMENG/dm.ini
启动dwc1(mount状态),修改数据库为主库状态,修改oguid:
./DmServiceDMSERVER01 start
./disql
SQL> sp_set_oguid(453331);
SQL> alter database primary;
启动dwc2(mount状态),修改数据库为主库状态,修改oguid:
./DmServiceDMSERVER02 start
./disql
SQL> sp_set_oguid(453331);
SQL> alter database standby;
配置 /etc/dm_svc.conf:
TIME_ZONE=(480)
LANGUAGE=(cn)
DM_SERVER=(192.168.1.119:5236,192.168.1.120:5236)
[DM_SERVER]
LOGIN_MODE =(1)
SWITCH_TIME=(60)
SWITCH_INTERVAL=(1000)
解释说明:
LOGIN_MODE =(1) // 1:只连接主库;
SWITCH_TIME=60) // 60: 检测到故障服务器之间切换的次数
SWITCH_INTERVAL=(1000) // 1秒 服 务 器 之 间 切 换 的 时 间 间 隔
达梦在线服务平台:https://eco.dameng.com