1. RWC概述
达梦读写分离集群(DMRWC)是DM8提供的一个用于提升并发事务处理性能的集群组件。在一个高并发的事务型系统中,当写事务占的比例相对读事务较小时,DM8提供的这种独具创新的方案DMRWC,可通过客户端来实现读、写事务的自动分离,读事务在备机执行,写事务在主机执行,减轻主机的负载。也适用于读多写少的并发事务处理类系统,通过增加从节点提升整体性能水平。
读写分离集群由一个主库以及一个或多个配置了即时(Timely)归档的备库组成。主要目标是保障数据库可用性的基础上,实现了读、写操作的自动分离,进一步提升数据库的业务支撑能力。
读写分离集群通过即时归档机制保证主、备库数据一致性,并配合达梦数据库系统的各种接口(JDBC、DPI等),将只读操作自动分流到备库,有效降低主库的负载,提升系统吞吐量。
2. 集群规划
节点 | node1 | node2 | node3 |
---|---|---|---|
服务器角色 | primary | standby,monitor | standby |
业务IP | 192.168.88.161 | 192.168.88.162 | 192.168.88.163 |
对外服务IP | 192.168.88.161 | 192.168.88.162 | 192.168.88.163 |
实例名 | RWC_01 | RWC_02 | RWC_03 |
OGUID | 453332 | 453332 | 453332 |
PORT_NUM | 5236 | 5236 | 5236 |
MAL_INST_DW_PORT | 33141 | 33142 | 33143 |
MAL_PORT | 61141 | 61142 | 61143 |
MAL_DW_PORT | 52141 | 52142 | 52143 |
安装目录 | /dm8/dmdba/dmdbms | /dm8/dmdba/dmdbms | /dm8/dmdba/dmdbms |
实例目录 | /dm8/dmdba/dmdata | /dm8/dmdba/dmdata | /dm8/dmdba/dmdata |
归档文件存放路径 | /dm8/dmdba/dmdata/DAMENG/arch | /dm8/dmdba/dmdata/DAMENG/arch | /dm8/dmdba/dmdata/DAMENG/arch |
3. 安装达梦数据库程序
三台服务器分别安装达梦数据库程序
参考DM8安装步骤:2-6https://blog.csdn.net/weixin_42546587/article/details/139498714
4. 初始化数据库实例
三台服务器分别初始化数据库实例
初始化数据库实例:#页大小32 #簇大小32 #字符集utf-8,#大小写敏感 #重做日志文件大小2048 #varchar类型对象的长度以字符为单位
使用dmdba用户
# su - dmdba
$ mkdir /dm8/dmdba/dmdata
$ cd /dm8/dmdba/dmdbms/bin/
$ ./dminit PATH=/dm8/dmdba/dmdata page_size=32 extent_size=32 CASE_SENSITIVE=1 CHARSET=1 LOG_SIZE=2048 LENGTH_IN_CHAR=1
命令行启停一次数据库实例服务
$ cd /dm8/dmdba/dmdbms/bin/
$ ./dmserver /dm8/dmdba/dmdata/DAMENG/dm.ini
日志界面显示
system is ready
SYSTEM IS READY
说明数据库实例已经启动成功啦
输入:
exit
正常关闭数据库实例服务。
5. 准备集群配置文件
5.1 创建目录
-- 三节点均操作
$ mkdir -p /dm8/dmdba/dmdata/DAMENG/arch #本地归档文件存放路径
5.2 dm.ini 数据库实例配置
修改文件dm.ini
192.168.88.161操作
$ vim /dm8/dmdba/dmdata/DAMENG/dm.ini
#实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16
INSTANCE_NAME = RWC_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 次的日志发送信息
192.168.88.162操作
$ vim /dm8/dmdba/dmdata/DAMENG/dm.ini
#实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16
INSTANCE_NAME = RWC_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 次的日志重演信息
192.168.88.163操作
$ vim /dm8/dmdba/dmdata/DAMENG/dm.ini
#实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16
INSTANCE_NAME = RWC_03
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 次的日志重演信息
5.3 dmarch.ini 配置本地归档和实时归档
创建新文件dmarch.ini
192.168.88.161操作
$ vim /dm8/dmdba/dmdata/DAMENG/dmarch.ini
ARCH_WAIT_APPLY=1
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #远程实时归档
ARCH_DEST = RWC_02 #实时归档目标实例名(当数据库GRP1_RWW_01是主库时同步到其他目标实例)
[ARCHIVE_REALTIME2]
ARCH_TYPE = REALTIME #远程实时归档
ARCH_DEST = RWC_03 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm8/dmdba/dmdata/DAMENG/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 1024 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 204800 #单位 Mb,0 表示无限制,范围 1024~4294967294M
192.168.88.162操作
$ vim /dm8/dmdba/dmdata/DAMENG/dmarch.ini
ARCH_WAIT_APPLY=1
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #远程实时归档
ARCH_DEST = RWC_01 #实时归档目标实例名(当数据库RWC_02是主库时同步到其他目标实例)
[ARCHIVE_REALTIME2]
ARCH_TYPE = REALTIME #远程实时归档
ARCH_DEST = RWC_03 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm8/dmdba/dmdata/DAMENG/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 1024 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 204800 #单位 Mb,0 表示无限制,范围 1024~4294967294M
192.168.88.163操作
$ vim /dm8/dmdba/dmdata/DAMENG/dmarch.ini
ARCH_WAIT_APPLY=1
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #远程实时归档
ARCH_DEST = RWC_01 #实时归档目标实例名
[ARCHIVE_REALTIME2]
ARCH_TYPE = REALTIME #远程实时归档
ARCH_DEST = RWC_02 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm8/dmdba/dmdata/DAMENG/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 1024 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 204800 #单位 Mb,0 表示无限制,范围 1024~4294967294M
5.4 dmmal.ini 配置 MAL 系统
创建新文件dmmal.ini
三节点均操作
$ vim /dm8/dmdba/dmdata/DAMENG/dmmal.ini
MAL_CHECK_INTERVAL = 60 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 60 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = RWC_01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.88.161 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.88.161 #实例的对外服务 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 = RWC_02
MAL_HOST = 192.168.88.162
MAL_PORT = 61142
MAL_INST_HOST = 192.168.88.162
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
[MAL_INST3]
MAL_INST_NAME = RWC_03
MAL_HOST = 192.168.88.163
MAL_PORT = 61143
MAL_INST_HOST = 192.168.88.163
MAL_INST_PORT = 5236
MAL_DW_PORT = 52143
MAL_INST_DW_PORT = 33143
5.5 dmwatcher.ini 配置守护进程
创建新文件dmwatcher.ini
三节点均操作
$ vim /dm8/dmdba/dmdata/DAMENG/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453332 #守护系统唯一 OGUID 值
INST_INI = /dm8/dmdba/dmdata/DAMENG/dm.ini #dm.ini 实例配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm8/dmdba/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
6. 准备数据
将192.168.88.161创建好的数据库实例,同步到另外两台服务器
6.1 脱机备份数据库
$ cd /dm8/dmdba/dmdbms/bin/
$ ./dmrman CTLSTMT="BACKUP DATABASE '/dm8/dmdba/dmdata/DAMENG/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dm8/dmdba/dmdata/BACKUP_FILE_01' COMPRESSED"
日志打印如下:
dmrman V8
BACKUP DATABASE '/dm8/dmdba/dmdata/DAMENG/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dm8/dmdba/dmdata/BACKUP_FILE_01' COMPRESSED
file dm.key not found, use default license!
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[38074], file_lsn[38074]
Processing backupset /dm8/dmdba/dmdata/BACKUP_FILE_01
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:03][Remaining:00:00:00]
backup successfully!
time used: 00:00:06.015
备份成功以后,在/dm8/dmdba/dmdata/路径下会生成一个BACKUP_FILE_01备份文件夹
将整个备份文件夹发送到备库
6.2 实例打压缩包并拷贝到备机
-
将备份文件打压缩包,并拷贝到备库所在机器
-
使用dmdba用户进入目录
$ cd /dm8/dmdba/
$ tar -czvf BACKUP_FILE_01.tar.gz BACKUP_FILE_01
-
拷贝文件
$ scp BACKUP_FILE_01.tar.gz dmdba@192.168.88.162:/dm8/dmdba/
$ scp BACKUP_FILE_01.tar.gz dmdba@192.168.88.163:/dm8/dmdba/
6.3 脱机数据库还原
-
分别进入两台备机服务器使用 dmdba用户执行命令
$ cd /dm8/dmdba/
$ tar -zxvf BACKUP_FILE_01.tar.gz
$ cd /dm8/dmdba/dmdbms/bin/
--RESTORE还原数据库
$ ./dmrman CTLSTMT="RESTORE DATABASE '/dm8/dmdba/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dm8/dmdba/dmdata/BACKUP_FILE_01'"
--RECOVER恢复数据库(因为脱机备份没有产生任何 REDO 日志,所以 恢复 可以跳过)
$ ./dmrman CTLSTMT="RECOVER DATABASE '/dm8/dmdba/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dm8/dmdba/dmdata/BACKUP_FILE_01'"
--更新数据库魔数db_magic:
$ ./dmrman CTLSTMT="RECOVER DATABASE '/dm8/dmdba/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC"
7. mount启动主库/备库并配置
在三台服务器分别执行: 使用dmdba用户,以mount方式启动数据库:
注意:启动后窗口不要关闭,需要继续配置数据库
$ cd /dm8/dmdba/dmdbms/bin/
$ ./dmserver /dm8/dmdba/dmdata/DAMENG/dm.ini mount
# su - dmdba
$ cd /dm8/dmdba/dmdbms/bin/
$ ./disql SYSDBA/SYSDBA
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL> sp_set_oguid(453332);
SQL> alter database primary;
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
SQL> COMMIT;
SQL> EXIT
MAL 系统:MAL 系统是基于 TCP 协议实现的一种内部通信机制,具有可靠、灵活、高效的特性。DM 通过 MAL 系统实现 Redo 日志传输,以及其他一些实例间的消息通讯。
OGUID:
数据守护唯一标识码,配置数据守护时,需要由用户指定 OGUID 值。其中数据库的OGUID在 MOUNT 状态下由系统函数 SP_SET_OGUID 设置,守护进程和监视器的 OGUID值在配置文件中设定。
系统通过 OGUID 值确定一个守护进程组,由用户保证 OGUID 值的唯一性,并确保数据守护系统中,数据库、守护进程和监视器配置相同的 OGUID 值
primary 为主库,standby 为备库
打开新窗口执行命令,在192.168.88.162:服务器执行
# su - dmdba
$ cd /dm8/dmdba/dmdbms/bin/
$ ./disql SYSDBA/SYSDBA
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL> sp_set_oguid(453332);
SQL> alter database standby;
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
SQL> COMMIT;
SQL> EXIT
打开新窗口执行命令,在192.168.88.163:服务器执行
# su - dmdba
$ cd /dm8/dmdba/dmdbms/bin/
$ ./disql SYSDBA/SYSDBA
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL> sp_set_oguid(453332);
SQL> alter database standby;
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
SQL> COMMIT;
SQL> EXIT
8. 配置监视器
将监视器配置在备库,使用dmdba用户进入目录
在192.168.88.162操作
mkdir /dm8/dmdba/dmdata/DAMENG/dmmonitorlog
8.1 dmmonitor_auto.ini 配置确认监视器
$ cd /dm8/dmdba/dmdata/DAMENG/
$ vim dmmonitor_auto.ini
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /dm8/dmdba/dmdata/DAMENG/dmmonitorlog #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 453332 #组 GRP1 的唯一 OGUID 值
#以下配置为监视器到组 GRP1 的守护进程的连接信息,以―IP:PORT‖的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.88.161:52141
MON_DW_IP = 192.168.88.162:52142
MON_DW_IP = 192.168.88.163:52143
8.2 dmmonitor_manual.ini 配置普通监视器
$ vim dmmonitor_manual.ini
MON_DW_CONFIRM = 0 #普通监视器模式
MON_LOG_PATH = /dm8/dmdba/dmdata/DAMENG/dmmonitorlog #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 453332 #组 GRP1 的唯一 OGUID 值
#以下配置为监视器到组 GRP1 的守护进程的连接信息,以―IP:PORT‖的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.88.161:52141
MON_DW_IP = 192.168.88.162:52142
MON_DW_IP = 192.168.88.163:52143
8.3 新建打开普通监视器的脚本
$ cd /dm8/dmdba/dmdbms/
$ vim show.sh
#!/bin/sh
cd /dm8/dmdba/dmdbms/bin; ./dmmonitor /dm8/dmdba/dmdata/DAMENG/dmmonitor_manual.ini;
8.4 启动普通监视器
$ cd /dm8/dmdba/dmdbms/
$ chmod 777 show.sh
$ ./show.sh
$ 注意打印的日志会报未收到守护进程消息(是因为下一步才启动守护进程,可以看到交互的日志)
9. 前台启动数据守护进程
-
在三台服务器分别执行
-
使用dmdba用户
$ cd /dm8/dmdba/dmdbms/bin/
$ ./dmwatcher /dm8/dmdba/dmdata/DAMENG/dmwatcher.ini
观察dmmonitor普通监视器的日志信息,
查看数据库为OPEN状态:在监视器日志输入 show
数据库状态自动从 MOUNT 转换为 OPEN,为正常
在三台服务器分别执行(先备库):结束守护进程,第 9 步的守护进程窗口 输入:exit
在三台服务器分别执行(先主库):结束mount状态,第 7 步的实例进程窗口 输入: exit
10. 注册数据库后台服务
-
注意:数据库确认监视器服务(最后启动)若检测到主库不在,则将备库切换为主库
-
使用root 用户注册服务,先查看帮助
# cd /dm8/dmdba/dmdbms/script/root/
# ./dm_service_installer.sh -h
Usage: dm_service_installer.sh -t service_type [-p service_name_postfix] [-dm_ini dm_ini_file]
[-watcher_ini watcher_ini_file ] [-monitor_ini monitor_ini_file] [-cssm_ini cssm_ini_file]
[-dfs_ini dfs_ini_file] [-dcr_ini dcr_ini_file]
[-dss_ini dss_ini_file] [-drs_ini drs_ini_file] [-dras_ini dras_ini_file] [-dcs_ini dcs_ini_file] [-server server_info]
[-dmap_ini dmap_ini_file] [-m open|mount] [-y dependent_service] [-auto true|false]
or dm_service_installer.sh [-s service_file_path]
or dm_service_installer.sh -h
-t 服务类型,包括dmimon,dmap,dmserver,dmwatcher,dmmonitor,dmcss,dmcssm,dmasmsvr,dmdcs,dmdrs,dmdras,dmdss
-p 服务名后缀,对于dmimon,dmap服务类型无效
-dm_ini dm.ini文件路径
-watcher_ini dmwatcher.ini文件路径.
-monitor_ini dmmonitor.ini文件路径.
-dcr_ini dmdcr.ini文件路径.
-cssm_ini dmcssm.ini文件路径.
-dss_ini dss.ini文件路径.
-drs_ini drs.ini文件路径.
-dras_ini dras.ini文件路径.
-dcs_ini dcs.ini文件路径.
-dfs_ini dfs.ini文件路径.
-dmap_ini dmap.ini文件路径.
-server 服务器信息(IP:PORT)
-auto 设置服务是否自动启动,值为true或false,默认true.
-m 设置服务器启动模式open或mount,只针对dmserver服务类型生效,可选
-y 设置依赖服务,此选项只针对systemd服务环境下的dmserver和dmasmsvr服务生效
-s 服务脚本路径,设置则忽略除-y外的其他参数选项
-h 帮助
10.1 注册数据库实例服务
-
分别在三台服务器执行
-
创建数据库实例服务并设置为开机自启
-
注意:实例名与服务名需要对应,容易区分
-
161:RWC_01
-
162:RWC_02
-
163:RWC_03
-
# ./dm_service_installer.sh -t dmserver -p RWC_01 -dm_ini /dm8/dmdba/dmdata/DAMENG/dm.ini -auto true -m mount
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceDMSERVER.service to /usr/lib/systemd/system/DmService_RWC_01.service.
创建服务(DmServiceRWC_01)完成
10.2 注册数据库实例数据守护服务
-
创建数据库守护进程服务并设置为开机自启
-
161:DmWatcherServiceDMWATCHER
-
162:DmWatcherServiceDMWATCHER
-
163:DmWatcherServiceDMWATCHER
-
# ./dm_service_installer.sh -t dmwatcher -p DMWATCHER -watcher_ini /dm8/dmdba/dmdata/DAMENG/dmwatcher.ini -auto true
Created symlink from /etc/systemd/system/multi-user.target.wants/DmWatcherServiceGRP1_DMWH_01 .service to /usr/lib/systemd/system/DmWatcherServiceGRP1_DMWH_01 .service.
创建服务(DmWatcherServiceDMWATCHER)完成
10.3 注册确认监视器服务
-
在192.168.88.162:注册确认监视器服务
# ./dm_service_installer.sh -t dmmonitor -p DMMONITOR_AUTO -monitor_ini /dm8/dmdba/dmdata/DAMENG/dmmonitor_auto.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmMonitorServiceDMMONITOR_AUTO.service to /usr/lib/systemd/system/DmMonitorServiceDMMONITOR_AUTO.service.
创建服务(DmMonitorServiceDMMONITOR_AUTO)完成
-
在三台服务器分别启动数据库实例服务
-
三台服务器的数据库目录相同
# cd /dm8/dmdba/dmdbms/bin
-
三台服务器的数据库实例服务名不同
# ./DmServiceRWC_01 start
# ./DmServiceRWC_02 start
# ./DmServiceRWC_03 start
-
在三台服务器分别启动守护进程服务:(并查看普通监视器日志)
-
三台服务器的数据库目录相同
-
三台服务器的数据库守护进程服务名相同
# cd /dm8/dmdba/dmdbms/bin
# ./DmWatcherServiceDMWATCHER start
普通监视器日志
在监视器输入:show
10.4 验证集群功能
-
在主库创建表,查看备库是否同步
-
查看dmmonitor监视器日志, LSN 码是否一致
-
确认没问题,启动确认监视器服务
--后台启动
# cd /dm8/dmdba/dmdbms/bin/
# ./DmMonitorServiceDMMONITOR_AUTO start
--前台启动
$ /dm8/dmdba/dmdbms/bin/dmmonitor path=/dm8/dmdba/dmdata/DAMENG/dmmonitor_auto.ini
$ exit (退出后服务停止)
-
在普通监视器窗口输入 : exit
11. 搭建完成
12. 故障模拟
--状态查询
SELECT * FROM v$database ;
--注释:
--open状态(status = 4)下: ROLE 1 代表主库;2代表备库 ;0 代表普通库
12.1 主库161直接挂掉,reboot
开启确认监视器监视器
将主库161reboot,查看监视器状态
再次登陆161发现变成了备库,登录原备库162服务器,发现自动切换为主库
12.2 无故障情况下主备手动切换
choose switchover grp1
switchover grp1.RWC_01(这里需要先登录一下,然后再switchover)
12.3 故障情况下切换
choose takeover grp1
takeover RWC_01
13. 主备日常维护启停流程
启动集群顺序:
主库实例服务-备库实例服务-主库守护服务-备库守护服务-监视器服务
停止集群顺序:
停监视器-主库守护进程服务-备库守护进程服务-主库实例服务-备库实例服务
ps -ef|grep dmserver
ps -ef|grep dmwatcher
ps -ef|grep dmmonitor
--查看状态
# 数据库实例
systemctl status DmServiceRWC_01 --161
systemctl status DmServiceRWC_02 --162
systemctl status DmServiceRWC_03 --163
# 守护进程
systemctl status DmWatcherServiceDMWATCHER --161,162,163
# 监视器
systemctl status DmMonitorServiceDMMONITOR_AUTO --162
# 停止集群
--1、停止监视器服务(162)
systemctl stop DmMonitorServiceDMMONITOR_AUTO
--2、停止主库守护进程
systemctl stop DmWatcherServiceDMWATCHER
--3、停止备库守护进程
systemctl stop DmWatcherServiceDMWATCHER
--4、停止主库实例服务
systemctl stop DmServiceRWC_01
--5、停止备库实例服务
systemctl stop DmServiceRWC_02
systemctl stop DmServiceRWC_03
# 启动集群
--1、启动主库实例服务
systemctl start DmServiceRWC_01
--2、启动备库实例服务
systemctl start DmServiceRWC_02
systemctl start DmServiceRWC_03
--3、启动主库守护服务
systemctl start DmWatcherServiceDMWATCHER
--4、启动备库守护服务
systemctl start DmWatcherServiceDMWATCHER
--5、启动监视器服务
systemctl start DmMonitorServiceDMMONITOR_AUTO