DM8 数据库主备/读写分离集群增加节点
环境说明
在现有的DM8 主备集群或者读写分离集群上增加节点。
实例名 | 业务IP | 心跳IP | 备注 |
---|---|---|---|
GRP1_RT_01 | 192.168.15.40 | 192.168.25.40 | 主库 |
GRP1_RT_02 | 192.168.15.41 | 192.168.25.41 | 备库 |
GRP1_RT_03 | 192.168.15.33 | 192.168.25.33 | 新添加备库 |
添加新节点
1、安装数据库软件并创建新备库实例
(1)安装软件,略。
(2)创建实例
[dmdba@localhost bin]$ ./dminit path=/home/dmdba/dmdata page_size=32 extent_size=32
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2022-09-24
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
log file path: /home/dmdba/dmdata/DAMENG/DAMENG01.log
log file path: /home/dmdba/dmdata/DAMENG/DAMENG02.log
write to dir [/home/dmdba/dmdata/DAMENG].
create dm database success.
2、备份主库恢复到新备库
(1)主库进行联机全库备份
[dmdba@localhost bin]$ ./disql
disql V8
用户名:
密码:
服务器[LOCALHOST:5236]:处于主库打开状态
登录使用时间 : 3.517(ms)
SQL> backup database backupset '/home/dmdba/db_bak2';
操作已执行
已用时间: 00:00:01.181. 执行号:600.
(2)拷贝备份
scp -r /home/dmdba/db_bak2 192.168.15.33:/home/dmdba
(3)备库进行脱机恢复
./dmrman CTLSTMT="restore database '/home/dmdba/dmdata/DAMENG/dm.ini' from backupset '/home/dmdba/db_bak2'"
./dmrman CTLSTMT="recover database '/home/dmdba/dmdata/DAMENG/dm.ini' from backupset '/home/dmdba/db_bak2'"
./dmrman CTLSTMT="recover database '/home/dmdba/dmdata/DAMENG/dm.ini' update db_magic"
3、配置新备库
3.1 配置dm.ini
在新添加节点上配置新备库dm.ini参数修改如下:
INSTANCE_NAME = GRP1_RT_03 ##新添加节点数据库实例名
PORT_NUM = 5236 ##端口默认5236
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
3.2 配置dmmal.ini
拷贝主库dmmal.ini文件到新备库上,并添加新备库内容,最终配置如下:
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01
MAL_HOST = 192.168.25.40
MAL_PORT = 61142
MAL_INST_HOST = 192.168.15.40
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 192.168.25.41
MAL_PORT = 61142
MAL_INST_HOST = 192.168.15.41
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
[MAL_INST3]
MAL_INST_NAME = GRP1_RT_03
MAL_HOST = 192.168.25.33
MAL_PORT = 61142
MAL_INST_HOST = 192.168.15.33
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
3.3 配置dmarch.ini
创建或者修改dmarch.ini文件,配置本地归档和实时归档,最终文件内容如下:
ARCH_WAIT_APPLY = 0
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RT_01
[ARCHIVE_REALTIME2]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RT_02
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dmarch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 1024
3.4 配置dmwatcher.ini
创建并修改dmwatcher.ini文件,配置守护进程,配置为全局守护类型,使用自动切换模式。(也可以直接主库上将该文件拷贝过来)
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 30
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一OGUID值
INST_INI = /home/dmdba/dmdata/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 #指定备库重演日志的时间阀值,默认关闭
3.5 以mount方式启动新备库
./dmserver /home/dmdba/dmdata/DAMENG/dm.ini mount
3.6 设置OGUID并修改数据库模式为STANDBY
disql使用SYSDBA登录新备库,执行下面命令:
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(453331);
alter database standby;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
3.7 新备库配置dmwatcher系统服务
[root@localhost ~]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /home/dmdba/dmdata/DAMENG/dmwatcher.ini -p GRP1
Created symlink from /etc/systemd/system/multi-user.target.wants/DmWatcherServiceGRP1.service to /usr/lib/systemd/system/DmWatcherServiceGRP1.service.
创建服务(DmWatcherServiceGRP1)完成
4、原集群主备库动态添加MAL配置
分别在原集群主备库中执行相关命令,动态增加MAL中新备库GRP1_RT_03的相关配置信息:
SF_MAL_CONFIG(1,0);
SF_MAL_INST_ADD('MAL_INST3','GRP1_RT_03','192.168.25.33',61142,'192.168.15.33',5236,52142,0,33142);
SF_MAL_CONFIG_APPLY();
SF_MAL_CONFIG(0,0);
5、原集群主备库动态添加归档配置
(1)首先原主库节点和备库节点均需要关闭dmwatcher服务,如下:
[dmdba@localhost bin]$ ./DmWatcherServiceGRP1 stop
Stopping DmWatcherServiceGRP1: [ OK ]
(2)分别在原集群主备库中执行(需要数据库处于mount状态),添加dmarch.ini中归档节点,执行命令如下:
disql登录主库:
./disql SYSDBA
alter database mount;
alter database add archivelog 'DEST=GRP1_RT_03,TYPE=REALTIME';
disql登录备库:
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
alater database mount;
alter database add archivelog 'DEST=GRP1_RT_03,TYPE=REALTIME';
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
6、修改监视器dmmonitor.ini
在监视器dmmonitor.ini文件中添加新备库信息,最终配置如下:
MON_DW_Confirm = 1 #确认监视器模式
MON_LOG_PATH = /home/dmdba/dmdbms/log/GRP1 #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔60s定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大32M
MON_LOG_SPACE_LIMIT = 1024 #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 453331 #组GRP1的唯一OGUID值
MON_DW_IP = 192.168.25.40:52142
MON_DW_IP = 192.168.25.41:52142
MON_DW_IP = 192.168.25.33:52142 ##新备库
7、启动所有集群节点(包括新添加节点)的dmwatcher服务,并重启监视器
启动所有节点dmwatcher服务:
cd $DM_HOME/bin
./DmWatcherServiceGRP1 start
Starting DmWatcherServiceGRP1: [ OK ]
启动监视器,查看集群节点信息:
至此,集群新备库节点添加完成。
简单总结
通过上面这种方式添加集群备库节点,相对于整个集群停机搭建的方式,时间上要节省很多,停机时间也很短。
停机时间主要在现有主备库添加新备库归档信息时,需要将停dmwatcher服务然后将数据库切换到mount状态,添加完成后启动dmwatcher服务即可。
更多资讯请上达梦技术社区了解:https://eco.dameng.com