数据守护集群-读写分离

数据守护集群-读写分离

1. 前期规划

1.1 IP规划
数据守护集群-读写分离_第1张图片

1.2 端口规划
数据守护集群-读写分离_第2张图片
1.3 存储规划
数据守护集群-读写分离_第3张图片
1.4 数据库初始化参数规划
数据守护集群-读写分离_第4张图片


2. 安装数据库基础软件

(略)


3. 配置环境变量

数据守护集群-读写分离_第5张图片
环境变量具体配置如下:

su - dmdba
vi .bash_profile
source ~/.bash_profile
#################################################
### Dameng Database Environment Configuration ###
export TMP=/tmp
export TMP_DIR=$TMP
export DM_INSTALL_TMPDIR=$TMP
export DM_HOME=/DMDB/app/DM8
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DM_HOME/bin"
export PATH=$DM_HOME/bin:$DM_HOME/tool:$PATH:$HOME/bin
umask 022
### end ###

4. 初始化数据库实例

4.1 主机DMDB1: 初始化数据库实例 GRP1_RWW_01

dminit PATH=/DMDB/data DB_NAME=DMDB INSTANCE_NAME=GRP1_RWW_01 PAGE_SIZE=16 CHARSET=0 CASE_SENSITIVE=1 LENGTH_IN_CHAR=1 LOG_SIZE=128 

[dmdba@DMDB1 ~]$ dminit PATH=/DMDB/data DB_NAME=DMDB INSTANCE_NAME=GRP1_RWW_01 PAGE_SIZE=16 CHARSET=0 CASE_SENSITIVE=1 LENGTH_IN_CHAR=1 LOG_SIZE=128 
initdb V8
db version: 0x7000b
License will expire on 2021-06-25
 log file path: /DMDB/data/DMDB/DMDB01.log
 log file path: /DMDB/data/DMDB/DMDB02.log
write to dir [/DMDB/data/DMDB].
create dm database success. 2020-12-03 11:57:04

[dmdba@DMDB1 ~]$ ls -lh /DMDB/data/DMDB
总用量 800K
drwxr-xr-x 2 dmdba dinstall 4.0K 12月  3 11:57 bak
drwxr-xr-x 2 dmdba dinstall 4.0K 12月  3 11:57 ctl_bak
-rw-r--r-- 1 dmdba dinstall 5.0K 12月  3 11:57 dm.ctl
-rw-r--r-- 1 dmdba dinstall 128M 12月  3 11:57 DMDB01.log
-rw-r--r-- 1 dmdba dinstall 128M 12月  3 11:57 DMDB02.log
-rw-r--r-- 1 dmdba dinstall  49K 12月  3 11:57 dm.ini
-rw-r--r-- 1 dmdba dinstall  808 12月  3 11:57 dminit20201203115701.log
-rw-r--r-- 1 dmdba dinstall  633 12月  3 11:57 dm_service.prikey
drwxr-xr-x 2 dmdba dinstall 4.0K 12月  3 11:57 HMAIN
-rw-r--r-- 1 dmdba dinstall 128M 12月  3 11:57 MAIN.DBF
-rw-r--r-- 1 dmdba dinstall 128M 12月  3 11:57 ROLL.DBF
-rw-r--r-- 1 dmdba dinstall  479 12月  3 11:57 sqllog.ini
-rw-r--r-- 1 dmdba dinstall  10M 12月  3 11:57 SYSTEM.DBF

4.2 主机DMDB2: 初始化数据库实例 GRP1_RWW_02

dminit PATH=/DMDB/data DB_NAME=DMDB INSTANCE_NAME=GRP1_RWW_02 PAGE_SIZE=16 CHARSET=0 CASE_SENSITIVE=1 LENGTH_IN_CHAR=1 LOG_SIZE=128 

[dmdba@DMDB2 ~]$ dminit PATH=/DMDB/data DB_NAME=DMDB INSTANCE_NAME=GRP1_RWW_02 PAGE_SIZE=16 CHARSET=0 CASE_SENSITIVE=1 LENGTH_IN_CHAR=1 LOG_SIZE=128 
initdb V8
db version: 0x7000b
License will expire on 2021-06-25
 log file path: /DMDB/data/DMDB/DMDB01.log
 log file path: /DMDB/data/DMDB/DMDB02.log
write to dir [/DMDB/data/DMDB].
create dm database success. 2020-12-03 11:57:03

[dmdba@DMDB2 ~]$ ls -lh /DMDB/data/DMDB
总用量 800K
drwxr-xr-x 2 dmdba dinstall 4.0K 12月  3 11:57 bak
drwxr-xr-x 2 dmdba dinstall 4.0K 12月  3 11:57 ctl_bak
-rw-r--r-- 1 dmdba dinstall 5.0K 12月  3 11:57 dm.ctl
-rw-r--r-- 1 dmdba dinstall 128M 12月  3 11:57 DMDB01.log
-rw-r--r-- 1 dmdba dinstall 128M 12月  3 11:57 DMDB02.log
-rw-r--r-- 1 dmdba dinstall  49K 12月  3 11:57 dm.ini
-rw-r--r-- 1 dmdba dinstall  808 12月  3 11:57 dminit20201203115700.log
-rw-r--r-- 1 dmdba dinstall  633 12月  3 11:57 dm_service.prikey
drwxr-xr-x 2 dmdba dinstall 4.0K 12月  3 11:57 HMAIN
-rw-r--r-- 1 dmdba dinstall 128M 12月  3 11:57 MAIN.DBF
-rw-r--r-- 1 dmdba dinstall 128M 12月  3 11:57 ROLL.DBF
-rw-r--r-- 1 dmdba dinstall  479 12月  3 11:57 sqllog.ini
-rw-r--r-- 1 dmdba dinstall  10M 12月  3 11:57 SYSTEM.DBF

4.3 主机DMDB3: 初始化数据库实例 GRP1_RWW_03

dminit PATH=/DMDB/data DB_NAME=DMDB INSTANCE_NAME=GRP1_RWW_03 PAGE_SIZE=16 CHARSET=0 CASE_SENSITIVE=1 LENGTH_IN_CHAR=1 LOG_SIZE=128 

[dmdba@DMDB3 ~]$ dminit PATH=/DMDB/data DB_NAME=DMDB INSTANCE_NAME=GRP1_RWW_03 PAGE_SIZE=16 CHARSET=0 CASE_SENSITIVE=1 LENGTH_IN_CHAR=1 LOG_SIZE=128
initdb V8
db version: 0x7000b
License will expire on 2021-06-25
 log file path: /DMDB/data/DMDB/DMDB01.log
 log file path: /DMDB/data/DMDB/DMDB02.log
write to dir [/DMDB/data/DMDB].
create dm database success. 2020-12-03 11:57:03

[dmdba@DMDB3 ~]$ ls -lh /DMDB/data/DMDB
总用量 800K
drwxr-xr-x 2 dmdba dinstall 4.0K 12月  3 11:57 bak
drwxr-xr-x 2 dmdba dinstall 4.0K 12月  3 11:57 ctl_bak
-rw-r--r-- 1 dmdba dinstall 5.0K 12月  3 11:57 dm.ctl
-rw-r--r-- 1 dmdba dinstall 128M 12月  3 11:57 DMDB01.log
-rw-r--r-- 1 dmdba dinstall 128M 12月  3 11:57 DMDB02.log
-rw-r--r-- 1 dmdba dinstall  49K 12月  3 11:57 dm.ini
-rw-r--r-- 1 dmdba dinstall  808 12月  3 11:57 dminit20201203115700.log
-rw-r--r-- 1 dmdba dinstall  633 12月  3 11:57 dm_service.prikey
drwxr-xr-x 2 dmdba dinstall 4.0K 12月  3 11:57 HMAIN
-rw-r--r-- 1 dmdba dinstall 128M 12月  3 11:57 MAIN.DBF
-rw-r--r-- 1 dmdba dinstall 128M 12月  3 11:57 ROLL.DBF
-rw-r--r-- 1 dmdba dinstall  479 12月  3 11:57 sqllog.ini
-rw-r--r-- 1 dmdba dinstall  10M 12月  3 11:57 SYSTEM.DBF


5. 注册数据库实例服务

注:root用户执行脚本注册服务

5.1 主机DMDB1:实例服务名DmServiceGRP1_RWW_01

/DMDB/app/DM8/script/root/dm_service_installer.sh -t dmserver -dm_ini /DMDB/data/DMDB/dm.ini -p GRP1_RWW_01

5.2 主机DMDB2:实例服务名DmServiceGRP1_RWW_02

/DMDB/app/DM8/script/root/dm_service_installer.sh -t dmserver -dm_ini /DMDB/data/DMDB/dm.ini -p GRP1_RWW_02

5.3 主机DMDB3:实例服务名DmServiceGRP1_RWW_03

/DMDB/app/DM8/script/root/dm_service_installer.sh -t dmserver -dm_ini /DMDB/data/DMDB/dm.ini -p GRP1_RWW_03

5.4 测试数据库实例服务

分别在每个主机上启停数据库实例服务,保证无出错。

chkconfig --list | grep ^Dm
service DmServiceGRP1_RWW_01 start
service DmServiceGRP1_RWW_02 start
service DmServiceGRP1_RWW_03 start
ps -fu dmdba
service DmServiceGRP1_RWW_01 stop
service DmServiceGRP1_RWW_02 stop
service DmServiceGRP1_RWW_03 stop

5.5 测试登录数据库

分别在每个主机上本地登录数据库实例,保证无出错。

su - dmdba
disql SYSDBA/SYSDBA
SQL> select name,role$,status$,open_count from v$database;
SQL> select instance_name,host_name,status$,mode$,oguid from v$instance;

6. 备库准备数据

6.1 DMDB1主库:脱机备份全库

su - dmdba
service DmServiceGRP1_RWW_01 stop
dmrman CTLSTMT="BACKUP DATABASE '/DMDB/data/DMDB/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/DMDB/backup/BACKUP_FILE_01'"
du -sh /DMDB/backup/BACKUP_FILE_01

6.2 DMDB2/DMDB3备库:脱机还原恢复数据库

su - dmdba
service DmServiceGRP1_RWW_02 stop
service DmServiceGRP1_RWW_03 stop
scp -rp 192.168.0.11:/DMDB/backup/BACKUP_FILE_01 /DMDB/backup
ls -lh /DMDB/backup

dmrman CTLSTMT="RESTORE DATABASE '/DMDB/data/DMDB/dm.ini' FROM BACKUPSET '/DMDB/backup/BACKUP_FILE_01'"
dmrman CTLSTMT="RECOVER DATABASE '/DMDB/data/DMDB/dm.ini' FROM BACKUPSET '/DMDB/backup/BACKUP_FILE_01'"
dmrman CTLSTMT="RECOVER DATABASE '/DMDB/data/DMDB/dm.ini' UPDATE DB_MAGIC"

6.3 检查所有备库与主库是否保持数据一致性

su - dmdba
# 一定要以mount方式启动数据库,保证数据库中的数据不被应用或其他操作引起变化。
# 主要是为了保证所有节点的数据库的一致性,防止破坏主备库的数据一致性
dmserver /DMDB/data/DMDB/dm.ini mount

disql SYSDBA/SYSDBA
SQL> select file_LSN, cur_LSN from v$rlog;
行号     FILE_LSN             CUR_LSN             
---------- -------------------- --------------------
1          37832                37832
已用时间: 6.791(毫秒). 执行号:0.

SQL> select permanent_magic;  
行号     PERMANENT_MAGIC
---------- ---------------
1          1626939156
已用时间: 2.407(毫秒). 执行号:1.

7. 编辑各节点数据库配置文件

7.1 配置dm.ini

 ### 快速检索出相关项配置 ### 
 egrep -irn '\s+PORT_NUM' dm.ini
 
对于完全匹配,请使用-x开关:
grep -x -f A.txt B.txt 
如果不想使用grep的正则表达式功能并且需要将搜索模式视为固定字符串,那么请使用-F开关:
grep -xF -f A.txt B.txt
 
### 范本文本文件dm.ptn begin ###
INSTANCE_NAME
PORT_NUM
DW_INACTIVE_INTERVAL
ALTER_MODE_STATUS
ENABLE_OFFLINE_TS
MAL_INI
ARCH_INI
RLOG_SEND_APPLY_MON
 ### 范本文本文件dm.ptn end ### 
 
[dmdba@DMDB1 DMDB]$ grep -nf /DMDB/soft/dm.ptn dm.ini | tee /DMDB/soft/dm1.ini.parbak
15:             INSTANCE_NAME                   = GRP1_RWW_01           #Instance name
218:            PORT_NUM                        = 5236                  #Port number on which the database server will listen
319:            RLOG_SEND_APPLY_MON             = 64                    #Monitor recently send or apply rlog_buf info
433:            DCRS_PORT_NUM                   = 6236                  #Port number on which the database dcrs will listen
435:            AP_PORT_NUM                     = 0                     #Port number on which the database ap will listen
454:            DW_INACTIVE_INTERVAL            = 60                    #Time in seconds that used to determine whether DMWATCHER exist
456:            ALTER_MODE_STATUS               = 1                     #Whether to permit database user to alter database mode and status by SQLs, 1: yes, 0: no
457:            ENABLE_OFFLINE_TS               = 1                     #Whether tablespace can be offline
471:            DCP_PORT_NUM                    = 5237                  #Port number on which DCP will listen
476:            MAL_INI                         = 0                     #dmmal.ini
477:            ARCH_INI                        = 0                     #dmarch.ini 

## 比较各个节点配置
diff /DMDB/soft/dm1.ini.parbak /DMDB/soft/dm2.ini.parbak

DMDB1主库

 #实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16
INSTANCE_NAME = GRP1_RWW_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 次的日志发送信息
ENABLE_ENCRYPT = 0          #关闭SSL加密通讯 

DMDB2备库

#实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16
INSTANCE_NAME = GRP1_RWW_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 次的日志发送信息

DMDB3备库

#实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16
INSTANCE_NAME = GRP1_RWW_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 次的日志发送信息

7.2 配置dmmal.ini

DMDB1主库/DMDB2备库/ DMDB3备库 dmmal.ini配置内容一致

MAL_CHECK_INTERVAL = 5         #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5     #判定MAL链路断开的时间
 
[MAL_INST1]
MAL_INST_NAME = GRP1_RWW_01    #实例名和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 10.10.10.11         #MAL系统监听TCP连接的IP地址
MAL_PORT = 5436                #MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.0.11   #实例的对外服务IP地址
MAL_INST_PORT = 5236           #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_DW_PORT = 5536            #实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 5336
 
[MAL_INST2]
MAL_INST_NAME = GRP1_RWW_02 
MAL_HOST = 10.10.10.12
MAL_PORT = 5436
MAL_INST_HOST = 192.168.0.12
MAL_INST_PORT = 5236
MAL_DW_PORT = 5536
MAL_INST_DW_PORT = 5336
 
[MAL_INST3]
MAL_INST_NAME = GRP1_RWW_03 
MAL_HOST = 10.10.10.13 
MAL_PORT = 5436
MAL_INST_HOST = 192.168.0.13
MAL_INST_PORT = 5236
MAL_DW_PORT = 5536
MAL_INST_DW_PORT = 5336  

7.3 配置dmarch.ini
DMDB1主库

[ARCHIVE_TIMELY1]
ARCH_TYPE = TIMELY       #即时归档类型:远程归档到GRP1_RWW_02实例主机
ARCH_DEST = GRP1_RWW_02  #即时归档目标实例名
 
[ARCHIVE_TIMELY2]
ARCH_TYPE = TIMELY       #即时归档类型
ARCH_DEST = GRP1_RWW_03  #即时归档目标实例名
 
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL           #本地归档类型
ARCH_DEST = /DMDB/arch      #本地归档文件存放路径
ARCH_FILE_SIZE = 512        #单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT  = 0       #单位Mb,0表示无限制,范围1024~4294967294M

DMDB2备库

[ARCHIVE_TIMELY1]
ARCH_TYPE = TIMELY       #即时归档类型
ARCH_DEST = GRP1_RWW_01  #即时归档目标实例名
 
[ARCHIVE_TIMELY2]
ARCH_TYPE = TIMELY       #即时归档类型
ARCH_DEST = GRP1_RWW_03  #即时归档目标实例名
 
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL           #本地归档类型
ARCH_DEST = /DMDB/arch      #本地归档文件存放路径
ARCH_FILE_SIZE = 512        #单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT  = 0       #单位Mb,0表示无限制,范围1024~4294967294M

DMDB3备库

[ARCHIVE_TIMELY1]
ARCH_TYPE = TIMELY       #即时归档类型
ARCH_DEST = GRP1_RWW_01  #即时归档目标实例名
 
[ARCHIVE_TIMELY2]
ARCH_TYPE = TIMELY       #即时归档类型
ARCH_DEST = GRP1_RWW_02  #即时归档目标实例名
 
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL           #本地归档类型
ARCH_DEST = /DMDB/arch      #本地归档文件存放路径
ARCH_FILE_SIZE = 512        #单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT  = 0       #单位Mb,0表示无限制,范围1024~4294967294M

7.4 配置dmwatcher.ini

DMDB1主库/DMDB2备库/ DMDB3备库 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 = /DMDB/data/DMDB/dm.ini  #dm.ini配置文件路径
INST_AUTO_RESTART = 1    #实例自动重启
INST_STARTUP_CMD = /DMDB/app/DM8/bin/dmserver  #命令行方式启动
RLOG_SEND_THRESHOLD = 0  #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭

7.5 配置dmmonitor.ini

DMDB4监视器节点主机(它不需要初始化数据库实例,仅需配置监视配置文件即可)
由于主库和即时备库的守护进程配置为自动切换模式,因此这里选择配置确认监视器。
和普通监视器相比,确认监视器除了相同的命令支持外,在主库发生故障时,能够自动通知即时备库接管为新的主库,具有自动故障处理的功能。
注意:故障自动切换模式下,必须配置确认监视器,且确认监视器最多只能配置一个。

MON_DW_CONFIRM = 1             #确认监视器模式
MON_LOG_PATH = /DMDB/data/log  #监视器日志文件存放路径
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 = 10.10.10.11:5536
MON_DW_IP = 10.10.10.12:5536
MON_DW_IP = 10.10.10.13:5536

8. 以mount方式启动主备库设置OGUID和数据库模式
### 8.1 各个数据库节点上以mount方式启动数据库(前台方式)**
#一定要以Mount方式启动数据库实例,否则系统启动时会重构回滚表空间,
#成生成Redo日志;并且,启动后应用可能连接到数据库实例进行操作,破坏主
#动备库的数据一致性。数据守护配置结束后,守护进程会自动Open数据库。

# DMDB1 -> DMDB2 --> DMDB3
su - dmdba
dmserver /DMDB/data/DMDB/dm.ini mount


### 8.2 DMDB1主库设置OGUID
# OGUID与配置文件dmwatcher.ini中INST_OGUID相同。
su - dmdba
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);


### 8.3 DMDB2/DMDB3备库
# OGUID与配置文件dmwatcher.ini中INST_OGUID相同。
su - dmdba
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);

9. 启动主备库守护进程
### 9.1 依次启动主备库守护进程
# 守护进程启动后,进入 Startup 状态,此时实例都处于 Mount 状态。
# 守护进程开始广播自身和其监控实例的状态信息,结合自身信息和远程守护进程的广播信息,
# 守护进程将本地实例Open,并切换为Open状态。
# 依次启动守护进程 DMDB1 -> DMDB2 --> DMDB3
su - dmdba
dmwatcher /DMDB/data/DMDB/dmwatcher.ini


10. 启动监视器
su - dmdba
dmmonitor /DMDB/data/dmmonitor.ini

[dmdba@DMDB4 data]$ dmmonitor /DMDB/data/dmmonitor.ini
[monitor]         2020-12-03 15:54:08: DMMONITOR[4.0] V8
[monitor]         2020-12-03 15:54:08: DMMONITOR[4.0] IS READY.

[monitor]         2020-12-03 15:54:08: 收到守护进程(GRP1_RWW_01)消息
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2020-12-03 15:54:08  OPEN           OK        GRP1_RWW_01      OPEN        PRIMARY   VALID    3        39088           39088           

[monitor]         2020-12-03 15:54:08: 收到守护进程(GRP1_RWW_02)消息
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2020-12-03 15:54:08  OPEN           OK        GRP1_RWW_02      OPEN        STANDBY   VALID    3        39088           39088           

[monitor]         2020-12-03 15:54:08: 收到守护进程(GRP1_RWW_03)消息
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2020-12-03 15:54:08  OPEN           OK        GRP1_RWW_03      OPEN        STANDBY   VALID    3        39088           39088           

show global info
2020-12-03 15:54:21 
#================================================================================#
GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG  
GRP1             453332      TRUE            AUTO            FALSE     


<<DATABASE GLOBAL INFO:>>
IP              MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
10.10.10.11     5536         2020-12-03 15:54:21  GLOBAL    VALID     OPEN           GRP1_RWW_01      OK        1     1     OPEN        PRIMARY   DSC_OPEN       TIMELY    VALID    

IP              MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
10.10.10.12     5536         2020-12-03 15:54:20  GLOBAL    VALID     OPEN           GRP1_RWW_02      OK        1     1     OPEN        STANDBY   DSC_OPEN       TIMELY    VALID    

IP              MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
10.10.10.13     5536         2020-12-03 15:54:20  GLOBAL    VALID     OPEN           GRP1_RWW_03      OK        1     1     OPEN        STANDBY   DSC_OPEN       TIMELY    VALID    


#================================================================================#

11. 注册守护进程服务和监视器服务
## 切记:注册服务使用root用户身份执行。
# DMDB1节点主机
/DMDB/app/DM8/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /DMDB/data/DMDB/dmwatcher.ini -p DW1

# DMDB2节点主机
/DMDB/app/DM8/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /DMDB/data/DMDB/dmwatcher.ini -p DW2

# DMDB3节点主机
/DMDB/app/DM8/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /DMDB/data/DMDB/dmwatcher.ini -p DW3


# DMDB4节点主机:注册监视器服务
/DMDB/app/DM8/script/root/dm_service_installer.sh -t dmmonitor -monitor_ini /DMDB/data/dmmonitor.ini -p DMON1


#测试注册的服务是否正常:启动步骤
service DmServiceGRP1_RWW_01 start 
service DmWatcherServiceDW1 start
service DmServiceGRP1_RWW_02 start 
service DmWatcherServiceDW2 start
service DmServiceGRP1_RWW_03 start
service DmWatcherServiceDW3 start
service DmMonitorServiceDMON1 start

12. 主备库数据同步测试

DMDB1主库

disql SYSDBA/SYSDBA
SQL> create table dmfs as select * from sysobjects;
SQL> select count(1) from dmfs; 
行号     COUNT(1)            
---------- --------------------
1          1338
已用时间: 7.088(毫秒). 执行号:5.

SQL> select name,instance_name,start_time,status$ from v$instance;
SQL> select name,arch_mode,decode(role$,1,'PRIMARY',2,'STANDBY','Normal') DB_MODE from v$database; 
行号     NAME ARCH_MODE DB_MODE
---------- ---- --------- -------
1          DMDB Y         PRIMARY

DMDB2/DMDB3备库

disql SYSDBA/SYSDBA
SQL> select count(1) from dmfs; 
行号     COUNT(1)            
---------- --------------------
1          1338
已用时间: 9.092(毫秒). 执行号:0.

13. 测试主备手工切换
### 登录监视器主机进行操控 ###
# 后台服务已启动,不能再在前台启动监视器,必须停止后重新启动进入前台操作界面。
su - dmdba
service DmMonitorServiceDMON1 stop
dmmonitor /DMDB/data/dmmonitor.ini


[dmdba@DMDB4 ~]$ dmmonitor /DMDB/data/dmmonitor.ini
[monitor]         2020-12-03 16:28:30: DMMONITOR[4.0] V8
[monitor]         2020-12-03 16:28:30: DMMONITOR[4.0] IS READY.
[monitor]         2020-12-03 16:28:30: 收到守护进程(GRP1_RWW_02)消息
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2020-12-03 16:28:30  OPEN           OK        GRP1_RWW_02      OPEN        STANDBY   NULL     4        40681           40681           

[monitor]         2020-12-03 16:28:30: 收到守护进程(GRP1_RWW_03)消息
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2020-12-03 16:28:30  OPEN           OK        GRP1_RWW_03      OPEN        STANDBY   NULL     4        40681           40681           

[monitor]         2020-12-03 16:28:30: 收到守护进程(GRP1_RWW_01)消息
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2020-12-03 16:28:31  OPEN           OK        GRP1_RWW_01      OPEN        PRIMARY   VALID    4        40681           40681 



show global info
2020-12-03 16:30:14 
#================================================================================#
GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG  
GRP1             453332      TRUE            AUTO            FALSE     


<<DATABASE GLOBAL INFO:>>
IP              MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
10.10.10.11     5536         2020-12-03 16:30:15  GLOBAL    VALID     OPEN           GRP1_RWW_01      OK        1     1     OPEN        PRIMARY   DSC_OPEN       TIMELY    VALID    

IP              MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
10.10.10.12     5536         2020-12-03 16:30:14  GLOBAL    VALID     OPEN           GRP1_RWW_02      OK        1     1     OPEN        STANDBY   DSC_OPEN       TIMELY    VALID    

IP              MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
10.10.10.13     5536         2020-12-03 16:30:14  GLOBAL    VALID     OPEN           GRP1_RWW_03      OK        1     1     OPEN        STANDBY   DSC_OPEN       TIMELY    VALID    


#================================================================================#

#=============================================================================================#

list
#-------------------dmwatcher configuration of instance(GRP1_RWW_01)----------------------#
[GRP1]
DW_TYPE                    = GLOBAL
DW_MODE                    = AUTO
DW_ERROR_TIME              = 10
INST_ERROR_TIME            = 10
INST_RECOVER_TIME          = 60
INST_INI                   = /DMDB/data/DMDB/dm.ini
DCR_INI                    = 
INST_OGUID                 = 453332
INST_STARTUP_CMD           = /DMDB/app/DM8/bin/dmserver
INST_AUTO_RESTART          = 1
INST_SERVICE_IP_CHECK      = 0
RLOG_SEND_THRESHOLD        = 0
RLOG_APPLY_THRESHOLD       = 0

#-------------------dmwatcher configuration of instance(GRP1_RWW_02)----------------------#
[GRP1]
DW_TYPE                    = GLOBAL
DW_MODE                    = AUTO
DW_ERROR_TIME              = 10
INST_ERROR_TIME            = 10
INST_RECOVER_TIME          = 60
INST_INI                   = /DMDB/data/DMDB/dm.ini
DCR_INI                    = 
INST_OGUID                 = 453332
INST_STARTUP_CMD           = /DMDB/app/DM8/bin/dmserver
INST_AUTO_RESTART          = 1
INST_SERVICE_IP_CHECK      = 0
RLOG_SEND_THRESHOLD        = 0
RLOG_APPLY_THRESHOLD       = 0

#-------------------dmwatcher configuration of instance(GRP1_RWW_03)----------------------#
[GRP1]
DW_TYPE                    = GLOBAL
DW_MODE                    = AUTO
DW_ERROR_TIME              = 10
INST_ERROR_TIME            = 10
INST_RECOVER_TIME          = 60
INST_INI                   = /DMDB/data/DMDB/dm.ini
DCR_INI                    = 
INST_OGUID                 = 453332
INST_STARTUP_CMD           = /DMDB/app/DM8/bin/dmserver
INST_AUTO_RESTART          = 1
INST_SERVICE_IP_CHECK      = 0
RLOG_SEND_THRESHOLD        = 0
RLOG_APPLY_THRESHOLD       = 0


几个数据库实例之间来回切换
show global info
login
switchover GRP1.GRP1_RWW_03
switchover GRP1.GRP1_RWW_02
switchover GRP1.GRP1_RWW_01
## choose用在多个备库实例的情况下供选择
choose switchover GRP1
switchover GRP1.GRP1_RWW_03
[monitor]         2020-12-03 16:40:17: 开始切换实例GRP1_RWW_03
[monitor]         2020-12-03 16:40:17: 通知守护进程GRP1_RWW_01切换SWITCHOVER状态
[monitor]         2020-12-03 16:40:17: 守护进程(GRP1_RWW_01)状态切换 [OPEN-->SWITCHOVER]
[monitor]         2020-12-03 16:40:17: 切换守护进程GRP1_RWW_01为SWITCHOVER状态成功
[monitor]         2020-12-03 16:40:17: 通知守护进程GRP1_RWW_03切换SWITCHOVER状态
[monitor]         2020-12-03 16:40:17: 守护进程(GRP1_RWW_03)状态切换 [OPEN-->SWITCHOVER]
[monitor]         2020-12-03 16:40:18: 切换守护进程GRP1_RWW_03为SWITCHOVER状态成功
[monitor]         2020-12-03 16:40:18: 实例GRP1_RWW_01开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句
[monitor]         2020-12-03 16:40:18: 实例GRP1_RWW_01执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功
[monitor]         2020-12-03 16:40:18: 实例GRP1_RWW_03开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句
[monitor]         2020-12-03 16:40:18: 实例GRP1_RWW_03执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功
[monitor]         2020-12-03 16:40:18: 实例GRP1_RWW_01开始执行ALTER DATABASE MOUNT语句
[monitor]         2020-12-03 16:40:20: 实例GRP1_RWW_01执行ALTER DATABASE MOUNT语句成功
[monitor]         2020-12-03 16:40:20: 实例GRP1_RWW_03开始执行ALTER DATABASE MOUNT语句
[monitor]         2020-12-03 16:40:21: 实例GRP1_RWW_03执行ALTER DATABASE MOUNT语句成功
[monitor]         2020-12-03 16:40:21: 实例GRP1_RWW_01开始执行ALTER DATABASE STANDBY语句
[monitor]         2020-12-03 16:40:21: 实例GRP1_RWW_01执行ALTER DATABASE STANDBY语句成功
[monitor]         2020-12-03 16:40:21: 实例GRP1_RWW_03开始执行ALTER DATABASE PRIMARY语句
[monitor]         2020-12-03 16:40:22: 实例GRP1_RWW_03执行ALTER DATABASE PRIMARY语句成功
[monitor]         2020-12-03 16:40:22: 通知实例GRP1_RWW_03修改所有归档状态无效
[monitor]         2020-12-03 16:40:22: 修改所有实例归档为无效状态成功
[monitor]         2020-12-03 16:40:22: 实例GRP1_RWW_01开始执行ALTER DATABASE OPEN FORCE语句
[monitor]         2020-12-03 16:40:22: 实例GRP1_RWW_01执行ALTER DATABASE OPEN FORCE语句成功
[monitor]         2020-12-03 16:40:22: 实例GRP1_RWW_03开始执行ALTER DATABASE OPEN FORCE语句
[monitor]         2020-12-03 16:40:24: 实例GRP1_RWW_03执行ALTER DATABASE OPEN FORCE语句成功
[monitor]         2020-12-03 16:40:24: 实例GRP1_RWW_01开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句
[monitor]         2020-12-03 16:40:24: 实例GRP1_RWW_01执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功
[monitor]         2020-12-03 16:40:24: 实例GRP1_RWW_03开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句
[monitor]         2020-12-03 16:40:24: 实例GRP1_RWW_03执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功
[monitor]         2020-12-03 16:40:24: 通知守护进程GRP1_RWW_01切换OPEN状态
[monitor]         2020-12-03 16:40:24: 守护进程(GRP1_RWW_01)状态切换 [SWITCHOVER-->OPEN]
[monitor]         2020-12-03 16:40:24: 切换守护进程GRP1_RWW_01为OPEN状态成功
[monitor]         2020-12-03 16:40:24: 通知守护进程GRP1_RWW_03切换OPEN状态
[monitor]         2020-12-03 16:40:24: 守护进程(GRP1_RWW_03)状态切换 [SWITCHOVER-->OPEN]
[monitor]         2020-12-03 16:40:24: 切换守护进程GRP1_RWW_03为OPEN状态成功
[monitor]         2020-12-03 16:40:24: 通知组(GRP1)的守护进程执行清理操作
[monitor]         2020-12-03 16:40:24: 清理守护进程(GRP1_RWW_01)请求成功
[monitor]         2020-12-03 16:40:24: 清理守护进程(GRP1_RWW_02)请求成功
2020-12-03 16:40:24 
#================================================================================#
GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG  
GRP1             453332      TRUE            AUTO            FALSE     


<<DATABASE GLOBAL INFO:>>
IP              MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
10.10.10.13     5536         2020-12-03 16:40:24  GLOBAL    VALID     OPEN           GRP1_RWW_03      OK        1     1     OPEN        PRIMARY   DSC_OPEN       TIMELY    VALID    

EP INFO:
INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
5236       OK        GRP1_RWW_03      OPEN        PRIMARY   0          0            TIMELY    VALID    3957            40682           3957            42039           NONE                  

<<DATABASE GLOBAL INFO:>>
IP              MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
10.10.10.11     5536         2020-12-03 16:40:25  GLOBAL    VALID     OPEN           GRP1_RWW_01      OK        1     1     OPEN        STANDBY   DSC_OPEN       TIMELY    INVALID  

EP INFO:
INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
5236       OK        GRP1_RWW_01      OPEN        STANDBY   0          0            TIMELY    INVALID  3956            40681           3956            40681           NONE                  

DATABASE(GRP1_RWW_01) APPLY INFO FROM (GRP1_RWW_03):
DSC_SEQNO[0], (ASEQ, SSEQ, KSEQ)[3956, 3956, 3956], (ALSN, SLSN, KLSN)[40681, 40681, 40681], N_TSK[0], TSK_MEM_USE[0]


<<DATABASE GLOBAL INFO:>>
IP              MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
10.10.10.12     5536         2020-12-03 16:40:24  GLOBAL    VALID     OPEN           GRP1_RWW_02      OK        1     1     OPEN        STANDBY   DSC_OPEN       TIMELY    INVALID  

EP INFO:
INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
5236       OK        GRP1_RWW_02      OPEN        STANDBY   0          0            TIMELY    INVALID  3941            40681           3941            40681           NONE                  

DATABASE(GRP1_RWW_02) APPLY INFO FROM (GRP1_RWW_01):
DSC_SEQNO[0], (ASEQ, SSEQ, KSEQ)[3956, 3956, 3956], (ALSN, SLSN, KLSN)[40681, 40681, 40681], N_TSK[0], TSK_MEM_USE[0]


[monitor]         2020-12-03 16:40:24: 清理守护进程(GRP1_RWW_03)请求成功
[monitor]         2020-12-03 16:40:24: 实例GRP1_RWW_03切换成功

#================================================================================#

[monitor]         2020-12-03 16:40:27: 守护进程(GRP1_RWW_03)状态切换 [OPEN-->RECOVERY]
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2020-12-03 16:40:27  RECOVERY       OK        GRP1_RWW_03      OPEN        PRIMARY   VALID    5        42039           42039           

[monitor]         2020-12-03 16:40:30: 守护进程(GRP1_RWW_02)状态切换 [OPEN-->UNIFY EP]
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2020-12-03 16:40:30  UNIFY EP       OK        GRP1_RWW_02      OPEN        STANDBY   VALID    5        42039           42039           

[monitor]         2020-12-03 16:40:30: 守护进程(GRP1_RWW_02)状态切换 [UNIFY EP-->OPEN]
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2020-12-03 16:40:30  OPEN           OK        GRP1_RWW_02      OPEN        STANDBY   VALID    5        42039           42039           

[monitor]         2020-12-03 16:40:30: 守护进程(GRP1_RWW_03)状态切换 [RECOVERY-->OPEN]
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2020-12-03 16:40:30  OPEN           OK        GRP1_RWW_03      OPEN        PRIMARY   VALID    5        42039           42039       

show global info           
2020-12-03 16:42:17 
#================================================================================#
GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG  
GRP1             453332      TRUE            AUTO            FALSE     


<<DATABASE GLOBAL INFO:>>
IP              MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
10.10.10.13     5536         2020-12-03 16:42:16  GLOBAL    VALID     OPEN           GRP1_RWW_03      OK        1     1     OPEN        PRIMARY   DSC_OPEN       TIMELY    VALID    

IP              MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
10.10.10.11     5536         2020-12-03 16:42:17  GLOBAL    VALID     OPEN           GRP1_RWW_01      OK        1     1     OPEN        STANDBY   DSC_OPEN       TIMELY    VALID    

IP              MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
10.10.10.12     5536         2020-12-03 16:42:16  GLOBAL    VALID     OPEN           GRP1_RWW_02      OK        1     1     OPEN        STANDBY   DSC_OPEN       TIMELY    VALID    


#================================================================================#
14. 模拟主库宕机,指定某备库接管

使用场景: 故障手动切换模式

[dmdba@DMDB1 ~]$ disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于主库打开状态
登录使用时间 : 4.852(ms)
上次登录ip       : ::1
上次登录时间   : 2020-12-03 16:20:34
登录失败次数   : 0
口令是否过期   : 未过期
disql V8
SQL> select name,arch_mode,decode(role$,1,'PRIMARY',2,'STANDBY','Normal') DB_MODE from v$database; 
行号     NAME ARCH_MODE DB_MODE
---------- ---- --------- -------
1          DMDB Y         PRIMARY
已用时间: 8.765(毫秒). 执行号:208.

## 杀死主库的实例进程和守护进程
# 一定记住守护进程也要杀死,不然它存在的情况下,会自动拉起它所守护的数据库实例
[root@DMDB1 ~]# ps -fu dmdba
UID         PID   PPID  C STIME TTY          TIME CMD
dmdba      5448      1  0 10:26 pts/0    00:00:01 /DMDB/app/DM8/bin/dmap
dmdba      6685   6684  0 12:37 pts/1    00:00:00 -bash
dmdba      7581      1  0 16:03 pts/0    00:00:16 /DMDB/app/DM8/bin/dmserver /DMDB/data/DMDB/dm.ini -noconsole
dmdba      7711      1  0 16:03 pts/0    00:00:14 /DMDB/app/DM8/bin/dmwatcher /DMDB/data/DMDB/dmwatcher.ini
 
[root@DMDB1 ~]# kill -9 7581 7711
    
    
#### 在监视器端执行接管主库命令 ###
# 由实例3接管实例1
login
show 
takeover GRP1.GRP1_RWW_03     
15.客户端或应用系 配置dm_svc.conf文件

dm_svc.conf放置地方: WINDOWS: %SystemRoot%\system32 LINUX: /etc

###### dm_svc.conf 文件内容 ######
# 全局配置
# 时区
TIME_ZONE=(+8:00)
LANGUAGE=(en)
dwrw=(192.168.0.11:5236,192.168.0.12:5236,192.168.0.13:5236)
LOGIN_MODE=(3)
#是否进行通信加密
LOGIN_ENCRYPT=0

# 服务配置区:服务配置区中的配置优先级高于全局配置区
[dwrw]
# 指定优先登录的服务器模式.
# 0:优先连接PRIMARY模式的库,NORMAL模式次之,最后选择STANTBY 模式
# 1:只连接主库
# 2:只连接备库
# 3:优先连接STANDBY模式的库,PRIMARY模式次之,最后选择NORMAL模式
# 4:优先连接NORMAL模式的库,PRIMARY模式次之,最后选择STANDBY模式
LOGIN_MODE=(3)
# 在服务器之间切换的次数
SWITCH_TIME=2000
# 在服务器之间切换的时间间隔,单位毫秒
SWITCH_INTERVAL=10

数据守护集群-读写分离_第6张图片


16. 读写分离测试:应用接口层实现

针对JDBC: rwSeparate 是否使用读写分离系统,默认 0;取值(0 不使用,1 使用)。 rwPercent
分发到主库的事务占主备库总事务的百分比,有效值 0~100,默认值 25。

<DRIVER>dm.jdbc.driver.DmDriver</DRIVER> 
<URL>jdbc:dm://dwrw?rwSeparate=1&rwPercent=10</URL>
17.总结:

读写分离集群实现原理:
利用备库提供只读服务、无法修改数据的特性,优先将所有操作发送到备库执行,一旦备库执行报错,则发送到主库重新执行
通过备库“试错”这么一个步骤,自然地将只读操作分流到备库执行。并且,备库“试错”由接口层自动完成,对应用透明。

读写分离集群作用:
由一个主库以及一个或者多个配置了即时(Timely)归档的备库组成,其主要目标是在保障数据库可用性基础上,实现读、写操作的自动分离,进一步提升数据库的业务支撑能力。读写分离集群通过即时归档机制保证主、备库数据一致性,并配合达梦数据库管理系统的各种接口(JDBC、DPI等),将只读操作自动分流到备库,有效降低主库的负载,提升系统吞吐量。

你可能感兴趣的:(玩转达梦数据库--启蒙篇,数据库)