前提
“同步备库”一般用于对主库性能要求较高,想要避免因备库故障或异步恢复引发的Suspend 状态切换,但又希望备库的数据延迟不要太大的应用场景。
在达梦数据库DM8中,“同步备库”可以通过“同步归档模式”实现。与实时归档相比,同步归档时机为主库本地归档刷盘之后,主库发送归档到同步备库失败时,不会切换为 Suspend状态,而是直接将备库的归档状态设置为无效。
说明:同步归档模式是新版本特性(2023年第三季度以后版本支持),老版本不支持。
部署规划
IP规划:
服务ip | 心跳ip | 数据库名 | 实例名 |
192.168.231.133 | 192.168.231.133 | dmdb | DW1 |
192.168.231.135 | 192.168.231.135 | dmdb | DW2 |
端口规划:
实例名 | 实例端口 | MAL 系统监听 TCP 连接的端口 | 实例本地的守护进程监听 TCP 连接的端口 | 实例监听守护进程 TCP 连接的端口 |
DW1 | 5236 | 7336 | 7436 | 7536 |
DW2 | 5236 | 7336 | 7436 | 7536 |
目录规划:(在对应服务器上创建目录owner为dmdba组为dinstall)
数据库软件安装目录 | /home/dmdba/dmdbms |
实例安装目录 | /dmdata/ |
归档日志存放目录 | /dmdata/arch |
备份文件存放目录 | /dmdata/dmbak/ |
数据库软件安装
查了一下数据库服务器的时区是正常的:
使用root用户挂载数据库软件的iso文件:
mkdir -p dmisomount -o loop dm8_xxx.iso dmiso使用dmdba用户安装软件:
执行以下命令,切换到dmiso目录下执行DMInstall.bin文件开始安装,选择【-i】参数以命令行方式安装。
su - dmdbacd /dmiso./DMInstall.bin -i选择安装程序的语言c/C为中文,e/E为英文。
提示是否安装key文件,输入N跳过。
选择时区,21即东8区。
选择安装类型,默认典型安装(包含所有内容)。
选择软件安装目录,默认/home/dmdba/dmdbms
确认安装
安装完成提示使用root执行脚本:
/home/dmdba/dmdbms/script/root/root_installer.sh配置同步主备
解决方法:修改dm_svc.conf配置文件,将多余的+去掉。注意:这个system32下的配置文件不可直接修改,需要在外面修改好后复制进去,替换掉原来的文件。
3.1初始化实例
主库:
dminit path=/dmdata page_size=32 extent_size=32 log_size=2048 db_name=dmdb instance_name=dw1备库:
dminit path=/dmdata page_size=32 extent_size=32 log_size=2048 db_name=dmdb instance_name=dw23.2脱机备份数据库
主库启动数据库出现system is ready后输入exit停止数据库:
dmserver dmdata/dmdb/dm.ini执行全备:
dmrmanbackup database '/dmdata/dmdb/dm.ini' backupset '/home/dmdba/bakfull’;3.3备份还原备库
将主库备份文件scp到备库,进行备份还原备库:
dmrman use_ap=2执行restore:
restore database '/dmdata/dmdb/dm.ini' from backupset '/home/dmdba/bakfull';完成后执行 recover:
recover database '/dmdata/dmdb/dm.ini' from backupset '/home/dmdba/bakfull';最后执行recover update db_magic:
recover database '/dmdata/dmdb/dm.ini' update db_magic;3.4修改dm.ini
主备上修改以下参数值:
vi dmdata/dmdb/dm.ini
MAL_INI = 1ARCH_INI = 1ALTER_MODE_STATUS = 0ENABLE_OFFLINE_TS = 23.5配置归档文件dmarch.ini
vi dmdata/dmdb/dmarch.ini
主节点:
[ARCHIVE_LOCAL1]ARCH_TYPE = LOCALARCH_DEST = dmdata/archARCH_FILE_SIZE = 2048ARCH_SPACE_LIMIT = 102400[ARCHIVE_SYNC]ARCH_TYPE = SYNCARCH_DEST = dw2ARCH_RECOVER_TIME = 1备节点:
ARCHIVE_LOCAL1]ARCH_TYPE = LOCALARCH_DEST = dmdata/archARCH_FILE_SIZE = 2048ARCH_SPACE_LIMIT = 1024003.6配置MAL系统配置文件dmmal.ini
主备节点一致:
vi /dmdata/dmdb/dmmal.iniMAL_CHECK_INTERVAL = 5MAL_CONN_FAIL_INTERVAL = 15[MAL_INST1]MAL_INST_NAME = dw1MAL_HOST = 192.168.231.133MAL_PORT = 7336MAL_INST_HOST = 192.168.231.133MAL_INST_PORT = 5236MAL_DW_PORT = 7436MAL_INST_DW_PORT = 7536[MAL_INST2]MAL_INST_NAME = dw2MAL_HOST = 192.168.231.135MAL_PORT = 7336MAL_INST_HOST = 192.168.231.135MAL_INST_PORT = 5236MAL_DW_PORT = 7436MAL_INST_DW_PORT = 75363.7配置守护进程配置文件 dmwatcher.ini
主备节点一致:
vi dmdata/dmdb/dmwatcher.ini
[GRP_SN]DW_TYPE = LOCALDW_MODE = MANUALDW_ERROR_TIME = 30INST_RECOVER_TIME = 60INST_ERROR_TIME = 20INST_OGUID = 453331INST_INI = dmdata/dmdb/dm.iniINST_AUTO_RESTART = 1INST_STARTUP_CMD = home/dmdba/dmdbms/bin/dmserver主备启动到mount:
dmserver dmdata/dmdb/dm.ini mount主库执行:
disql SYSDBA/SYSDBA@localhost:5236sp_set_oguid(453331);alter database primary;备库执行:
disql SYSDBA/SYSDBA@localhost:5236sp_set_oguid(453331);alter database standby;主备启动守护进程:
dmwatcher dmdata/dmdb/dmwatcher.ini3.8配置监视器配置文件dmmonitor.ini
vi dmdata/dmdb/dmmonitor.ini
MON_DW_CONFIRM = 0MON_LOG_PATH = home/dmdba/dmdbms/logMON_LOG_INTERVAL = 60MON_LOG_FILE_SIZE = 200MON_LOG_SPACE_LIMIT = 1024[GRP_SN]MON_INST_OGUID = 453331MON_DW_IP = 192.168.253.133:7436MON_DW_IP = 192.168.253.135:7436登录监视器查看状态:
dmmonitor dmdata/dmdb/dmmonitor.ini登录主库创建T1表测试:
CREATE TABLE T1 AS SELECT * FROM DBA_USERS;登录备库查看T1表是否生成:
3.9注册服务
使用 root 用户,到数据库安装目录的script/root下。
注册守护进程服务(主备库都执行):
./dm_service_installer.sh -t dmwatcher -p dw -watcher_ini/dmdata/dmdb/dmwatcher.ini注册数据库实例服务(主备库都执行):
./dm_service_installer.sh -t dmserver -p dw -dm_ini/dmdata/dmdb/dm.ini主备执行以下命令,启动数据库实例:
su - dmdbaDmServicedw start主备执行以下命令,启动守护进程:
su - dmdbaDmWatcherServicedw start主备延迟测试
同步归档(Sync)在主库归档日志刷盘后,通过MAL系统将Redo日志发送到备库。同步备库的Redo日志重演过程与实时归档等其他类型的归档完全一致。同步归档的执行流程为:主库在归档日志刷盘后,将Redo日志发送到备库,备库收到Redo日志(RLOG_PKG)后,将其加入日志重演任务系统,并马上响应主库,不需要等待Redo日志重演结束后再响应主库。
4.1模拟测试数据
--模拟主库写入100w数据查看备库延迟情况create table t1(a int,b varchar2(100));declarebeginfor i in 1..1000000 loopinsert into t1 values(i,to_char(sysdate));end loop;commit;end;/4.2检查备库同步情况
备库数据情况备库数据成功写入,用户无感知:
查看监视器状态:
故障模拟
同步备库的守护进程也需要配置为 LOCAL 类型,因此同步备库不支持主备库切换、备库接管等操作。若有将同步备库切换为主库的需要,可以手动执行 sql语句将其切换为 PRIMARY 模式,但此时数据守护系统并不能保证该操作的正确性,需要由用户自身确保操作正确。
5.1备库故障
模拟主库在持续写入数据,持续时间5分钟:
主库写入时kill掉备库守护和数据库进程:
查看备库归档,状态已并更为invalid:
查看压测运行结果,成功率100%:
查看响应时间平稳无明显波动:
备库恢复服务后查看监视器状态,归档状态async_send,待归档同步后变更为valid:
5.2主库故障
由于同步归档LOCAL 类型,因此同步备库不支持主备库切换,需通过sql手动建备库变更为主库。
模拟主库故障,kill掉守护和数据库服务:
查看监视器状态,主库实例为error状态:
通过sql将备库切换为主库:
1)停止备库守护服务
DmWatcherServicedw stop2)执行命令将备库转换为PRIMARY模式
SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1);ALTER DATABASE MOUNT;ALTER DATABASE PRIMARY;ALTER DATABASE OPEN FORCE;5.3集群恢复
如需恢复原主备集群需重新备份恢复,参考《配置同步主备》。
对比实时主备
比较类型 | 实时主备(最大性能模式) | 同步主备 |
归档配置 | 实时备库 | 同步备库 |
主机日志 发送时机 | 写入联机日志前,发送到备库 | 归档日志刷盘之后 |
失败处理 | Suspend 数据库,保持归档状态不变,等待守护进程干预 | 直接设置归档状态为无效,不会Suspend 数据库 |
故障切换 | 监视器自动或手动切换 | 手动将备库切换为主库 |
故障后恢复集群 | 自动加入守护集群 | 需重新搭建同步备库 |
以上为本期分享,希望能带给大家帮助。想要了解更多往期干货,可访问页面最下方#达梦技术干货攻略#合集。