前言
参考之前的方法安装两套DSC集群,一套做主一套做备一、规划
主库实例为 dsc1、dsc2
备库实例为 dscstd1、dscstd2
备份目录 /dm/dmbak/
主库dsc1 ip:192.168.16.141 私网IP:10.10.10.141
主库dsc2 ip:192.168.16.142 私网IP:10.10.10.142
备库dscstd1 ip:192.168.16.151 私网IP:10.10.10.151
备库dscstd2 ip:192.168.16.152 私网IP:10.10.10.152
二、主库数据恢复到备库
1.主库备份
关闭数据库service服务
使用 dmrman 工具备份数据库,主库任意一个DSC节点执行,使用dmdba用户操作
./dmrman use_ap=2 dcr_ini=/dm/dmdba/config/dmdcr.ini
执行 backup 全库。
backup database '/dm/dmdba/config/dsc1/dm.ini' backupset '/dm/dmbak/bakfull';
2.备份还原(备库执行)
备库关闭service数据库服务
拷贝主库备份到备库合适目录,执行以下命令
scp -r /dm/dmbak/bakfull 192.168.16.151:/dm/dmbak/
关闭数据库后,使用 dmrman 工具还原备库,dmdba 用户到安装目录的 bin 下执行以下命令:
./dmrman
执行 restore。
restore database '/dm/dmdata/DAMENG/dm.ini' from backupset '/dm/dmbak/bakfull';
执行 recover。
recover database '/dm/dmdata/DAMENG/dm.ini' from backupset '/dm/dmbak/bakfull';
执行 recover update db_magic。
recover database '/dm/dmdata/DAMENG/dm.ini' update db_magic;
执行结果如下
recover database '/dm/dmdba/dmdbms/dmrw/dm.ini' update db_magic;
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[37904]
EP[0]'s apply_lsn[37904] >= end_lsn[37904]
recover successfully!
time used: 984.325(ms)
三.配置主库DSC参数(dmdba用户)
1.修改两个实例的配置文件 dm.ini
修改实例的 dm.ini 文件参数,执行以下命令:
vi /dm/dmdba/config/dsc1/dm.ini
vi /dm/dmdba/config/dsc1/dm.ini
主库两个节点修改以下参数值:
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
ARCH_INI = 1 #开启归档模式
MAL_INI = 1
2.修改归档配置文件 dmarch.ini
在config目录下修改 dmarch.ini,执行以下命令:
vi /dm/dmdba/config/dsc1/dmarch.ini
vi /dm/dmdba/config/dsc2/dmarch.ini
节点 DSC1添加以下内容:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = dscstd1/dscstd2
节点DSC2添加以下内容:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = dscstd1/dscstd2
3.修改MAL系统配置文件 dmmal.ini
在 DSC 集群的 dmmal.ini 文件基础上,增加备库的配置项。所有节点 dmmal.ini 文件内容是一致的,执行以下命令:
主备库文件内容要相同。
[mal_inst0]
mal_inst_name = DSC1
mal_host = 10.10.10.141
mal_port = 9236
MAL_INST_HOST = 192.168.16.141 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 3567 #实例本地的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 4567 #实例监听守护进程 TCP 连接的端口
[mal_inst1]
mal_inst_name = DSC2
mal_host = 10.10.10.142
mal_port = 9236
MAL_INST_HOST = 192.168.16.142
MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 3567
MAL_INST_DW_PORT = 4567
[MAL_INST2]
MAL_INST_NAME = dscstd1
MAL_HOST = 10.10.10.151
MAL_PORT = 9236
MAL_INST_HOST = 192.168.16.151
MAL_INST_PORT = 5236
MAL_DW_PORT = 3567
MAL_INST_DW_PORT = 4567
[MAL_INST3]
MAL_INST_NAME = dscstd2
MAL_HOST = 10.10.10.152
MAL_PORT = 9236
MAL_INST_HOST = 192.168.16.152
MAL_INST_PORT = 5236
MAL_DW_PORT = 3567
MAL_INST_DW_PORT = 4567
4.修改守护进程配置文件 dmwatcher.ini
在DSC两个实例下新建文件 dmwatcher.ini,执行以下命令:
/dm/dmdba/config/dsc1/dmwatcher.ini
节点DSC1
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = MANUAL #自动切换模式
DW_ERROR_TIME = 60 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 35 #本地实例故障认定时间
INST_INI = /dm/dmdba/config/dsc1/dm.ini#dm.ini 配置文件路径
DCR_INI = /dm/dmdba/config/dmdcr.ini #dmdcr.ini 配置文件路径
INST_OGUID = 100011 #守护系统唯一 OGUID 值
INST_AUTO_RESTART = 0 #关闭实例的自动启动功能
节点DSC2
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 60
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 35
INST_INI = /dm/dmdba/config/dsc2/dm.ini#dm.ini 配置文件路径
DCR_INI = /dm/dmdba/config/dmdcr.ini #dmdcr.ini 配置文件路径
INST_OGUID = 100011
INST_AUTO_RESTART = 0
四.修改备库DSC参数
1.修改备库dsc两个实例dm.ini文件
使用 dmdba 用户,到数据库实例目录下
vi /dm/dmdba/config/dscstd1/dm.ini
vi /dm/dmdba/config/dscstd2/dm.ini
主库两个节点修改以下参数值:
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
ARCH_INI = 1 #开启归档模式
MAL_INI = 1
2.配置备库dsc两个实例dmarch.ini
在config目录下修改 dmarch.ini,执行以下命令:
节点 dscstd1添加以下内容:
vi /dm/dmdba/config/dscstd1/dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = dsc1/dsc2
节点dscstd2添加以下内容:
vi /dm/dmdba/config/dscstd2/dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = dsc1/dsc2
3.配置备库dsc两个实例dmwatcher.ini
在DSCSTD两个实例下新建文件 dmwatcher.ini,执行以下命令:
节点DSCSTD1
vi /dm/dmdba/config/dscstd1/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = MANUAL #自动切换模式
DW_ERROR_TIME = 60 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 35 #本地实例故障认定时间
INST_INI = /dm/dmdba/config/dscstd1/dm.ini#dm.ini 配置文件路径
DCR_INI = /dm/dmdba/config/dmdcr.ini #dmdcr.ini 配置文件路径
INST_OGUID = 100011 #守护系统唯一 OGUID 值
INST_AUTO_RESTART = 0 #关闭实例的自动启动功能
节点DSCSTD2
vi /dm/dmdba/config/dscstd2/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 60
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 35
INST_INI = /dm/dmdba/config/dscstdd2/dm.ini#dm.ini 配置文件路径
DCR_INI = /dm/dmdba/config/dmdcr.ini #dmdcr.ini 配置文件路径
INST_OGUID = 100011
INST_AUTO_RESTART = 0
五、启动数据库
1.启动所有实例到 mount 状态
DSC1进入bin目录启动到mount,执行以下命令:
./dmserver /dm/dmdba/config/dsc1/dm.ini dcr_ini=/dm/dmdba/config/dmdcr.ini mount
DSC2进入bin启动到mount,执行以下命令:
./dmserver /dm/dmdba/config/dsc2/dm.ini dcr_ini=/dm/dmdba/config/dmdcr.ini mount
DSCSTD1进入bin目录启动到mount,执行以下命令:
./dmserver /dm/dmdba/config/dscstd1/dm.ini dcr_ini=/dm/dmdba/config/dmdcr.ini mount
DSCSTD2进入bin启动到mount,执行以下命令:
./dmserver /dm/dmdba/config/dscstd2/dm.ini dcr_ini=/dm/dmdba/config/dmdcr.ini mount
主库DSC任意节点修改数据库模式为 primary,执行以下命令:
SP_SET_OGUID(100011);
ALTER DATABASE PRIMARY;
备库DSCSTD修改数据库模式为 standby,执行以下命令:
SP_SET_OGUID(100011);
ALTER DATABASE STANDBY;
2.启动守护进程
dmdba 用户下,到数据库安装目录的 bin 下执行(所有节点都执行)。
DSC1
./dmwatcher /dm/dmdba/config/dsc1/dmwatcher.ini
DSC2
./dmwatcher /dm/dmdba/config/dsc2/dmwatcher.ini
DSCSTD1
./dmwatcher /dm/dmdba/config/dscstd1/dmwatcher.ini
DSCSTD2
./dmwatcher /dm/dmdba/config/dscstd2/dmwatcher.ini
守护进程启动后,会将 Mount 的实例 Open。
3.配置监视器 dmmonitor.ini,本示例在备库dscstd1上配置
新建dmmonitor.ini文件
vi /dm/dmdata/config/dmmonitor.ini
添加以下内容:
MON_DW_CONFIRM = 0 #0监控监视器模式 1确认监视器模式
MON_LOG_PATH = /dm/dmdata/monitor_log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 64
MON_LOG_SPACE_LIMIT = 0
MON_DW_CONFIRM = 0
[GRP1]
MON_INST_OGUID = 100011
MON_DW_IP = 10.10.10.141:3567/10.10.10.142:3567 #心跳地址:端口
MON_DW_IP = 10.10.10.151:3567/10.10.10.152:3567
启动监视器,执行以下命令:
./dmmonitor /dm/dmdata/config/dmmonitor.ini
启动后输入 show 命令查看集群状态。
六、注册服务
以上启动为前台方式启动,仅用户搭建过程中验证配置。配置没问题后需要将实例,守护进程和确认监视器注册为系统服务。
使用 root 用户,到数据库安装目录的 script/root 下,执行。
1.注册服务
注册守护进程服务(主备库都执行)。
节点dsc1
./dm_service_installer.sh -t dmwatcher -p dsc1 -watcher_ini /dm/dmdba/config/dsc1/dmwatcher.ini
节点dsc2
./dm_service_installer.sh -t dmwatcher -p dsc2 -watcher_ini /dm/dmdba/config/dsc2/dmwatcher.ini
节点dscstd1
./dm_service_installer.sh -t dmwatcher -p dscstd1 -watcher_ini /dm/dmdba/config/dscstd1/dmwatcher.inii
节点dscstd2
./dm_service_installer.sh -t dmwatcher -p dscstd2 -watcher_ini /dm/dmdba/config/dscstd2/dmwatcher.ini
注册监视器服务(只需在监视器服务器上执行),执行以下命令:
./dm_service_installer.sh -t dmmonitor -p confirm -monitor_ini /dm/dmdada/config/dmmonitor.ini
2.以服务方式启动
主备库在各自节点启动数据库实例,执行以下命令:
systemctl start DmServiceds1
systemctl start DmServiceds2
systemctl start DmServicedsstd1
systemctl start DmServicedsstd2
主备库在各自节点启动守护进程,执行以下命令:
systemctl start DmWatcherServicedsc1
systemctl start DmWatcherServicedsc2
systemctl start DmWatcherServicedscstd1
systemctl start DmWatcherServicedscstd2
监控服务器(主备外)启动监视器,执行以下命令:
systemctl start DmMonitorServiceconfirm
七、disql 客户端验证
使用 disql 客户端登录主库,创建测试表,插入数据,执行以下命令:
./disql SYSDBA/SYSDBA@192.168.16.141:5236
SQL 提示符下执行以下命令:
create table test(id int);
insert into test values (1);
commit;
使用 disql 客户端登录备库,查询测试表验证,执行以下命令:
./disql SYSDBA/SYSDBA
SQL 提示符下执行以下命令:
select * from test;
服务器[LOCALHOST:5236]:处于备库打开状态
登录使用时间: 6.908(毫秒)
disql V8
SQL> select * from test;
行号 ID
---------- -----------
1 1
已用时间: 9.111(毫秒). 执行号:2.
总结
更多信息可前往达梦官网社区
https://eco.dameng.com/docs/zh-cn/ops/standard-dsc-cluster.html