DM主备集群概念
DM数据守护(Data
Watch)是一种集成化的高可用、高性能数据库解决方案,是数据库异地容灾的首选方案。
DM数据守护提供多种解决方案,可以配置成实时主备、读写分离集群DMRWC、MPP主备,能满足用户关于系统可用性、数据安全性、性能等方面的综合需求。
(O:dataguard,M:主备)
实时主备集群
实时主备由一个主库以及一个或者多个配置了实时(Realtime)归档的悲苦组成,其主要目的是保障数据库可用性,提高数据安全性。
实时主备系统中,主库提供完整的数据库功能,备库提供只读服务。
主库修改数据产生的redo日志,通过实时归档机制,在写入联机redo日志文件之前发送到备库,实时备库通过重演redo日志与主库保持数据同步。当主库出现故障时,备库在讲所有redo日志重演结束后,就可以切换为主库对外提供数据库服务。
主备可以是单机,也可以是DSC、MPP
读写分离集群
读写分离集群由一个主库以及一个或者多个配置了即时(timely)归档的备库组成。主要目标是在保障数据库可用性基础上,实现读、写操作的自动分离,进一步提升数据库的业务支撑能力。
读写分离集群通过即时归档机制保证主、备库数据一致性,并配合达梦数据库管理系统的各种借口(JDBC、DPI等),将只读操作自动分流到备库,有效降低主库的负载,提升系统吞吐量。
MPP主备
MPP主备就是在MPP集群的基础上,为每一个MPP节点配置一套实时主备系统,这些实时主备系统一起构成了MPP主备系统。
一个MPP节点对应的主备系统称为一个数据守护组group,
MPP主备系统中各个数据守护组保持相对独立,当某个MPP主节点出现故障时,在其对应的数据守护组内挑选一个备库切换为主库后,就可以确保整个MPP集群的正常使用。
DM数据守护(data watch)的实现原理
将主库(生产库)产生的redo日志传输到备库,备库接收并重新应用redo日志,从而实现备库与主库的数据同步。
DM数据守护的核心思想是监控数据库状态,获取主、备库数据同步情况,为redo日志传输与重演过程中出现的各种异常情况提供一系列的解决方案。
DM数据守护系统结构:
主库、备库
redo日志、redo日志传输、redo日志重演、守护进程(dmwatcher)、监视器(dmmonitor)
守护进程(dmwatcher)
是DM数据守护系统不可或缺的核心部件,是数据库实例和监视器之间信息流转的桥梁。
数据库实例向本地守护进程发送信息,接收本地守护进程的消息和命令;
监视器(dmmonitor)
接收守护进程的消息,并向守护进程发送命令;
数据库实例与监视器之间没有直接的消息交互;
守护进程解析并执行监视器发起的各种命令switchover/takeover/open
database等,并在必要时通知数据库实例执行相应的操作。
本地归档
redo日志写入日志文件后,由归档线程再写入本地服务器中的归档日志
实时归档(realtime)
实时归档只有在数据模式为primary主库才生效,是实现MPP和实时主备的基础。在redo日志写入联机日志文件之前,在通过mal系统将redo_buf发送到备库。
即时归档(timely)
在redo日志写入联机日志文件之后,再通过mal系统将redo_buf发送到备库,及时归档时读写分离实现的基础,一个主库最多配8个即时备库。
远程归档
redo日志写入日志文件后,有归档线程再写入远程服务器中的归档日志
异步归档(async)
redo日志写入日志文件后,定时或者定期启动归档redo日志进行发送,设置定时归档必须确保至少有一个本地归档。
OGUID(O:dbid)
数据守护唯一标识码
select oguid from v$instance;
mal系统
mal系统是基于TCP协议实现的一种内部通信机制,具有可靠、灵活、高效的特性。
DM通过mal系统实现redo日志传输,以及其他一些实例间的消息通讯
2 DM主备集群安装前规划 01.端口规划:实例名 PORT_NUM MAL_INST_HOST MAL_INST_PORT MAL_INST_DW_PORT MAL_DW_PORT
MAL_HOST MAL_PORT
dmdb1 5236 192.168.1.81 5236 15237 15238 192.168.1.81 15239
dmdb2 5236 192.168.1.82 5236 25237 25238 192.168.1.82 25239
dmmonitor 192.168.1.84
端口号相关说明
PORT_NUM 数据库实例监听端口
MAL_INST_HOST 实例的对外服务IP地址
MAL_INST_PORT 实例的对外服务端口,和dm.ini的PORT_NUM一致
MAL_INST_DW_PORT 实例监听守护进程TCP连接的端口
MAL_HOST MAL系统监听TCP连接的IP地址
MAL_PORT MAL系统监听TCP连接的端口
MAL_DW_PORT 实例对应的守护进程监听TCP连接的端口
02.数据库初始化参数页大小:16K
簇大小:16页
字符集:UTF-8
字符串比较大小写敏感:是
长度以字符为单位:否
数据库名:dmdb
实例名:dmdb1,dmdb2
端口:15236,25236,(35236)
日志文件大小:共 2 个(每个256MB);
是否启用归档:启用
03.安装部署路径规划实例名 IP地址 安装路径 实例路径 归档路径 备份路径 日志路径
dmdb1 192.168.1.81 /dm/dmdbms/dmdb /dm/dmdata/dmdb /dm/dmarch/dmdb /dm/dmback
/dm/dmdbms/dmdb/log
dmdb2 192.168.1.82 /dm/dmdbms/dmdb /dm/dmdata/dmdb /dm/dmarch/dmdb /dm/dmback
/dm/dmdbms/dmdb/log
dmdb4 192.168.1.84 /dm/dmdbms/dmdb /dm/dmdata/dmdb /dm/dmarch/dmdb /dm/dmback
/dm/dmdbms/dmdb/log
1主+1备+1监控
01.上传安装程序root:
umount /mnt
mount -o loop /dm/dmdbms/dm8_setup_rh7_64_ent_8.1.1.48_20191129.iso /mnt
02.DM数据库安装192.168.1.81/82/84:
su - dmdba
cd /mnt
./DMInstall.bin -i
服务安装目录:/dm/dmdbms/dmdb
root:
/dm/dmdbms/dmdb/script/root/root_installer.sh
03.实例主备集群搭建1).创建主库实例
192.168.1.81:
su - dmdba
cd /dm/dmdbms/dmdb/bin
./dminit path=/dm/dmdata db_name=dmdb instance_name=dmdb1 port_num=5236
LOG_SIZE=256 SYSDBA_PWD=Gz_dmdba2021 EXTENT_SIZE=16 PAGE_SIZE=16 charset=1
dmserver /dm/dmdata/dmdb/dm.ini
或者
nohup dmserver /dm/dmdata/dmdb/dm.ini &
ps -ef|grep dmserver
disql sysdba/Gz_dmdba2021@192.168.1.81:5236
call SF_SET_SYSTEM_PARA_VALUE (‘MAX_OS_MEMORY’,95,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘MAX_SESSIONS’,1000,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘MAX_SESSION_STATEMENT’,5000,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘BUFFER’,1024,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘MAX_BUFFER’,1024,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘BUFFER_POOLS’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘RECYCLE’,512,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘RECYCLE_POOLS’,1,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘HJ_BUF_GLOBAL_SIZE’,500,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘HJ_BUF_SIZE’,300,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘DICT_BUF_SIZE’,50,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘TEMP_SIZE’,200,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘VM_POOL_SIZE’,256,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘SESS_POOL_SIZE’,256,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘CACHE_POOL_SIZE’,200,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘WORKER_THREADS’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘TASK_THREADS’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘USE_PLN_POOL’,1,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘OLAP_FLAG’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘OPTIMIZER_MODE’,1,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘VIEW_PULLUP_FLAG’,1,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘COMPATIBLE_MODE’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘ENABLE_MONITOR’,0,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘SVR_LOG’,0,1,2);
开启归档模式:
ALTER DATAbase MOUNT;
ALTER DATAbase ADD ARCHIVELOG ‘DEST=/dm/dmarch/dmdb,TYPE =
local,FILE_SIZE=256,SPACE_LIMIT = 0’;
ALTER DATAbase ARCHIVELOG;
ALTER DATAbase OPEN;
select arch_mode from v$database;
select * from v$dm_arch_ini;
2).数据准备:
方法1:数据文件拷贝
scp数据库实例目录到备节点:
scp -r /dm/dmdata 192.168.1.82:/dm
方法2:使用DMRMAN备份主库:
正常关闭数据库
进行脱机备份
或者采用联机备份
我们这里是新库,使用脱机备份比较完整
关库:
DmServicefgedudb stop
或者
kill -9 XX
备份:
cd /dm/dmdbms/dmdb/bin
./dmrman
RMAN> backup database ‘/dm/dmdata/dmdb/dm.ini’ full to dmdb_full_01 backupset
‘/dm/dmback/dmdb_full_01’;
如果报错:[-718]:收集到的归档日志不连续,要重启dmserver,或者执行命令"checkpoint(100);"
dmserver /dm/dmdata/dmdb/dm.ini
scp -r /dm/dmback/dmdb_full_01 dm82:/dm/dmback
3).创建备库并恢复数据
192.168.1.82:
第二台机:
su - dmdba
cd /dm/dmdbms/dmdb/bin
./dminit path=/dm/dmdata db_name=dmdb instance_name=dmdb2 port_num=5236
LOG_SIZE=256 SYSDBA_PWD=Gz_dmdba2021 EXTENT_SIZE=16 PAGE_SIZE=16 charset=1
./dmrman
restore database ‘/dm/dmdata/dmdb/dm.ini’ from backupset
‘/dm/dmback/dmdb_full_01’;
recover database ‘/dm/dmdata/dmdb/dm.ini’ from backupset
‘/dm/dmback/dmdb_full_01’;
recover database ‘/dm/dmdata/dmdb/dm.ini’ update db_magic
4).修改配置参数-主库
su - dmdba
cd /dm/dmdata/dmdb
A.dm.ini
vi dm.ini
INSTANCE_NAME = dmdb1 #主库实例
PORT_NUM = 5236 #数据库实例监听端口
DW_PORT = 15237
#守护环境下,监听守护进程连接端口,为上面规划表中的MAL_INST_DW_PORT值
DW_ERROR_TIME = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态
ENABLE_OFFLINE_TS = 2 #不允许备库OFFLINE表空间
MAL_INI = 1 #打开MAL系统
ARCH_INI = 1 #打开归档配置
HA_INST_CHECK_FLAG = 1 #检测是否多个实例进程同时启动
RLOG_SEND_APPLY_MON = 64 #统计最近64次的日志发送信息
B.dmmal.ini
两个实例参数一样
vi dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定MAL链路断开的时间
[MAL_INST1]
MAL_INST_NAME = dmdb1 #实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 192.168.1.81 #MAL系统监听TCP连接的IP地址
MAL_PORT = 15239 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.1.81 #实例的对外服务IP地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_INST_DW_PORT = 15237 #实例监听守护进程TCP连接的端口
MAL_DW_PORT = 15238 #实例对应的守护进程监听TCP连接的端口
[MAL_INST2]
MAL_INST_NAME = dmdb2 #实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 192.168.1.82 #MAL系统监听TCP连接的IP地址
MAL_PORT = 25239 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.1.82 #实例的对外服务IP地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_INST_DW_PORT = 25237 #实例监听守护进程TCP连接的端口
MAL_DW_PORT = 25238 #实例对应的守护进程监听TCP连接的端口
C.dmarch.ini
2节点都配置,ARCH_DEST分写写对方的实例。
比如当前实例dmdb1是主库,则ARCH_DEST配置为dmdb2。
vi dmarch.ini
ARCH_WAIT_APPLY=1
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = dmdb2 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/dmarch/dmdb #本地归档文件存放路径
ARCH_FILE_SIZE = 256 #单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位Mb,0表示无限制,范围1024~4294967294M
D.dmwatcher.ini
2节点都配置,守护进程使用MANUAL,手工切换模式。
vi dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式,手工MANUAL
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一OGUID值
INST_INI = /dm/dmdata/dmdb/dm.ini #dm.ini配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/dmdbms/dmdb/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
5).修改配置参数-备库
su - dmdba
cd /dm/dmdata/dmdb
A.dm.ini
vi dm.ini
INSTANCE_NAME = dmdb2 #主库实例
PORT_NUM = 5236 #数据库实例监听端口
DW_PORT = 25237
#守护环境下,监听守护进程连接端口,为上面规划表中的MAL_INST_DW_PORT值
DW_ERROR_TIME = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态
ENABLE_OFFLINE_TS = 2 #不允许备库OFFLINE表空间
MAL_INI = 1 #打开MAL系统
ARCH_INI = 1 #打开归档配置
HA_INST_CHECK_FLAG = 1 #检测是否多个实例进程同时启动
RLOG_SEND_APPLY_MON = 64 #统计最近64次的日志发送信息
B.dmmal.ini
两个实例参数一样
vi dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定MAL链路断开的时间
[MAL_INST1]
MAL_INST_NAME = dmdb1 #实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 192.168.1.81 #MAL系统监听TCP连接的IP地址
MAL_PORT = 15239 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.1.81 #实例的对外服务IP地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_INST_DW_PORT = 15237 #实例监听守护进程TCP连接的端口
MAL_DW_PORT = 15238 #实例对应的守护进程监听TCP连接的端口
[MAL_INST2]
MAL_INST_NAME = dmdb2 #实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 192.168.1.82 #MAL系统监听TCP连接的IP地址
MAL_PORT = 25239 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.1.82 #实例的对外服务IP地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_INST_DW_PORT = 25237 #实例监听守护进程TCP连接的端口
MAL_DW_PORT = 25238 #实例对应的守护进程监听TCP连接的端口
C.dmarch.ini
2节点都配置,ARCH_DEST分别写对方的实例。比如当前实例dmdb2是备库,则ARCH_DEST配置为dmdb1。
vi dmarch.ini
ARCH_WAIT_APPLY=1
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = dmdb1 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/dmarch/dmdb #本地归档文件存放路径
ARCH_FILE_SIZE = 256 #单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位Mb,0表示无限制,范围1024~4294967294M
D.dmwatcher.ini
2节点都配置。守护进程使用MANUAL,手工切换模式。
vi dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式,MANUAL手工切换模式。
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一OGUID值
INST_INI = /dm/dmdata/dmdb/dm.ini #dm.ini配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/dmdbms/dmdb/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
5).主库注册服务,配置OGUID,修改数据库模式为主库
192.168.1.81:
root:
cd /dm/dmdbms/dmdb/script/root/
./dm_service_installer.sh -t dmserver -dm_ini /dm/dmdata/dmdb/dm.ini -p dmdb
./dm_service_installer.sh -t dmwatcher -watcher_ini
/dm/dmdata/dmdb/dmwatcher.ini -p dmdb
su - dmdba
cd /dm/dmdbms/dmdb/bin
dmserver /dm/dmdata/dmdb/dm.ini mount
disql SYSDBA/Gz_dmdba2021@192.168.1.81:5236
select status$ from v$database;
#1是正在起到,2是redo完成,3是mount状态,4是open,5是挂起,6是关闭
SP_SET_PARA_VALUE(1,‘ALTER_MODE_STATUS’,1); #允许修改数据库模式
sp_set_oguid(453331);
alter database primary;
SP_SET_PARA_VALUE(1,‘ALTER_MODE_STATUS’,0); #不允许修改数据库模式
exit;
启动守护进程:
su - dmdba
cd /dm/dmdbms/dmdb/bin
./dmwatcher /dm/dmdata/dmdb/dmwatcher.ini
或者
./DmWatcherServicedmdb start #推荐
6).备库注册服务,配置OGUID,修改数据库模式为备库
192.168.1.82:
root:
cd /dm/dmdbms/dmdb/script/root/
./dm_service_installer.sh -t dmserver -dm_ini /dm/dmdata/dmdb/dm.ini -p dmdb
./dm_service_installer.sh -t dmwatcher -watcher_ini
/dm/dmdata/dmdb/dmwatcher.ini -p dmdb
su - dmdba
cd /dm/dmdbms/dmdb/bin
./dmserver /dm/dmdata/dmdb/dm.ini mount
su - dmdba
disql SYSDBA/Gz_dmdba2021@192.168.1.82:5236
select status$ from v$database;
SP_SET_PARA_VALUE(1,‘ALTER_MODE_STATUS’,1);
sp_set_oguid(453331);
alter database standby;
SP_SET_PARA_VALUE(1,‘ALTER_MODE_STATUS’,0);
exit;
启动守护进程:
su - dmdba
cd /dm/dmdbms/dmdb/bin
./dmwatcher /dm/dmdata/dmdb/dmwatcher.ini
或者
./DmWatcherServicedmdb start #推荐
04.配置监听器服务器dmmonitor192.168.1.84:
–call SF_SET_SYSTEM_PARA_VALUE (‘MAX_OS_MEMORY’,95,1,2);
–call SF_SET_SYSTEM_PARA_VALUE (‘MAX_SESSIONS’,1000,1,2);
–call SF_SET_SYSTEM_PARA_VALUE (‘MAX_SESSION_STATEMENT’,5000,1,2);
–call SF_SET_SYSTEM_PARA_VALUE (‘BUFFER’,1024,1,2);
–call SF_SET_SYSTEM_PARA_VALUE (‘MAX_BUFFER’,1024,1,2);
–call SF_SET_SYSTEM_PARA_VALUE (‘BUFFER_POOLS’,2,1,2);
–call SF_SET_SYSTEM_PARA_VALUE (‘RECYCLE’,512,1,2);
–call SF_SET_SYSTEM_PARA_VALUE (‘RECYCLE_POOLS’,1,1,2);
–call SF_SET_SYSTEM_PARA_VALUE (‘HJ_BUF_GLOBAL_SIZE’,500,1,2);
–call SF_SET_SYSTEM_PARA_VALUE (‘HJ_BUF_SIZE’,300,1,2);
–call SF_SET_SYSTEM_PARA_VALUE (‘DICT_BUF_SIZE’,50,1,2);
–call SF_SET_SYSTEM_PARA_VALUE (‘TEMP_SIZE’,200,1,2);
–call SF_SET_SYSTEM_PARA_VALUE (‘VM_POOL_SIZE’,256,1,2);
–call SF_SET_SYSTEM_PARA_VALUE (‘SESS_POOL_SIZE’,256,1,2);
–call SF_SET_SYSTEM_PARA_VALUE (‘CACHE_POOL_SIZE’,200,1,2);
–call SF_SET_SYSTEM_PARA_VALUE (‘WORKER_THREADS’,2,1,2);
–call SF_SET_SYSTEM_PARA_VALUE (‘TASK_THREADS’,2,1,2);
–call SF_SET_SYSTEM_PARA_VALUE (‘USE_PLN_POOL’,1,1,2);
–call SF_SET_SYSTEM_PARA_VALUE (‘OLAP_FLAG’,2,1,2);
–call SF_SET_SYSTEM_PARA_VALUE (‘OPTIMIZER_MODE’,1,1,2);
–call SF_SET_SYSTEM_PARA_VALUE (‘VIEW_PULLUP_FLAG’,1,1,2);
–call SF_SET_SYSTEM_PARA_VALUE (‘COMPATIBLE_MODE’,2,1,2);
–call SF_SET_SYSTEM_PARA_VALUE (‘ENABLE_MONITOR’,0,1,2);
–call SF_SET_SYSTEM_PARA_VALUE (‘SVR_LOG’,0,1,2);
安装DM软件,安装完成不需要建库
su - dmdba
mkdir /dm/dmdbms/dmdb/data
vi /dm/dmdbms/dmdb/data/dmmonitor.ini
MON_DW_ConFIRM = 1 #确认监视器模式
MON_LOG_PATH = /dm/dmdbms/dmdb/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔60s定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 453331 #组GRP1的唯一OGUID值
MON_DW_IP = 192.168.1.81:15238
MON_DW_IP = 192.168.1.82:25238
#配置为监视器到组GRP1的守护进程的连接信息,以“IP:PORT”的形式配置
#IP对应dmmal.ini中的MAL_HOST,PORT对应dmmal.ini中的MAL_DW_PORT
注册服务:
su - root
cd /dm/dmdbms/dmdb/script/root
./dm_service_installer.sh -t dmmonitor -monitor_ini
/dm/dmdbms/dmdb/data/dmmonitor.ini -p dmdb
启动监视器:
su - dmdba
cd /dm/dmdbms/dmdb/bin
./DmMonitorServicedmdb start #后台启动
ps -ef|grep dmmonitor
./DmMonitorServicedmdb stop
或者
/dm/dmdbms/dmdb/bin/dmmonitor /dm/dmdbms/dmdb/data/dmmonitor.ini #前台启动
show
4 DM主备集群切换测试与维护管理 01.主备同步测试业务测试:
192.168.1.81:
主库
disql SYSDBA/Gz_dmdba2021@192.168.1.81:5236
create tablespace ts_test datafile ‘/dm/dmdata/dmdb/ts_test01.dbf’ size 100
autoextend off;
create tablespace ts_idx datafile ‘/dm/dmdata/dmdb/ts_idx01.dbf’ size 100
autoextend off;
create user “ldy” identified by “ldy123456” default tablespace ts_test default
index tablespace ts_idx;
grant dba to ldy;
select PATH from v$datafile;
conn ldy/ldy123456@192.168.1.81:5236;
create table table_test01 (id int,name varchar(50),create_date date);
insert into table_test01 values(1,‘张三’,‘2021-04-01’);
insert into table_test01 values(2,‘李四’,‘2021-04-02’);
insert into table_test01 values(3,‘王五’,‘2021-04-03’);
insert into table_test01 values(4,‘table_test01.net.cn’,‘2021-04-04’);
insert into table_test01 values(5,‘wx’,‘2021-04-05’);
insert into table_test01 values(6,‘test-com’,‘2021-04-06’);
insert into table_test01 values(7,‘wx-gzh’,‘2021-04-07’);
insert into table_test01 values(8,‘itpux_com’,‘2021-04-08’);
insert into table_test01 values(9,‘oracle’,‘2021-04-09’);
insert into table_test01 values(10,‘mysql’,‘2021-03-01’);
commit;
select * from table_test01;
select count(*) from table_test01;
select TABLE_NAME,TABLESPACE_NAME from user_tables where
table_name=‘TABLE_TEST01’;
192.168.1.82:
备库
disql SYSDBA/Gz_dmdba2021@192.168.1.82:5236
select PATH from v$datafile;
conn ldy/ldy123456@192.168.1.82:5236;
select * from table_test01;
select count(*) from ldy.table_test01;
02.主备切换测试192.168.1.84:
ps -ef|grep dmmonitor
kill -9 xx
正常切换
/dm/dmdbms/dmdb/bin/dmmonitor /dm/dmdbms/dmdb/data/dmmonitor.ini
show
choose switchover grp1
switchover grp1.DMDB2
login
用户名:sysdba
密码:Gz_dmdba2021
switchover grp1.DMDB2
192.168.1.82:
disql SYSDBA/Gz_dmdba2021@192.168.1.82:5236
conn ldy/ldy123456@192.168.1.82:5236;
insert into table_test01 values(11,‘王大锤’,‘2021-06-07’);
insert into table_test01 values(12,‘王大拿’,‘2021-06-08’);
commit;
192.168.1.81:
disql SYSDBA/Gz_dmdba2021@192.168.1.81:15236
select * from ldy.table_test01;
select name,status$,ROLE$ from v$database; --1是主库,2是备库
192.168.1.84:
takeover非正常切换
dmmonitor /dm/dmdbms/dmdb/data/dmmonitor.ini
choose takeover grp1
将主库直接模拟宕机
192.168.1.82:
systemctl stop network
192.168.1.84:
choose takeover grp1
takeover FGEDUDB1
03.主备集群启停流程查看服务进程
ps -ef|grep dmserver
ps -ef|grep dmwatcher
ps -ef|grep dmmonitor
select name,status$,ROLE$ from v$database;
–1是主库,2是备库,0普通的没有主也没有备
192.168.1.81:
su - dmdba
DmServicefgedudb start
192.168.1.82:
su - dmdba
DmServicefgedudb start
192.168.1.81:
su - dmdba
DmWatcherServicefgedudb start
192.168.1.82:
su - dmdba
DmWatcherServicefgedudb start
192.168.1.84:
su - dmdba
dmmonitor /dm/dmdbms/dmdb/data/dmmonitor.ini
DmMonitorServicefgedudb start
192.168.1.84:
su - dmdba
dmmonitor /dm/dmdbms/dm8/data/dmmonitor.ini
exit
或者:
DmMonitorServicefgedudb stop
192.168.1.81:
su - dmdba
DmWatcherServicefgedudb stop
192.168.1.82:
su - dmdba
DmWatcherServicefgedudb stop
192.168.1.81:
su - dmdba
DmServicefgedudb stop
192.168.1.82:
su - dmdba
DmServicefgedudb stop
vi /etc/dm_svc.conf
TIME_ZONE=(480)
LANGUAGE=(cn)
dmdb=(192.168.1.81:15236,192.168.1.82:25236)
[dmdb]
LOGIN_MODE=(1)
SWITCH_TIME=2000
SWITCH_INTERVAL=10
5 DM主备集群添加节点(异步-4主机)1主+1实时+1异步+1监控
规划
实例名 PORT_NUM MAL_INST_HOST MAL_INST_PORT MAL_INST_DW_PORT MAL_DW_PORT
MAL_HOST MAL_PORT
dmdb1 5236 192.168.1.81 5236 15237 15238 192.168.1.81 15239
dmdb2 5236 192.168.1.82 5236 25237 25238 192.168.1.82 25239
dmdb3 5236 192.168.1.83 5236 35237 35238 192.168.1.83 35239
dmdb4 192.168.1.84
实例名 Ip地址 安装路径 实例路径 归档路径 备份路径 日志路径
dmdb1 192.168.1.81 /dm/dmdbms/dmdb /dm/dmdata/dmdb /dmdb/dmarch/dmdb
/dmdb/dmback /dmdb/dmdbms/dmdb/log
dmdb2 192.168.1.81 /dm/dmdbms/dmdb /dm/dmdata/dmdb /dmdb/dmarch/dmdb
/dmdb/dmback /dmdb/dmdbms/dmdb/log
dmdb3 192.168.1.83 /dm/dmdbms/dmdb /dm/dmdata/dmdb /dmdb/dmarch/dmdb
/dmdb/dmback /dmdb/dmdbms/dmdb/log
dmdb4 192.168.1.84 /dm/dmdbms/dmdb /dm/dmdata/dmdb /dmdb/dmarch/dmdb
/dmdb/dmback /dmdb/dmdbms/dmdb/log
192.168.1.83:
root:
umount /mnt
mount -o loop /dm/dmdbms/dm8_setup_rh7_64_ent_8.1.1.48_20191129.iso /mnt
su - dmdba
cd /mnt
./DMInstall.bin -i
root:
/dm/dmdbms/dmdb/script/root/root_installer.sh
su - dmdba
cd /dm/dmdbms/dmdb/bin
./dminit path=/dm/dmdata db_name=dmdb instance_name=dmdb3 port_num=5236
LOG_SIZE=256 SYSDBA_PWD=Gz_dmdba2021 EXTENT_SIZE=16 PAGE_SIZE=16 charset=1
这里是联机备份,因为之前的库在使用中了:
192.168.1.81:
SQL:
[dmdba@dm81 bin]$ disql sysdba/Gz_dmdba2021@192.168.1.81:5236
backup database full backupset ‘/dm/dmback/dmdb_full_02’;
exit;
scp -r /dm/dmback/dmdb_full_02 192.168.1.83:/dm/dmback
恢复
192.168.1.83
cd /dm/dmdbms/dmdb/bin
./dmrman
restore database ‘/dm/dmdata/dmdb/dm.ini’ from backupset
‘/dm/dmback/dmdb_full_02’
recover database ‘/dm/dmdata/dmdb/dm.ini’ from backupset
‘/dm/dmback/dmdb_full_02’
recover database ‘/dm/dmdata/dmdb/dm.ini’ update db_magic
03.调整原有的主备库参数修改配置参数-主备库
192.168.1.81/82:
su - dmdba
cd /dm/dmdata/dmdb
A.dm.ini
vi dm.ini
TIMER_INI = 1 #配置有异步归档时,打开定时器,定时同步归档到异步备库
B.dmmal.ini
两个实例参数一样
在配置dmmal.ini的基础上,增加异步备库dmdb3的MAL配置项)
vi dmmal.ini
[MAL_INST3]
MAL_INST_NAME = dmdb3 #实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 192.168.1.83 #MAL系统监听TCP连接的IP地址
MAL_PORT = 35239 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.1.83 #实例的对外服务IP地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_INST_DW_PORT = 35237 #实例监听守护进程TCP连接的端口
MAL_DW_PORT = 35238 #实例对应的守护进程监听TCP连接的端口
C.dmarch.ini
(在配置dmarch.ini的基础上,增加异步归档的配置项)
vi dmarch.ini
把以下部分添加到dmarch.ini文件的中间
[ARCHIVE_ASYNC]
ARCH_TYPE = ASYNC #异步归档类型
ARCH_DEST = dmdb3 #异步归档目标实例名
ARCH_TIMER_NAME = RT_TIMER #定时器名称,和dmtimer.ini中的名称一致
D.dmtimer.ini
dmtimer.ini(配置 dmtimer.ini,用于定时触发实例发送归档日志到异步备库)
异步归档的最小触发间隔是1分钟一次
定时器调度类型:
1:执行一次
2:按日执行
3:按周执行
4:按月执行的第几天
5:按月执行的第一周
6:按月执行的第二周
7:按月执行的第三周
8:按月执行的第四周
9:按月执行的最后一周
下面示例中定时器配置为每天分钟触发主库发送归档日志到异步备库,可以根据实际情况再做调整
vi dmtimer.ini
[RT_TIMER] #和dmarch.ini中的ARCH_TIMER_NAME一致
TYPE = 2 #2按日执行
FREQ_MONTH_WEEK_INTERVAL = 1 #间隔月或周数
FREQ_SUB_INTERVAL = 0 #间隔天数
FREQ_MINUTE_INTERVAL = 3 #间隔分钟数。实验时写成2测试
START_TIME = 00:00:00 #开始时间
END_TIME = 00:00:00 #结束时间
DURING_START_DATE = 2021-12-7 21:00:00 #开始时间点,从建库时开始
DURING_END_DATE = 9999-12-31 23:59:59 #结束时间点
NO_END_DATE_FLAG = 1 #是否结束标记
DESCRIBE = RT_TIMER #定时器描述
IS_VALID = 1 #0:表示关闭定时器,1:表示启用定时器
修改参数-监视主机
修改原监视主机上的dmmonitor.ini(在主备集群监视器的配置基础上,需要增加异步备库守护进程的"ip:port"信息)
192.168.1.84:
su - dmdba
vi /dm/dmdbms/dmdb/data/dmmonitor.ini
MON_DW_IP = 192.168.1.83:35238
04.启动原主备库至mount状态先关闭监视器
192.168.1.84:
ps -ef|grep dmmonitor
kill -9 xxx
以mount方式将主备库重新启动,并启动守护进程(bin目录下)
192.168.1.81/82:
停止服务:
DmWatcherServicedmdb stop
DmServicedmdb stop
ps -ef|grep dmwatcher
ps -ef|grep dmserver
设置mount状态:
nohup dmserver /dm/dmdata/dmdb/dm.ini mount &
启动守护进程:
DmWatcherServicedmdb start
05.异步备库配置192.168.1.83:
su - dmdba
cd /dm/dmdata/dmdb
A.dm.ini
vi dm.ini
INSTANCE_NAME = dmdb3 #异步备库实例
PORT_NUM = 5236 #数据库实例监听端口
DW_PORT = 35237
#守护环境下,监听守护进程连接端口,为上面规划表中的MAL_INST_DW_PORT值
DW_ERROR_TIME = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态
ENABLE_OFFLINE_TS = 2 #不允许备库OFFLINE表空间
MAL_INI = 1 #打开MAL系统
ARCH_INI = 1 #打开归档配置
HA_INST_CHECK_FLAG = 1 #检测是否多个实例进程同时启动
RLOG_SEND_APPLY_MON = 64 #统计最近64次的日志发送信息
B.dmmal.ini
几个实例参数一样
vi dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定MAL链路断开的时间
[MAL_INST1]
MAL_INST_NAME = dmdb1 #实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 192.168.1.81 #MAL系统监听TCP连接的IP地址
MAL_PORT = 15239 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.1.81 #实例的对外服务IP地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_INST_DW_PORT = 15237 #实例监听守护进程TCP连接的端口
MAL_DW_PORT = 15238 #实例对应的守护进程监听TCP连接的端口
[MAL_INST2]
MAL_INST_NAME = dmdb2 #实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 192.168.1.82 #MAL系统监听TCP连接的IP地址
MAL_PORT = 25239 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.1.82 #实例的对外服务IP地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_INST_DW_PORT = 25237 #实例监听守护进程 TCP 连接的端口
MAL_DW_PORT = 25238 #实例对应的守护进程监听 TCP 连接的端口
[MAL_INST3]
MAL_INST_NAME = dmdb3 #实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 192.168.1.83 #MAL系统监听TCP连接的IP地址
MAL_PORT = 35239 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.1.83 #实例的对外服务IP地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_INST_DW_PORT = 35237 #实例监听守护进程TCP连接的端口
MAL_DW_PORT = 35238 #实例对应的守护进程监听TCP连接的端口
C.dmarch.ini
本地守护类型的备库只需要配置本地归档
vi dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/dmarch/dmdb #本地归档文件存放路径
ARCH_FILE_SIZE = 256 #单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位Mb,0表示无限制,范围1024~4294967294M
D.dmwatcher.ini
异步备库不具备故障自动切换等功能,DW_MODE配置并不起作用,修改dmwatcher.ini配置守护进程,配置为本地守护类型,异步备库不具备故障自动切换等功能,DW_MODE配置并不起作用,此处配置为MANUAL即可,另外异步备库不需要配置dmwatcher.ctl控制文件。
vi dmwatcher.ini
[GRP1]
DW_TYPE = LOCAL #本地类型
DW_MODE = MANUAL #手工切换模式
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一OGUID值
INST_INI = /dm/dmdata/dmdb/dm.ini #dm.ini配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/dmdbms/dmdb/bin/dmserver #命令行方式启动
06.以mount方式启动异步备库进行配置192.168.1.83:
注册服务
root:
cd /dm/dmdbms/dmdb/script/root/
./dm_service_installer.sh -t dmserver -dm_ini /dm/dmdata/dmdb/dm.ini -p dmdb
./dm_service_installer.sh -t dmwatcher -watcher_ini
/dm/dmdata/dmdb/dmwatcher.ini -p dmdb
su - dmdba
cd /dm/dmdbms/dmdb/bin
nohup dmserver /dm/dmdata/dmdb/dm.ini mount &
disql SYSDBA/Gz_dmdba2021@192.168.1.83:5236
select status$ from v$database;
SP_SET_PARA_VALUE(1,‘ALTER_MODE_STATUS’,1);
sp_set_oguid(453331);
alter database standby;
SP_SET_PARA_VALUE(1,‘ALTER_MODE_STATUS’,0);
exit;
修改参数
call SF_SET_SYSTEM_PARA_VALUE (‘MAX_OS_MEMORY’,95,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘MAX_SESSIONS’,1000,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘MAX_SESSION_STATEMENT’,5000,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘BUFFER’,1024,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘MAX_BUFFER’,1024,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘BUFFER_POOLS’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘RECYCLE’,512,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘RECYCLE_POOLS’,1,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘HJ_BUF_GLOBAL_SIZE’,500,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘HJ_BUF_SIZE’,300,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘DICT_BUF_SIZE’,50,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘TEMP_SIZE’,200,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘VM_POOL_SIZE’,256,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘SESS_POOL_SIZE’,256,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘CACHE_POOL_SIZE’,200,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘WORKER_THREADS’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘TASK_THREADS’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘USE_PLN_POOL’,1,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘OLAP_FLAG’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘OPTIMIZER_MODE’,1,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘VIEW_PULLUP_FLAG’,1,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘COMPATIBLE_MODE’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘ENABLE_MONITOR’,0,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘SVR_LOG’,0,1,2);
启动数据库服务:
kill -9 xxx
DmServicedmdb start
启动守护进程:
su - dmdba
cd /dm/dmdbms/dmdb/bin
#dmwatcher /dm/dmdata/dmdb/dmwatcher.ini
或者:
DmWatcherServicedmdb start
07.查看相关视图信息:查看守护进程:
select * from v$dmwatcher;
查看MAL:
select * from v$mal_link_status;
#查看定时器:
select * from V$DM_TIMER_INI;
查看归档:
select * from v$arch_status;
REALTIME实时到dmdb2
ASYNC异步到dmdb3
LOCAL本地归档
08.启动监视器192.168.1.84:
dmmonitor /dm/dmdbms/dmdb/data/dmmonitor.ini
09.数据同步测试在主库上插入数据:
[dmdba@dm81 ~]$ disql ldy/ldy123456@192.168.1.81:5236
insert into ldy.table_test01 values(13,‘测试1’,‘2021-06-09’);
insert into ldy.table_test01 values(14,‘测试2’,‘2021-06-10’);
commit;
select * from table_test01;
#conn SYSDBA/Gz_dmdba2021@192.168.1.81:5236;
#alter system switch logfile;
然后检查两个备库:
[dmdba@dm82 dmdb]$ disql SYSDBA/Gz_dmdba2021@192.168.1.82:5236
select * from ldy.table_test01;
数据同步成功。
[dmdba@dm83 dmdb]$ disql SYSDBA/Gz_dmdba2021@192.168.1.83:5236
select * from ldy.table_test01;
数据同步成功。
手工切换,检查第二台的数据是否同步到第1台和第3台
choose switchover grp1
只能切至第2台,因为第3台是不做切换的
switchover grp1.dmDB2
login
switchover grp1.dmDB2
[dmdba@dm82 ~]$ disql ldy/ldy123456@192.168.1.82:5236
insert into ldy.table_test01 values(15,‘测试3’,‘2021-06-11’);
insert into ldy.table_test01 values(16,‘测试4’,‘2021-06-12’);
commit;
select * from ldy.table_test01;
检查:
[dmdba@dm81 ~]$ disql ldy/ldy123456@192.168.1.81:5236
select * from ldy.table_test01;
[dmdba@dm83 ~]$ disql ldy/ldy123456@192.168.1.83:5236
select * from ldy.table_test01;
数据同步。
切换回第一台,我们继续做下面的实验
choose switchover grp1
switchover grp1.DMDB1
login
switchover grp1.DMDB1
10.主备集群启停流程(同上)
查看服务进程
ps -ef|grep dmserver
ps -ef|grep dmwatcher
ps -ef|grep dmmonitor
select name,status$,ROLE$ from v$database;
1)启动集群
先启动数据库实例服务
192.168.1.81:
su - dmdba
DmServicedmdb start
192.168.1.82/83:
su - dmdba
DmServicedmdb start
再启动数据库守护服务
192.168.1.81:
su - dmdba
DmWatcherServicedmdb start
192.168.1.82/83:
su - dmdba
DmWatcherServicedmdb start
最后启动监视器查看集群状态
192.168.1.84:
su - dmdba
dmmonitor /dm/dmdbms/dmdb/data/dmmonitor.ini
如果正常,则放后台操作
DmMonitorServicedmdb start
2)停止集群
先确保监视器服务处于停止状态
192.168.1.84:
su - dmdba
dmmonitor /dm/dmdbms/dmdb/data/dmmonitor.ini
exit
或者:
DmMonitorServicedmdb stop
再停止数据库守护服务
192.168.1.81:
su - dmdba
DmWatcherServicedmdb stop
192.168.1.82/83:
su - dmdba
DmWatcherServicedmdb stop
最后停止数据库实例
192.168.1.81:
su - dmdba
DmServicedmdb stop
192.168.1.82/83:
su - dmdba
DmServicedmdb stop
6 DM主备集群删除节点(异步-4主机)1主+1实时+1异步+1监控 改成 1主+1实时+1监控
192.168.1.84:
修改监控器配置,
vi /dm/dmdbms/dmdb/data/dmmonitor.ini
第三个参数注释
#MON_DW_IP = 192.168.1.83:35238
停止异步节点服务
192.168.1.83:
su - dmdba
DmWatcherServicedmdb stop
DmServicedmdb stop
关机:shutdown -h 0/poweroff
修改主备库参数文件:
192.168.1.81/82:
把定时器设置为0
su - dmdba
cd /dm/dmdata/dmdb
vi dm.ini
TIMER_INI = 0 #dmtimer.ini
修改归档配置dmarch.ini
vi dmarch.ini
删除以下内容:
[ARCHIVE_ASYNC]
ARCH_TYPE = ASYNC #异步归档类型
ARCH_DEST = dmdb3 #异步归档目标实例名
ARCH_TIMER_NAME = RT_TIMER #定时器名称,和dmtimer.ini中的名称一致
修改dmmal.ini
把下面部分删掉:
vi dmmal.ini
[MAL_INST3]
MAL_INST_NAME = dmdb3 #实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 192.168.1.83 #MAL 系统监听TCP连接的IP地址
MAL_PORT = 35239 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.1.83 #实例的对外服务IP地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_INST_DW_PORT = 35237 #实例监听守护进程TCP连接的端口
MAL_DW_PORT = 35238 #实例对应的守护进程监听TCP连接的端口
重启两台服务器,并重启监视器
192.168.1.81/82
su - dmdba
DmWatcherServicedmdb stop
DmServicedmdb stop
或者
ps -ef|grep dmserver
kill -9 xxx
DmServicedmdb start
DmWatcherServicedmdb start
192.168.1.84:
su - dmdba
dmmonitor /dm/dmdbms/dmdb/data/dmmonitor.ini
show
7 DM主备读写分离集群搭建(3主机)因为业务量越来越大,将当前部署改为读写分离集群
方案:
通过dmmonitor将达梦守护集群切换为读写分离集群。如果单独配置读写分离其实就是归档那里有区别,其他都没有区别。
192.168.1.81 主
192.168.1.82 备
192.168.1.84 监控
其他参数配置同第2部分一样
01.停止dm集群
02.通过dmmonitor操作
su - dmdba
dmmonitor /dm/dmdbms/dmdb/data/dmmonitor.ini
show global info
停止当前集群
stop group GRP1
如果提示要登录,请输入login
用户名:sysdba
密码:Gz_dmdba2021
退出监视器
exit
在主库和备库中停止dmwatcher
192.168.1.81/82:
DmWatcherServicedmdb stop
03.修改归档参数(主库+备库)
192.168.1.81:
vi /dm/dmdata/dmdb/dmarch.ini
# 仅修改如下参数项
修改之前:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = dmdb2 #实时归档目标实例名
修改之后:
[ARCHIVE_TIMELY]
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = dmdb2 #实时归档目标实例名
192.168.1.82:
vi /dm/dmdata/dmdb/dmarch.ini
# 仅修改如下参数项
修改之前:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = dmdb1 #实时归档目标实例名
修改之后:
[ARCHIVE_TIMELY]
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = dmdb1 #实时归档目标实例名
04.启动集群
修改参数完成后需要将主备库的服务打开
192.168.1.81/82:
DmServicedmdb start
DmWatcherServicedmdb start
通过dmmonitor检查
192.168.1.84:
dmmonitor /dm/dmdbms/dmdb/data/dmmonitor.ini
show global info
05.读写分离测试
A.数据同步测试
[dmdba@dm81 ~]$ disql ldy/ldy123456@192.168.1.81:5236
insert into table_test01 values(17,‘雷哥’,‘2021-06-13’);
insert into table_test01 values(18,‘孙悟空’,‘2021-06-14’);
commit;
select * from table_test01;
检查:
[dmdba@dm82 ~]$ disql ldy/ldy123456@192.168.1.82:5236
select * from table_test01;
B.读分离功能测试
192.168.1.82,登录备库:
disql ldy/ldy123456@192.168.1.82:5236
insert into table_test01 values(19,‘大哥’,‘2021-06-14’); --报错,因为备库只读
这种读写分离需要通过接口来实现,比如JDBC程序
需要客户端配置:
在JDBC连接串中增加了两个连接属性:
rwSeparate是否使用读写分离系统,默认0;取值(0不使用,1使用)。
rwPercent分发到主库的事务占主备库总事务的百分比,有效值0~100,默认值25。
我们来使用dm dm_svc.conf配置一个服务名进行测试
192.168.1.84:
vi /etc/dm_svc.conf
TIME_ZONE=(480)
LANGUAGE=(cn)
dmdb=(192.168.1.81:5236,192.168.1.82:5326)
登录:
su - dmdba
disql ldy/ldy123456@dmdb
[dmdba@dm84 ~]$ disql ldy/ldy123456@dmdb
服务器[192.168.1.81:5236]:处于主库打开状态,这里只会一直连接主库
vi /etc/dm_svc.conf
TIME_ZONE=(480)
LANGUAGE=(cn)
RW_SEPARATE = 1 #打开读写分离系统
dmdb=(192.168.1.81:5236,192.168.1.82:5326)
库和备库中停止dmwatcher
192.168.1.81/82:
DmWatcherServicedmdb stop
03.修改归档参数(主库+备库)
192.168.1.81:
vi /dm/dmdata/dmdb/dmarch.ini
# 仅修改如下参数项
修改之前:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = dmdb2 #实时归档目标实例名
修改之后:
[ARCHIVE_TIMELY]
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = dmdb2 #实时归档目标实例名
192.168.1.82:
vi /dm/dmdata/dmdb/dmarch.ini
# 仅修改如下参数项
修改之前:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = dmdb1 #实时归档目标实例名
修改之后:
[ARCHIVE_TIMELY]
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = dmdb1 #实时归档目标实例名
04.启动集群
修改参数完成后需要将主备库的服务打开
192.168.1.81/82:
DmServicedmdb start
DmWatcherServicedmdb start
通过dmmonitor检查
192.168.1.84:
dmmonitor /dm/dmdbms/dmdb/data/dmmonitor.ini
show global info
05.读写分离测试
A.数据同步测试
[dmdba@dm81 ~]$ disql ldy/ldy123456@192.168.1.81:5236
insert into table_test01 values(17,‘雷哥’,‘2021-06-13’);
insert into table_test01 values(18,‘孙悟空’,‘2021-06-14’);
commit;
select * from table_test01;
检查:
[dmdba@dm82 ~]$ disql ldy/ldy123456@192.168.1.82:5236
select * from table_test01;
B.读分离功能测试
192.168.1.82,登录备库:
disql ldy/ldy123456@192.168.1.82:5236
insert into table_test01 values(19,‘大哥’,‘2021-06-14’); --报错,因为备库只读
这种读写分离需要通过接口来实现,比如JDBC程序
需要客户端配置:
在JDBC连接串中增加了两个连接属性:
rwSeparate是否使用读写分离系统,默认0;取值(0不使用,1使用)。
rwPercent分发到主库的事务占主备库总事务的百分比,有效值0~100,默认值25。
我们来使用dm dm_svc.conf配置一个服务名进行测试
192.168.1.84:
vi /etc/dm_svc.conf
TIME_ZONE=(480)
LANGUAGE=(cn)
dmdb=(192.168.1.81:5236,192.168.1.82:5326)
登录:
su - dmdba
disql ldy/ldy123456@dmdb
[dmdba@dm84 ~]$ disql ldy/ldy123456@dmdb
服务器[192.168.1.81:5236]:处于主库打开状态,这里只会一直连接主库
vi /etc/dm_svc.conf
TIME_ZONE=(480)
LANGUAGE=(cn)
RW_SEPARATE = 1 #打开读写分离系统
dmdb=(192.168.1.81:5236,192.168.1.82:5326)
社区地址:https://eco.dameng.com



