通过即时归档或实时归档所组成的主备系统
读写分离集群通过配置"一致性模式"保证主库和备库数据一致性
通过DM数据库的各种接口, 实现将读操作自动分流到备库
一致性模式: 该模式下, 当发送SELECT语句时, 不论该语句在主库执行还是备库执行其查询的结果都是一样的
高性能模式: 该模式下, 当发送SELECT语句时, 不能保证查询结果的一致性
主库 primary模式, 提供完整数据库服务的实例, 对外提供服务
备库 standby模式, 提供只读服务
REDO 日志 记录物理数据页的变化
REDO 日志传输 主库通过MAL系统发送redo日志到备库, 日志是以RLOG_PKG为单位进行日志包的发送
REDO 日志重演 备库接收到主库的REDO日志后, 重新应用REDO日志, 严格安装REDO产生的顺序解析REOD日志, 修改相应的物理页, 并且重新应用的过程中备库也会将数据写入本地REOD
守护进程 (dmwatcher) 监控数据库实例运行状态和主备之间数据同步情况以及故障处理的方式
监视器 (dmmonitor) 监控守护进程, 数据库实例信息, 用于管理集群, 监控实例故障后切换
实时归档
本地归档
异步归档
数据守护集群: 本地归档, 实时归档, 异步归档
读写分离集群: 本地归档, 即时归档
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日志
虚拟机 | IP | 实列名 | 数据库名称 |
---|---|---|---|
主机(读) | 192.168.232.128 | its1 | its |
备机(写) | 192.168.232.129 | its2 | its |
名称 | 端口 | 说明 |
---|---|---|
MAL_INST_PORT | 5236 | 实例端口 |
MAL_PORT | 16001 | MAL系统端口 |
MAL_DW_PORT | 17001 | 守护进程监听端口 |
MAL_INST_DW_PORT | 18001 | 本地实例守护进程的端口 |
两个节点同样操作
[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
[root@itsapp2 ~]# su - dmdba
[dmdba@itsapp2 ~]$ cd /mnt/dm8/
[dmdba@itsapp2 dm8]$ ./DMInstall.bin -i
请以root系统用户执行命令:
/dm8/script/root/root_installer.sh
安装结束
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
需要先启动数据实例
读库
[dmdba@itsapp1 bin]$ ./dmserver /dmdata/its/dm.ini
写库
[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;
[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
[dmdba@itsapp1 bin]$ ./dmserver /dmdata/its/dm.ini mount [dmdba@itsapp1 bin]$ ./disql SQL> SP_SET_OGUID(453331); SQL> ALTER DATABASE PRIMARY;
[dmdba@itsapp2 bin]$ ./dmserver /dmdata/its/dm.ini mount [dmdba@itsapp2 bin]$ ./disql SQL> SP_SET_OGUID(453331); SQL> ALTER DATABASE STANDBY;
[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
[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
[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
停止集群顺序
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
[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)
[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)
文章
阅读量
获赞