赞
踩
主库修改数据产生的REDO日志, 通过实时归档机制, 在写入本地REDO之前发送给备库, 备库接收到REDO后重新应用REDO日志来保持与主库数据同步
当主库故障时, 备库再将所有REOD日志应用完成后, 就切换为主库对外提供服务
通过即时归档或实时归档所组成的主备系统
读写分离集群通过配置"一致性模式"保证主库和备库数据一致性
通过DM数据库的各种接口, 实现将读操作自动分流到备库
一致性模式: 该模式下, 当发送SELECT语句时, 不论该语句在主库执行还是备库执行其查询的结果都是一样的
高性能模式: 该模式下, 当发送SELECT语句时, 不能保证查询结果的一致性
主库 primary模式, 提供完整数据库服务的实例, 对外提供服务
备库 standby模式, 提供只读服务
REDO 日志 记录物理数据页的变化
REDO 日志传输 主库通过MAL系统发送redo日志到备库, 日志是以RLOG_PKG为单位进行日志包的发送
REDO 日志重演 备库接收到主库的REDO日志后, 重新应用REDO日志, 严格安装REDO产生的顺序解析REOD日志, 修改相应的物理页, 并且重新应用的过程中备库也会将数据写入本地REOD
守护进程 (dmwatcher) 监控数据库实例运行状态和主备之间数据同步情况以及故障处理的方式
监视器 (dmmonitor) 监控守护进程, 数据库实例信息, 用于管理集群, 监控实例故障后切换
/* 在数据守护中, 不严格区分数据库和数据库实例的概念, 数据库实例时唯一的标识 通常使用实例名来标记一个主库或者备库 */
实时数据同步: 通过实时发送redo, 进行数据同步
主备切换: 通过Switchover命令, 完成主备切换
自动故障处理: 当备库出现故障后, 守护进程自动通知主库修改归档为invalid状态停止同步, 并将备库置为失效
自动数据同步: 备库恢复后, 备库应用完历史数据后, 守护进程自动通知主库发送redo日志重新进行数据同步
备库接管: 主库发生故障后, 通过Takeover命令, 将备库切换为主库, 也可以配置为自动切换由监视器进行自动检测并切换
备库强制接管: 在无法完成手动切换时, 使用Takeover Force命令进行强制切换
读写分离访问: 通过配置实现读写分离
实时归档
本地归档
异步归档
数据守护集群: 本地归档, 实时归档, 异步归档
读写分离集群: 本地归档, 即时归档
MPP主备集群 : 本地归档, 实时归档
本地归档: LOCAL ARCHIVE 最多设置8个, 将redo日志进行本地归档, 在写入redo日之后触发
实施归档: REALTIME ARCHIVE 最多设置8个, 在写入redo日志之前触发, 通过MAL系统发送redo日志到备机并等待返回确认消息
即时归档: TIMELY ARCHIVE 最多设置8个, 在写入redo日志之后触发, 通过MAL系统发送redo日志到备机并等待备机应用完成后返回消息
异步归档: ASYNC ARCHIVE 最多设置8个, 由备机定时同步redo日志
PRIMARY 服务正常, 修改对象强制生成REDO日志
NORMAL 服务正常, 操作无限限制
STANDBY 只读访问, 实时归档失败, 根据配置向本地归档写入REDO日志
/* 所有模式, 必须在MOUNT状态下进行切换 */
监控数据库状态
发送状态信息
监控其他守护进程消息
接收监视器消息
主备库启动运行
备库故障处理
备库异常处理
主库故障处理
故障恢复处理
故障自动切换
主库发生故障, 监视器自动选择一个备库进行切换
故障手动切换
主库发生故障, 通过监视器命令进行切换
监控模式: MON_DW_CONFIRM=0
确认模式: MON_DW_CONFIRM=1
查看归档信息 SQL> SELECT arch_mode FROM v$database;
查看归档日志信息 SQL> SELECT arch_name, arch_type, arch_dest FROM v$dm_arch_ini;
查看OGUID SQL> SELECT oguid FROM v$instance;
查看MAL系统信息 SQL> SELECT * FROM v$dm_mal_ini;
startup
stop
switchover
takeover
open force
help
show
exit
环境说明
IP地址规划
外网IP: 100.36.1.1 内网IP: 192.168.232.128 实例名 its1 数据库名称 its
外网IP: 100.63.1.2 内网IP: 192.168.232.129 实例名 its2 数据库名称 its
端口规划
MAL_INST_PORT 5236 实例端口
MAL_PORT 16001 MAL系统端口
MAL_DW_PORT 17001 守护进程监听端口
MAL_INST_DW_PORT 18001 本地实例守护进程的端口
目录规划
/dm8 数据库软件目录
/dmdata 数据文件目录
/dmarch 归档日志目录
/dmbak 备份目录
一、数据库软件安装(两个节点相同操作)
1、主库
[root@itsapp1 ~]# su - dmdba
[dmdba@itsapp1 ~]$ cd /mnt/dm8/
[dmdba@itsapp1 dm8]$ ./DMInstall.bin -i
请以root系统用户执行命令:
/dm8/script/root/root_installer.sh
安装结束
[dmdba@itsapp1 dm8]$
[root@itsapp1 ~]# /dm8/script/root/root_installer.sh
2、备库
[root@itsapp2 ~]# su - dmdba
[dmdba@itsapp2 ~]$ cd /mnt/dm8/
[dmdba@itsapp2 dm8]$ ./DMInstall.bin -i
请以root系统用户执行命令:
/dm8/script/root/root_installer.sh
安装结束
[dmdba@itsapp2 dm8]$
二、初始化数据库实例
1、主库
[dmdba@itsapp1 bin]$ ./dminit PATH=/dmdata db_name=its instance_name=its1
2、备库
[dmdba@itsapp2 bin]$ ./dminit PATH=/dmdata db_name=its instance_name=its2
三、前台启动各个实例, 启动后关闭
1、主库
[dmdba@itsapp1 bin]$ ./dmserver /dmdata/its/dm.ini
2、备库
[dmdba@itsapp2 bin]$ ./dmserver /dmdata/its/dm.ini
四、主库进行脱机备份
[dmdba@itsapp1 bin]$ ./dmrman
dmrman V8
RMAN> BACKUP DATABASE '/dmdata/its/dm.ini' FULL BACKUPSET '/dmbak/full_database';
五、主库进行数据库还原操作
1、主库复制备份文件到备库
[dmdba@itsapp1 bin]$ scp -r /dmbak/full_database 100.63.1.2:/dmbak/
2、备库进行恢复
[dmdba@itsapp2 bin]$ ./dmrman
dmrman V8
RMAN> RESTORE DATABASE '/dmdata/its/dm.ini' FROM BACKUPSET '/dmbak/full_database';
RMAN> RECOVER DATABASE '/dmdata/its/dm.ini' FROM BACKUPSET '/dmbak/full_database';
RMAN> RECOVER DATABASE '/dmdata/its/dm.ini' UPDATE DB_MAGIC;
/*
安装官方文档说的, 复制到随便的目录下进行恢复则报无效的备份集目录, 只能和主库一样在dmbak目录下进行恢复
[dmdba@itsapp2 bin]$ ./dmrman
dmrman V8
RMAN> RESTORE DATABASE '/dmdata/its/dm.ini' FROM BACKUPSET '/tmp/full_database';
RESTORE DATABASE '/dmdata/its/dm.ini' FROM BACKUPSET '/tmp/full_database';
file dm.key not found, use default license!
[-10001]:[错误码:-127]无效的备份集目录[/tmp/full_database]
RMAN>
*/
六、主库配置所需配置文件
1、dm.ini
[dmdba@itsapp1 ~]$ vi /dmdata/its/dm.ini
INSTANCE_NAME = its1
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
2、dmarch.ini
[dmdba@itsapp1 ~]$ vi /dmdata/its/dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = its2
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmarch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 10240
3、dmmal.ini
[dmdba@itsapp1 ~]$ vi /dmdata/its/dmmal.ini
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = its1
MAL_HOST = 192.168.232.128
MAL_PORT = 16001
MAL_INST_HOST = 100.63.1.1
MAL_INST_PORT = 5236
MAL_DW_PORT = 17001
MAL_INST_DW_PORT = 18001
[MAL_INST2]
MAL_INST_NAME = its2
MAL_HOST = 192.168.232.129
MAL_PORT = 16001
MAL_INST_HOST = 100.63.1.2
MAL_INST_PORT = 5236
MAL_DW_PORT = 17001
MAL_INST_DW_PORT = 18001
4、dmwatcher.ini
[dmdba@itsapp1 ~]$ vi /dmdata/its/dmwatcher.ini
[GRP_RW]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453331
INST_INI = /dmdata/its/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /dm8/bin/dmserver
七、备库配置所需配置文件
1、主库复制配置文件到备库
[dmdba@itsapp1 ~]$ scp /dmdata/its/{dmarch,dmmal,dmwatcher}.ini 100.63.1.2:/dmdata/its/
2、dm.ini
[dmdba@itsapp2 ~]$ vi /dmdata/its/dm.ini
INSTANCE_NAME = its2
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
3、dmarch.ini
[dmdba@itsapp2 ~]$ vi /dmdata/its/dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = its1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmarch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 10240
4、dmmal.ini
[dmdba@itsapp2 ~]$ vi /dmdata/its/dmmal.ini
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = its1
MAL_HOST = 192.168.232.128
MAL_PORT = 16001
MAL_INST_HOST = 100.63.1.1
MAL_INST_PORT = 5236
MAL_DW_PORT = 17001
MAL_INST_DW_PORT = 18001
[MAL_INST2]
MAL_INST_NAME = its2
MAL_HOST = 192.168.232.129
MAL_PORT = 16001
MAL_INST_HOST = 100.63.1.2
MAL_INST_PORT = 5236
MAL_DW_PORT = 17001
MAL_INST_DW_PORT = 18001
5、dmwatcher.ini
[dmdba@itsapp2 ~]$ vi /dmdata/its/dmwatcher.ini
[GRP_RW]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453331
INST_INI = /dmdata/its/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /dm8/bin/dmserver
八、主库和备库以MOUNT方式启动数据库进行配置
1、主库
[dmdba@itsapp1 bin]$ ./dmserver /dmdata/its/dm.ini mount
[dmdba@itsapp1 bin]$ ./disql
SQL> SP_SET_OGUID(453331);
SQL> ALTER DATABASE PRIMARY;
2、备库
[dmdba@itsapp2 bin]$ ./dmserver /dmdata/its/dm.ini mount
[dmdba@itsapp2 bin]$ ./disql
SQL> SP_SET_OGUID(453331);
SQL> ALTER DATABASE STANDBY;
九、各个节点启动dmwatcher进程
[dmdba@itsapp1 bin]$ ./dmwatcher /dmdata/its/dmwatcher.ini
DMWATCHER[4.0] V8
DMWATCHER[4.0] IS READY
[dmdba@itsapp2 bin]$ ./dmwatcher /dmdata/its/dmwatcher.ini
DMWATCHER[4.0] V8
DMWATCHER[4.0] IS READY
十、配置监视器
/* 配置为确认监视器, 确认监视器可以完成主备的自动切换 我这里在备库进行创建 */
[dmdba@itsapp2 ~]$ vi /dmdata/its/dmmonitor.ini
MON_DW_CONFIRM = 1
MON_LOG_PATH = /dm8/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP_RW]
MON_INST_OGUID = 453331
MON_DW_IP = 192.168.232.128:17001
MON_DW_IP = 192.168.232.129:17001
十一、启动监视器
[dmdba@itsapp2 bin]$ ./dmmonitor /dmdata/its/dmmonitor.ini
SHOW GLOBAL INFO
2022-05-27 23:43:15
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP_RW 453331 TRUE AUTO FALSE
<<DATABASE GLOBAL INFO:>>
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.232.128 17001 2022-05-27 23:43:15 GLOBAL VALID OPEN ITS1 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.232.129 17001 2022-05-27 23:43:15 GLOBAL VALID OPEN ITS2 OK 1 1 OPEN STANDBY DSC_OPEN REALTIME VALID
#================================================================================#
十二、注册服务
1、主库
[root@itsapp1 ~]# cd /dm8/script/root/
[root@itsapp1 root]# ./dm_service_installer.sh -t dmwatcher -p its1 -watcher_ini /dmdata/its/dmwatcher.ini
[root@itsapp1 root]# ./dm_service_installer.sh -t dmserver -p its1 -dm_ini /dmdata/its/dm.ini
2、备库
[root@itsapp2 ~]# cd /dm8/script/root/
[root@itsapp2 root]# ./dm_service_installer.sh -t dmwatcher -p its2 -watcher_ini /dmdata/its/dmwatcher.ini
[root@itsapp2 root]# ./dm_service_installer.sh -t dmserver -p its2 -dm_ini /dmdata/its/dm.ini
[root@itsapp2 root]# ./dm_service_installer.sh -t dmmonitor -p confirm -monitor_ini /dmdata/its/dmmonitor.ini
[root@itsapp2 root]#
十三、停止所有服务, 以后台方式启动
停止集群顺序
1、监视器
2、主库守护进程
3、备库守护进程
4、主库实例
5、备库实例
启动集群顺序
1、主库实例
[root@itsapp1 ~]# systemctl start DmServiceits1.service
2、备库实例
[root@itsapp2 ~]# systemctl start DmServiceits2.service
3、主句守护进程
[root@itsapp1 ~]# systemctl start DmWatcherServiceits1.service
4、备库守护进程
[root@itsapp2 ~]# systemctl start DmWatcherServiceits2.service
5、监视器
[root@itsapp2 ~]# systemctl start DmMonitorServiceconfirm.service
十四、配置普通监视器, 用于查看集群信息
/* 我这里在主库搭建, 也可以在备库搭建, 在备库搭建那么配置文件的位置或者名字需要更改以下 */
[dmdba@itsapp2 ~]$ vi /dmdata/its/dmmonitor_0.ini
MON_DW_CONFIRM = 0
MON_LOG_PATH = /dm8/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP_RW]
MON_INST_OGUID = 453331
MON_DW_IP = 192.168.232.128:17001
MON_DW_IP = 192.168.232.129:17001
[dmdba@itsapp2 ~]$ cd /dm8/bin
[dmdba@itsapp2 bin]$ ./dmmonitor /dmdata/its/dmmonitor_0.ini
SHOW GLOBAL INFO
2022-05-28 00:02:03
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP_RW 453331 FALSE AUTO FALSE
<<DATABASE GLOBAL INFO:>>
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.232.128 17001 2022-05-28 00:02:02 GLOBAL VALID OPEN ITS1 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.232.129 17001 2022-05-28 00:02:02 GLOBAL VALID OPEN ITS2 OK 1 1 OPEN STANDBY DSC_OPEN REALTIME VALID
#================================================================================#
十五、配置客户端连接
1、主库
[root@itsapp1 ~]# vi /etc/dm_svc.conf
TIME_ZONE=(480)
LANGUAGE=(cn)
ITSDATA=(100.63.1.1:5236,100.63.1.2:5236)
[ITSDATA]
TIME_ZONE=(480)
LANGUAGE=(cn)
LOGIN_MODE=(1)
SWITCH_TIME=(3)
SWITCH_INTERVAL=(10)
2、备库
[root@itsapp2 ~]# vi /etc/dm_svc.conf
TIME_ZONE=(480)
TIME_ZONE=(480)
LANGUAGE=(cn)
ITSDATA=(100.63.1.1:5236,100.63.1.2:5236)
[ITSDATA]
TIME_ZONE=(480)
LANGUAGE=(cn)
LOGIN_MODE=(1)
SWITCH_TIME=(3)
SWITCH_INTERVAL=(10)
1、主库进行插入操作
[dmdba@itsapp1 bin]$ ./disql
SQL> CREATE TABLE t1(id int);
SQL> INSERT INTO t1 VALUES(1);
SQL> COMMIT;
2、备库查看是否同步
[dmdba@itsapp2 bin]$ ./disql
SQL> desc t1;
行号 NAME TYPE$ NULLABLE
---------- ---- ------- --------
1 ID INTEGER Y
SQL> SELECT * FROM t1;
行号 ID
---------- -----------
1 1
SQL>
3、备库进行插入
SQL> INSERT INTO t1 VALUES(10);
INSERT INTO t1 VALUES(10);
第1 行附近出现错误[-2018]:STANDBY模式下不支持对非临时表或含有lob类型列的表进行增删改操作.
已用时间: 0.171(毫秒). 执行号:0.
SQL>
在普通监视器中进行switchover
login
用户名:SYSDBA
密码:
[monitor] 2022-05-28 00:06:48: 登录监视器成功!
SWITCHOVER its2
[monitor] 2022-05-28 00:07:04: 开始切换实例ITS2
[monitor] 2022-05-28 00:07:04: 通知守护进程ITS1切换SWITCHOVER状态
[monitor] 2022-05-28 00:07:04: 守护进程(ITS1)状态切换 [OPEN-->SWITCHOVER]
[monitor] 2022-05-28 00:07:05: 切换守护进程ITS1为SWITCHOVER状态成功
[monitor] 2022-05-28 00:07:05: 通知守护进程ITS2切换SWITCHOVER状态
[monitor] 2022-05-28 00:07:05: 守护进程(ITS2)状态切换 [OPEN-->SWITCHOVER]
[monitor] 2022-05-28 00:07:06: 切换守护进程ITS2为SWITCHOVER状态成功
[monitor] 2022-05-28 00:07:06: 实例ITS1开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句
[monitor] 2022-05-28 00:07:06: 实例ITS1执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功
[monitor] 2022-05-28 00:07:06: 实例ITS2开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句
[monitor] 2022-05-28 00:07:06: 实例ITS2执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功
[monitor] 2022-05-28 00:07:06: 实例ITS1开始执行ALTER DATABASE MOUNT语句
[monitor] 2022-05-28 00:07:07: 实例ITS1执行ALTER DATABASE MOUNT语句成功
[monitor] 2022-05-28 00:07:07: 实例ITS2开始执行SP_APPLY_KEEP_PKG()语句
[monitor] 2022-05-28 00:07:08: 实例ITS2执行SP_APPLY_KEEP_PKG()语句成功
[monitor] 2022-05-28 00:07:08: 实例ITS2开始执行ALTER DATABASE MOUNT语句
[monitor] 2022-05-28 00:07:08: 实例ITS2执行ALTER DATABASE MOUNT语句成功
[monitor] 2022-05-28 00:07:08: 实例ITS1开始执行ALTER DATABASE STANDBY语句
[monitor] 2022-05-28 00:07:09: 实例ITS1执行ALTER DATABASE STANDBY语句成功
[monitor] 2022-05-28 00:07:09: 实例ITS2开始执行ALTER DATABASE PRIMARY语句
[monitor] 2022-05-28 00:07:09: 实例ITS2执行ALTER DATABASE PRIMARY语句成功
[monitor] 2022-05-28 00:07:09: 通知实例ITS2修改所有归档状态无效
[monitor] 2022-05-28 00:07:09: 修改所有实例归档为无效状态成功
[monitor] 2022-05-28 00:07:09: 实例ITS1开始执行ALTER DATABASE OPEN FORCE语句
[monitor] 2022-05-28 00:07:10: 实例ITS1执行ALTER DATABASE OPEN FORCE语句成功
[monitor] 2022-05-28 00:07:10: 实例ITS2开始执行ALTER DATABASE OPEN FORCE语句
[monitor] 2022-05-28 00:07:10: 实例ITS2执行ALTER DATABASE OPEN FORCE语句成功
[monitor] 2022-05-28 00:07:10: 实例ITS1开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句
[monitor] 2022-05-28 00:07:10: 实例ITS1执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功
[monitor] 2022-05-28 00:07:10: 实例ITS2开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句
[monitor] 2022-05-28 00:07:11: 实例ITS2执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功
[monitor] 2022-05-28 00:07:11: 通知守护进程ITS1切换OPEN状态
[monitor] 2022-05-28 00:07:11: 守护进程(ITS1)状态切换 [SWITCHOVER-->OPEN]
[monitor] 2022-05-28 00:07:12: 切换守护进程ITS1为OPEN状态成功
[monitor] 2022-05-28 00:07:12: 通知守护进程ITS2切换OPEN状态
[monitor] 2022-05-28 00:07:12: 守护进程(ITS2)状态切换 [SWITCHOVER-->OPEN]
[monitor] 2022-05-28 00:07:13: 切换守护进程ITS2为OPEN状态成功
[monitor] 2022-05-28 00:07:13: 通知组(GRP_RW)的守护进程执行清理操作
[monitor] 2022-05-28 00:07:13: 清理守护进程(ITS1)请求成功
[monitor] 2022-05-28 00:07:13: 清理守护进程(ITS2)请求成功
[monitor] 2022-05-28 00:07:13: 实例ITS2切换成功
SHOW GLOBAL INFO
2022-05-28 00:07:53
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP_RW 453331 FALSE AUTO FALSE
<<DATABASE GLOBAL INFO:>>
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.232.129 17001 2022-05-28 00:07:52 GLOBAL VALID OPEN ITS2 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.232.128 17001 2022-05-28 00:07:53 GLOBAL VALID OPEN ITS1 OK 1 1 OPEN STANDBY DSC_OPEN REALTIME VALID
#================================================================================#
1、主库进行关机
[root@itsapp1 ~]# init 0
2、备库登录普通监视器查看是否切换成功
SHOW GLOBAL INFO
2022-05-28 00:11:26
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP_RW 453331 FALSE AUTO FALSE
<<DATABASE GLOBAL INFO:>>
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.232.129 17001 2022-05-28 00:11:25 GLOBAL VALID OPEN ITS2 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID
#================================================================================#
/*
监视器中查看, 只存在备库并且模式是PRIMARY
*/
3、新主库上插入数据, 测试是否成功
[dmdba@itsapp2 bin]$ ./disql
SQL> INSERT INTO t1 VALUES(10);
SQL> COMMIT;
SQL> SELECT * FROM t1;
行号 ID
---------- -----------
1 1
2 10
3、原主机启动, 查看数据一致性情况
[dmdba@itsapp1 ~]$ cd /dm8/bin
[dmdba@itsapp1 bin]$ ./disql
SQL> SELECT * FROM t1;
行号 ID
---------- -----------
1 1
2 10 /* 数据已同步 */
SQL> INSERT INTO t1 VALUES(1);
INSERT INTO t1 VALUES(1);
第1 行附近出现错误[-2018]:STANDBY模式下不支持对非临时表或含有lob类型列的表进行增删改操作. /* 当前处于备库状态 */
已用时间: 0.861(毫秒). 执行号:0.
SQL>
4、普通监视器上查看效果
SHOW GLOBAL INFO
2022-05-28 00:16:28
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP_RW 453331 FALSE AUTO FALSE
<<DATABASE GLOBAL INFO:>>
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.232.129 17001 2022-05-28 00:16:27 GLOBAL VALID OPEN ITS2 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.232.128 17001 2022-05-28 00:16:28 GLOBAL VALID OPEN ITS1 OK 1 1 OPEN STANDBY DSC_OPEN REALTIME VALID
#================================================================================#
主备集群配置说明
DM 守护集群配置文件
dm.ini 数据库配置文件
dm.ctl 数据库控制文件(在主备的存放路径不一致时需要修改)
dmmal.ini MAL配置文件, 一个集群中该配置文件必须严格一致
dmarch.ini 归档配置文件
dmwatcher.ini 守护进程配置文件
dmwatcher.ctl 守护进程控制文件, v4.0版本不需要该文件
dmmonitor_auto.ini 确认监视器配置文件
dmmonitor_manual.ini 普通监视器配置文件
dm.ini的配置参数
INSTANCE_NAME = its1 实例名称, 长度不能超过16位, 必须全局唯一 对应dmmal.ini中的MAL_INST_NAME
PORT_NUM = 5236 监听端口
DW_INACTIVE_INTERVAL = 60 接收守护进程消息的超时时间, 超过该时间则进行集群故障切换等操作
ALTER_MODE_STATUS = 0 是否允许修改数据库的模式和状态 0: 不允许 1: 允许 守护模式下建议0
ENABLE_OFFLINE_TS = 2 是否允许offline表空间, 0: 不允许 1: 允许 2: 禁止备库 守护模式下建议2
MAL_INI = 1 开启mal系统
ARCH_INI = 1 开启归档
RLOG_SEND_APPLY_MON = 64 统计最近64次日志发送消息
dmmal.ini /* 要求和主库严格保持一致 */
MAL_CHECK_INTERVAL = 5 MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 MAL链路断开时间
[MAL_INST1] 第一个MAL实例配置
MAL_INST_NAME = its1 实例名, 和dm,ini保持一直
MAL_HOST = 10.10.1.1 MAL系统监听的地址, 内网地址
MAL_PORT = 61141 MAL系统监听的端口
MAL_INST_HOST = 100.63.1.1 对外提供服务的地址
MAL_INST_PORT = 5326 对外提供服务的端口
MAL_DW_PORT = 52141 守护进程监听的端口
MAL_INST_DW_PORT = 33141 本地实例监听守护进程的端口
[MAL_INST2]
MAL_INST_NAME
MAL_HOST
MAL_PORT
MAL_INST_HOST
MAL_INST_PORT
MAL_DW_PORT
MAL_INST_DW_PORT
dmarch.ini
主库
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME 归档类型, REALTIME: 实时归档
ARCH_DEST = its2 远程归档的实例ID
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL 本地归档
ARCH_DEST = /dmarch 归档目录
ARCH_FILE_SIZE = 128 归档文件大小, 128M
ARCH_SPACE_LIMIT = 102400 归档目录限制的大小
备库
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = its1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmarch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 102400
dmwatcher.ini
主库
[GRP1]
DW_TYPE = GLOBAL 全局守护类型
DW_MODE = AUTO 自动切换模式, MANUAL: 故障手动切换模式
DW_ERROR_TIME = 15 远程守护进程故障认定时间
INST_RECOVERY_TIME = 60 备库故障恢复的检测间隔时间
INST_ERROR_TIME = 15 本地实例 故障认定时间
INST_OGUID = 435331 守护系统的唯一OGUID
INST_INI = /dmdata/its/dm.ini dm.ini路径
INST_AUTO_RESTART = 1 打开实例的自动拉起功能
INST_STARTUP_CMD = /dm8/bin/dmserver 启动实例的命令
备库
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 15
INST_RECOVERY_TIME = 60
INST_ERROR_TIME = 15
INST_OGUID = 435331
INST_INI = /dmdata/its/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /dm8/bin/dmserver
dmmonitor.ini
MON_DW_CONFIRM = 1 确认监视器模式
MON_LOG_PATH = /dm8/log 监视器日志文件存放路径
MON_LOG_INTERVAL = 60 每隔 60 s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 每个日志文件最大 32 MB
MON_LOG_SPACE_LIMIT = 0 不限定日志文件总占用空间
[GRP_RW]
MON_INST_OGUID = 453331 GRP_RW组的唯一 OGUID 值
MON_DW_IP = 192.168.232.128:17001 配置为监视器到GRP_RW组的守护进程的连接信息, IP:PORT 形式配置
MON_DW_IP = 192.168.232.129:17001 IP 对应 dmmal.ini 中的 MAL_HOST, PORT 对应 dmmal.ini 中的 MAL_DW_PORT
读写分离集群在配置时, 只是归档方式不一样
[ARCHIVE_TIMELY]
ARCH_TYPE = TIMELY 这里使用即时归档方式
ARCH_DEST = its2
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmarch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 10240
DM 两节点读写分离集群搭建(基于实时归档方式)
ARCH_WAIT_APPLY = 1 这里必须配置为1, 开启一致性模式, 默认是0高性能模式
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmarch/
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = its2
更多详情请访问达梦在线服务平台 达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。