栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

DM主备集群、新增删除节点、读写分离搭建

DM主备集群、新增删除节点、读写分离搭建

1 DM主备集群概念(DMDatawatch+DMRWC)

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

3 DM主备实时集群搭建(3主机)

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.配置监听器服务器dmmonitor

192.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

01.异步备库环境安装

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

02.备份主库并恢复至异步备库

这里是联机备份,因为之前的库在使用中了:

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程序

需要客户端配置:

dm.jdbc.driver.DmDriver

jdbc:dm://192.168.1.81:15236?rwSeparate=1&rwPercent=25

在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程序

需要客户端配置:

dm.jdbc.driver.DmDriver

jdbc:dm://192.168.1.81:15236?rwSeparate=1&rwPercent=25

在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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/682918.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号