0
点赞
收藏
分享

微信扫一扫

DM数据库-数据守护和读写分离集群-安装部署

waaagh 2024-04-24 阅读 14

安装前准备

1.1硬件环境建议

数据守护集群安装部署前需要额外注意网络环境和磁盘 IO 配置情况,其他环境配置项建议参考单机版安装前准备工作。

此处为虚拟机测试环境,准备三台机器DW_P、DW_S、DW_M,DW_P和DW_S用来部署主备库,DW_M用来部署确认监视器。其中DW_P和DW_S配置两块网卡,一块接入内部网络交换模块,一块接入到外部交换机,DW_M接入内部网络。

三台机器都事先安装了DM,安装路径为/opt/dmdba,执行程序保存在/opt/dmdba/bin目录中,数据存放路径为/dmdata/data

各主备库的实例名建议采用“组名_守护环境_序号”的方式命名,方便按组区分不同实例,注意总长度不能超过16。本实例中组名为GRP1,配置为实时主备,主库命名为GRP1_RT_01”,备库命名为”GRP1_RT_02”。

1.1.1网络环境

心跳网络对 mal 通讯系统的影响非常大,如果网络丢包或者延迟较大,则会严重影响 mal 系统的处理能力,从而导致整个集群出现响应服务请求慢的情况。为确保集群的稳定性,网络配置如下:

1、使用千兆或千兆以上网络;

2、集群间的心跳网络需同步数据,建议尽量使用两个交换机构建内网,以实现冗余和负载均衡;

3、建议服务器采用两个网卡绑定为一个逻辑网卡来使用(比如 bond 方式)。此处虚拟机安装环境,只需要配置两块网卡即可。

1.1.2磁盘IO

磁盘 IO 的读写速率会极大影响系统性能和用户体验。因此在进行集群安装部署前,应测试 IO 性能能否满足系统功能和性能需求。

IO 性能指标与系统的并发数、热点数据等因素往往密切相关。在数据守护集群,尤其生产系统中,推荐使用高性能 SSD 磁盘,以获得更佳性能,保证集群数据的实时同步。

因采用虚拟机测试环境,不考虑此要求。

1.2集群规划


DW_P

DW_S

业务 IP

192.168.0.101

192.168.0.102

心跳 IP

192.168.100.101

192.168.100.102

实例名

GRP1_RT_01

GRP1_RT_02

实例端口

5236

5236

MAL 端口

5336

5336

MAL 守护进程端口

5436

5436

守护进程端口

5536

5536

OGUID

45331

45331

守护组

GRP1

GRP1

安装目录

/opt/dmdba

/opt/dmdba

实例目录

/dmdata/data/

/dmdata/data/

归档上限

51200

51200


确认监视器(DW_M)的IP为192.168.100.103

说明:读写分离集群与数据守护集群架构基本类似,但在搭建过程中,归档类型和 dm_svc.conf 配置文件等存在一定区别。此外,搭建过程中具体规划及部署方式以现场环境为准。

1.2集群架构

搭建的读写分离集群架构如下图:

DM数据库-数据守护和读写分离集群-安装部署_守护进程

1.3切换模式说明


故障切换方式

dmarch

dmwatcher

dmmonitor

监视器要求

故障手动切换

ARCH_WAIT_APP
LY=0

DW_MODE=
MANUAL

MON_DW_CON
FIRM=0

1、手动切换:集群各节点的 bin 目录中,存放非确认监视器配置文件。

故障自动切换

ARCH_WAIT_APP
LY= 1

DW_MODE=
AUTO

MON_DW_CON
FIRM=1

1、手动切换:集群各节点的 bin 目录中,存放非确认监视器配置文件。
2、自动切换:在确认监视器上(非集群节点),存放确认监视器配置文件,并注册后台自启服务。


1、ARCH_WAIT_APPLY 参数,设置为 0:高性能模式;设置为 1:事务一致模式。

2、故障手动切换情境下 ARCH_WAIT_APPLY 只能为 0。故障自动切换情境下 ARCH_WAIT_APPLY 可以为 0,也可以为 1。

3、ARCH_WAIT_APPLY 参数设置的判断依据为业务是否要查询备机最新数据。如果需要,则配置为 1(较大性能衰减);如果不需要,则配置为 0。


集群搭建

2.1配置DW_P主库

2.1.1初始化实例并备份数据

1、初始化实例

[root@DW_P ~]# su - dmdba

[dmdba@DW_P ~]$ cd /opt/dmdba/bin

[dmdba@DW_P bin]$ dminit PATH=/dmdata/data/ INSTANCE_NAME=GRP1_RT_01 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048

2、启动服务

[dmdba@DW_P bin]$ dmserver /dmdata/data/DAMENG/dm.ini

3、开启归档

[dmdba@DW_P ~]$ disql SYSDBA/SYSDBA:5236

服务器[LOCALHOST:5236]:处于普通打开状态

登录使用时间

disql V8

SQL> alter database mount;

操作已执行

已用时间: 13.256(毫秒). 执行号:0.

SQL> alter database archivelog;

操作已执行

已用时间: 22.782(毫秒). 执行号:0.

SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/dmdata/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';

操作已执行

已用时间: 5.780(毫秒). 执行号:0.

SQL> ALTER DATABASE OPEN;

操作已执行

已用时间: 106.828(毫秒). 执行号:0.

4、备份数据
SQL> BACKUP DATABASE BACKUPSET '/dmdata/dmbak/BACKUP_FILE';
操作已执行
已用时间: 00:00:07.296. 执行号:62601.

5、修改dm.ini
SQL> SP_SET_PARA_VALUE (2,'PORT_NUM',5236);
DMSQL 过程已成功完成
已用时间: 84.463(毫秒). 执行号:62602.
SQL> SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);
DMSQL 过程已成功完成
已用时间: 12.220(毫秒). 执行号:62603.
SQL> SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);
DMSQL 过程已成功完成
已用时间: 8.783(毫秒). 执行号:62604.
SQL> SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);
DMSQL 过程已成功完成
已用时间: 6.795(毫秒). 执行号:62605.
SQL> SP_SET_PARA_VALUE (2,'MAL_INI',1);
DMSQL 过程已成功完成
已用时间: 10.132(毫秒). 执行号:62606.
SQL> SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);
DMSQL 过程已成功完成
已用时间: 7.111(毫秒). 执行号:62607.

6、关闭前台实例服务

输入exit即可


2.1.2修改dmarch.ini

[dmdba@DW_P ~]$ vi /dmdata/data/DAMENG/dmarch.ini

ARCH_WAIT_APPLY = 1

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL

ARCH_DEST = /dmdata/arch

ARCH_FILE_SIZE = 2048

ARCH_SPACE_LIMIT = 51200

ARCH_FLUSH_BUF_SIZE = 0

ARCH_HANG_FLAG = 1

[ARCHIVE_TIMELY1]

ARCH_TYPE =REALTIME #实时归档类型

ARCH_DEST =GRP1_RT_02 #即时归档目标实例名


2.1.3创建dmmal.ini

[dmdba@DW_P DAMENG]$ vi /dmdata/data/DAMENG/dmmal.ini

MAL_CHECK_INTERVAL = 15 #MAL 链路检测时间间隔

MAL_CONN_FAIL_INTERVAL = 15 #判定 MAL 链路断开的时间

[MAL_INST1]

MAL_INST_NAME = GRP1_RT_01 #实例名,和 dm.ini 的 INSTANCE_NAME 一致

MAL_HOST = 192.168.100.101 #MAL 系统监听 TCP 连接的 IP 地址

MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口

MAL_INST_HOST = 192.168.0.101 #实例的对外服务 IP 地址

MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致

MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口

MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口

[MAL_INST2]

MAL_INST_NAME = GRP1_RT_02

MAL_HOST = 192.168.100.102

MAL_PORT = 5336

MAL_INST_HOST = 192.168.0.102

MAL_INST_PORT = 5236

MAL_DW_PORT = 5436

MAL_INST_DW_PORT = 5536


2.1.4创建dmwatcher.ini

[dmdba@DW_P DAMENG]$ vi /dmdata/data/DAMENG/dmwatcher.ini

[GRP1]

DW_TYPE = GLOBAL #全局守护类型

DW_MODE = AUTO #MANUAL:故障手切 AUTO:故障自切

DW_ERROR_TIME = 20 #远程守护进程故障认定时间

INST_ERROR_TIME = 20 #本地实例故障认定时间

INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间

INST_OGUID = 45331 #守护系统唯一 OGUID 值

INST_INI = /dmdata/data/DAMENG/dm.ini #dm.ini 文件路径

INST_AUTO_RESTART = 1 #打开实例的自动启动功能

INST_STARTUP_CMD = /opt/dmdba/bin/dmserver #命令行方式启动

RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭

RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭


2.1.5拷贝备份文件

[dmdba@~]$scp -r /dmdata/dmbak/BACKUP_FILE dmdba@192.168.100.102:/dmdata/dmbak


2.1.6注册服务

[root@~]# /opt/dmdba/script/root/dm_service_installer.sh -t dmserver -p GRP1_RT_01 -dm_ini /dmdata/data/DAMENG/dm.ini -m mount(注意是mount状态)

注意:一定要以 Mount 方式启动数据库实例,否则系统启动时会重构回滚表空间,生

成 Redo 日志;并且,启动后应用可能连接到数据库实例进行操作,破坏主备

库的数据一致性。数据守护配置结束后,守护进程会自动 Open 数据库。

[root@~]# /opt/dmdba/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdata/data/DAMENG/dmwatcher.ini

若要删除自启,可利用如下方式:

[root@~]# /opt/dmdba/script/root/dm_service_uninstaller.sh -n DmServiceGRP1_RT_01

[root@~]# /opt/dmdba/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher


2.2配置DW_S备库

2.2.1初始化实例

[root@DW_S ~]# su - dmdba

[dmdba@DW_S ~]$ cd /opt/dmdba/bin

[dmdba@DW_S bin]$ dminit PATH=/dmdata/data/ INSTANCE_NAME=GRP1_RT_02 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048


2.2.2恢复数据

[dmdba@DW_S~]$/opt/dmdba/bin/dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/BACKUP_FILE'"

[dmdba@DW_S~]$/opt/dmdba/bin/dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/BACKUP_FILE'"

[dmdba@DW_S~]$/opt/dmdba/bin/dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' UPDATE DB_MAGIC"


2.2.3替换dmarch.ini

[dmdba@DW_S ~]$ vi /dmdata/data/DAMENG/dmarch.ini

ARCH_WAIT_APPLY = 1

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL

ARCH_DEST = /dmdata/arch

ARCH_FILE_SIZE = 1024

ARCH_SPACE_LIMIT = 51200

ARCH_FLUSH_BUF_SIZE = 0

ARCH_HANG_FLAG = 1

[ARCHIVE_TIMELY1]

ARCH_TYPE =REALTIME #实时归档类型

ARCH_DEST =GRP1_RT_02 #即时归档目标实例名


2.2.4配置dm.ini、dmmal.ini和dmwatcher.ini

  1. 配置dm.ini在DW_S机器上配置备库的实例名为GRP1_RT_02,dm.ini参数修改如下:

    [dmdba@DW_S ~]$ vi /dmdata/data/DAMENG/dm.ini
    INSTANCE_NAME = GRP1_RT_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 次的日志重演信息
  2. 配置dmmal.ini和dmwatcher.ini

DW_S机器里dmmal.ini、dmwatcher.ini与机器DW_P的dmmal.ini、dmwatcher.ini相同,参照 DW_P机器 dmmal.ini、dmwatcher.ini 文件进行配置。


2.2.5注册服务

[root@DW_S ~]# /opt/dmdba/script/root/dm_service_installer.sh -t dmserver -p GRP1_RT_02 -dm_ini /dmdata/data/DAMENG/dm.ini -m mount

[root@DW_S ~]# /opt/dmdba/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdata/data/DAMENG/dmwatcher.ini

若要删除自启,可利用如下方式:

[root@~]# /opt/dmdba/script/root/dm_service_uninstaller.sh -n DmServiceGRP1_RT_02

[root@~]# /opt/dmdba/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher


2.3配置监视器

1、手动切换:集群各节点的 bin 目录中,存放非确认监视器配置文件。

2、自动切换:在确认监视器上(非集群节点),存放确认监视器配置文件,并注册后台自启服务。


2.3.1创建dmmonitor.ini

[dmdba@~]$ vi /opt/dmdba/bin/dmmonitor.ini

MON_DW_CONFIRM = 1 #0:非确认(故障手切) 1:确认(故障自切)

MON_LOG_PATH = /dmdata/log #监视器日志文件存放路径

MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件

MON_LOG_FILE_SIZE = 32 #单个日志大小,单位 MB

MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间

[GRP1]

MON_INST_OGUID = 45331 #组 GRP1 的唯一 OGUID 值

#以下配置为监视器到组 GRP1 的守护进程的连接信息,以IP:PORT的形式配置

#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT

MON_DW_IP = 192.168.100.101:5436

MON_DW_IP = 192.168.100.102:5436

在配置监视器时,一般配置好确认监视器后,建议再配置一个非确认监视器的配置文件,在主备发生切换时,可以通过前台的方式启动非确认监视器进行手动切换。非确认监视器是通过将监视器配置文件中 MON_DW_CONFIRM 参数值修改为 0 来实现,示例如下:

[dmdba@~]$ vi /opt/dmdba/bin/dmmonitor_manual.ini

MON_DW_CONFIRM = 0 #0:非确认(故障手切) 1:确认(故障自切)

MON_LOG_PATH = /dmdata/log #监视器日志文件存放路径

MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件

MON_LOG_FILE_SIZE = 32 #单个日志大小,单位 MB

MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间

[GRP1]

MON_INST_OGUID = 45331 #组 GRP1 的唯一 OGUID 值

#以下配置为监视器到组 GRP1 的守护进程的连接信息,以IP:PORT的形式配置

#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT

MON_DW_IP = 192.168.100.101:5436

MON_DW_IP = 192.168.100.102:5436


2.3.2注册服务(选做)

[root@DW_M ~]# /opt/dmdba/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /opt/dmdba/bin/dmmonitor.ini

若要删除自启,可利用如下方式:

[root@~]# /opt/dmdba/script/root/dm_service_uninstaller.sh -n DmMonitorServiceMonitor


2.3.3监视器使用

命令

含义

list

查看守护进程的配置信息

show global info

查看所有实例组的信息

tip

查看系统当前运行状态

login

登录监视器

logout

退出登录

choose switchover GRP1

主机正常:查看可切换为主机的实例列表

switchover GRP1.实例名

主机正常:使用指定组的指定实例,切换为主机

choose takeover GRP1

主机故障:查看可切换为主机的实例列表

takeover GRP1.实例名

主机故障:使用指定组的指定实例,切换为主机

choose takeover force GRP1

强制切换:查看可切换为主机的实例列表

takeover force GRP1.实例名

强制切换:使用指定组的指定实例,切换为主机

对于在生产环境中配置有确认监视器时,主备只是发生了切换的情况下,再想将主备切换回去时,只需要启动非确认监视器执行切换命令即可。


2.4启动服务及查看信息

2.4.1启动数据库并修改参数

##DW_P机器

[dmdba@~]$ /opt/dmdba/bin/DmServiceGRP1_RT_01 start

[dmdba@~]$ disql SYSDBA/SYSDBA@192.168.0.101:5236

SQL> SP_SET_OGUID(45331);

SQL> ALTER DATABASE PRIMARY;

##DW_S机器

[dmdba@~]$ /opt/dmdba/bin/DmServiceGRP1_RT_02 start

[dmdba@~]$ disql SYSDBA/SYSDBA@192.168.0.102:5236

SQL> SP_SET_OGUID(45331);

SQL> ALTER DATABASE STANDBY;


2.4.2启动守护进程

##DW_P/DW_S机器

[dmdba@~]$ /opt/dmdba/bin/DmWatcherServiceWatcher start


2.4.3启动监视器

##DW_M 机器

##后台启动

[dmdba@~]$ /opt/dmdba/bin/DmMonitorServiceMonitor start

##前台启动

[dmdba@~]$ /opt/dmdba/bin/dmmonitor /opt/dmdba/bin/dmmonitor.ini


2.5启停集群

##启动

##DW_P/DW_S机器

[dmdba@~]$ /opt/dmdba/bin/DmWatcherServiceWatcher start

##停止

##DW_P/DW_S机器

[dmdba@~]$ /opt/dmdba/bin/DmWatcherServiceWatcher stop

##DW_P机器

[dmdba@~]$ /opt/dmdba/bin/DmServiceGRP1_RT_01 stop

##DW_S机器

[dmdba@~]$ /opt/dmdba/bin/DmServiceGRP1_RT_02 stop

建议:

生产环境中建议应用使用服务名的方式进行连接,在配置文件 dm_svc.conf 中配置只连主库,这样连接的好处在于当主备发生切换后应用会自动连接到当前的主库,不会影响应用的正常使用。dm_svc.conf 详细介绍参考第三章节 dm_svc.conf 配置。


dm_svc.conf配置

3.1简介

dm_svc.conf 是使用达梦数据库时非常重要的配置文件,它包含了达梦各接口和客户端工具所需要配置的一些参数。通过它可以实现达梦各种集群的读写分离和均衡负载,且必须和接口/客户端工具位于同一台机器上才能生效。

初始 dm_svc.conf 文件由达梦安装时自动生成。不同的平台生成目录有所不同,注意相应访问用户需要对该文件有读取权限。

32 位的 DM 安装在 Win32 操作平台下,此文件位于 %SystemRoot%\system32 目录;

64 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\system32 目录;

32 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\SysWOW64 目录;

在 Linux 平台下,此文件位于 /etc 目录。

但在某些情况下,所使用的用户没有读取和修改 /etc 目录下文件的权限,这时就需要将 dm_svc.conf 文件放到有权限的目录下,并修改 url 连接串的内容。以 Linux 平台,文件放在 /home/dmdba 目录下为例:

  1. 在 /home/dmdba 目录下,编辑 dm_svc.conf 文件:
    TIME_ZONE=(480)
    LANGUAGE=(cn)
    dm=(ip:端口)
    [dm]
    KEYWORDS=(需要排除的关键字)
  2. 修改连接串

jdbc:dm://dm?dmsvccnotallow=/home/dmdba/dm_svc.conf

dm_svc.conf 配置文件的内容分为全局配置区和服务配置区。全局配置区在前,可配置所有的配置项,服务配置区在后,以“[服务名]”开头,可配置除了服务名外的所有配置项。服务配置区中的配置优先级高于全局配置区(服务配置区的相同配置项会覆盖全局配置区对应的配置项)。


3.2常用配置项介绍

1、服务名

用于连接数据库的服务名,参数值格式为:

服务名=(IP[:PORT],IP[:PORT],......)。

2、TIME_ZONE

指明客户端的默认时区设置范围为:-779~840M,如 60 对应 +1:00 时区,+480 对于东八区,如果不做配置默认是操作系统的时区。

3、KEYWORDS

该参数可以用于屏蔽数据库关键字,如果数据库关键字在 SQL 语句中以单词的形式存在,无法识别需要加上双引号或者可以通过该参数来屏蔽关键字,建议大小写都写入参数中。

例如:KEYWORDS=(versions,VERSIONS,type,TYPE)

4、LOGIN_MODE

指定优先登录的服务器模式。0:优先连接 PRIMARY 模式的库,NORMAL 模式次之,最后选择 STANTBY 模式;1:只连接主库;2:只连接备库;3:优先连接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 NORMAL 模式;4:优先连接 NORMAL 模式的库,PRIMARY 模式次之,最后选择 STANDBY 模式。

注意

在 2021 年版本之后,此参数的默认值由 0 变更为 4。该参数详细介绍及使用办法请参考《DM 数据守护与读写分离集群》-5.8 章节。手册位于数据库安装路径 /dmdbms/doc 文件夹。

5、SWITCH_TIMES

表示以服务名连接数据库时,若未找到符合条件的库成功建立连接,将尝试遍历服务名中库列表的次数。有效值范围 1~9223372036854775807,默认值为 1,可以设置至少 3 次用来避免由于网卡的波动,造成数据库连接测频繁切换。

6、SWITCH_INTERVAL

表示在服务器之间切换的时间间隔,单位为毫秒,有效值范围 1~9223372036854775807。与参数 SWITCH_TIMES、EP_SELECTOR 配合使用,EP_SELECTOR 设置为 0,等待 SWITCH_INTERVAL 后会切换尝试连接下一个服务器,EP_SELECTOR 设置为 1,等待 SWITCH_INTERVAL 后会继续尝试连接该服务器,直到 SWITCH_TIMES 次再切换下一个服务器。

7、EP_SELECTOR

表示连接数据库时采用何种模型建立连接,0:依次选取列表中的不同节点建立连接,使得所有连接均匀地分布在各个节点上;1:选择列表中最前面的节点建立连接,只有当前节点无法建立连接时才会选择下一个节点进行连接。

8、AUTO_RECONNECT

表示连接发生异常或一些特殊场景下连接处理策略。0:关闭连接,1:当连接发生异常时自动切换到其他库,无论切换成功还是失败都会抛一个 SQLEXCEPTION,用于通知上层应用进行事务执行失败时的相关处理;2 配合 EP_SELECTOR=1 使用,如果服务名列表前面的节点恢复了,将当前连接切换到前面的节点上,可以根据应用的实际要求设定。


3.3常用配置

3.3.1单机配置

配置示例

##以#开头的行表示是注释

##全局配置区

TIME_ZONE=(480)

LANGUAGE=(cn)

DM=(192.168.100.100:5236)

连接示例:

  1. Disql连接:[dmdba@localhost~]$ disql SYSDBA/SYSDBA@DM
  2. 通过管理工具连接

DM数据库-数据守护和读写分离集群-安装部署_SQL_02


3.3.2主备集群配置

  1. 配置示例(将/etc/dm_svc.conf文件move到/home/dmdba目录下)
    ##以#开头的行表示是注释#
    ##全局配置区
    TIME_ZONE=(480)
    LANGUAGE=(cn)
    DMHA=(192.168.100.101:5236,192.168.100.102:5236)
    ##服务配置
    [DMHA]
    SWITCH_TIMES=(3)
    SWITCH_INTERVAL=(100)
    LOGIN_MODE=(1)
  2. jdbc连接串

jdbc:dm://DMHA

实验测试

4.1主备库数据同步测试

4.1.1主库插入数据

  1. 创建表空间
    [dmdba@DW_P ~]$ disql SYSDBA/SYSDBA@192.168.100.101:5236

    SQL> create tablespace TEST datafile '/dmdata/data/DAMENG/TEST.DBF' size 128;
  2. 创建用户及授权
    [dmdba@DW_P ~]$ disql SYSDBA/SYSDBA@192.168.100.101:5236

    SQL> create user TEST identified by TEST123456 default tablespace TEST default index tablespace TEST;

    SQL> grant resource to TEST;
  3. 表的创建及数据插入

## 切换到TEST用户下

SQL> conn TEST/TEST123456:5236

SQL> CREATE TABLE TEST

(

user_id INT NULL,

username VARCHAR(40) NULL,

gender VARCHAR(40) NULL

) TABLESPACE TEST; --指定表空间TS_DMOA

##插入测试数据

insert into TEST(user_id, username, gender)

VALUES(1,'张三','男');

insert into TEST(user_id, username, gender)

VALUES(2,'李四','男');

insert into TEST(user_id, username, gender)

VALUES(3,'阿花','女');

insert into TEST(user_id, username, gender)

VALUES(4,'李梅','女');

commit;

4、查询数据是否已经入库

SQL> select * from test;

行号

---------- ----------- -------- ------

1 1 张三 男

2 2 李四 男

3 3 阿花 女

4 4 李梅 女


4.1.2备库查询数据

[dmdba@DW_S ~]$ disql SYSDBA/SYSDBA@192.168.100.102:5236

服务器[LOCALHOST:5236]:处于备库打开状态

登录使用时间

disql V8

SQL> conn TEST/TEST123456:5236

服务器[LOCALHOST:5236]:处于备库打开状态

登录使用时间

SQL> select * from test;

行号

---------- ----------- -------- ------

1 1 张三 男

2 2 李四 男

3 3 阿花 女

4 4 李梅 女

已用时间: 2.918(毫秒). 执行号:101.

SQL> select count(*) from test;

行号

---------- --------------------

1 4

已用时间: 6.115(毫秒). 执行号:102.

结论:DW_P和DW_S的数据完全一致。


4.2主库模拟软件故障自动切换测试

4.2.1软件故障前

DM数据库-数据守护和读写分离集群-安装部署_IP_03


4.2.2主库模拟故障

##将机器DW_P上的主库软件关闭

##查询DM的进程

[dmdba@DW_P ~]$ ps -ef |grep dm

##将dmserver和dmwatcher进程KILL

[dmdba@DW_P ~]$ kill -9 26972 27053

DM数据库-数据守护和读写分离集群-安装部署_IP_04


4.2.3软件故障后

[dmdba@DW_P bin]$ dmmonitor dmmonitor_manual.ini

DM数据库-数据守护和读写分离集群-安装部署_SQL_05

此处可见,备库已切换为主库。


4.2.4备库切换为主库后能否正确读写数据

##插入一条测试数据,并查询表

[dmdba@DW_S ~]$ disql TEST/TEST123456:5236

服务器[LOCALHOST:5236]:处于主库打开状态

登录使用时间

disql V8

SQL> insert into TEST(user_id, username, gender)

VALUES(5,'老王','男');

SQL> commit;

操作已执行

已用时间: 4.926(毫秒). 执行号:802.

SQL> select count(*) from test;

行号

---------- --------------------

1 5

结论:DW_S机器自动接管后,由STANDBY库升为PRIMARY库,GRP1_RT_02库可读写。


4.3原主库修复后是否自动加入集群

4.3.1原主库DW_P启动

[dmdba@DW_P bin]$ DmServiceGRP1_RT_01 start

Starting DmServiceGRP1_RT_01: [ OK ]

[dmdba@DW_P bin]$ DmWatcherServiceWatcher start

Starting DmWatcherServiceWatcher: [ OK ]

查看主备库状态

DM数据库-数据守护和读写分离集群-安装部署_IP_06

可见原来主库恢复后自动加入集群中。


4.3.2原主库故障修复后,新数据是否同步

##查看DW_P机器上的数据是否同步

[dmdba@DW_P ~]$ disql TEST/TEST123456:5236

服务器[LOCALHOST:5236]:处于备库打开状态

登录使用时间

disql V8

SQL> select count(*) from test;

行号

---------- --------------------

1 5

已用时间: 28.309(毫秒). 执行号:1.

结论:原主库修复后,自动加入集群,数据自动同步过来。

4.4手工切换主备集群

4.4.1切换前主备库状态

DM数据库-数据守护和读写分离集群-安装部署_SQL_07


4.4.2手工switchover切换

DM数据库-数据守护和读写分离集群-安装部署_IP_08

手工切换:执行命令"switchover GRP1.实例名"进行切换。

DM数据库-数据守护和读写分离集群-安装部署_守护进程_09

切换成功,GRP1_RT_01恢复到主库对外提供服务。

4.4.3切换后主备库状态


DM数据库-数据守护和读写分离集群-安装部署_IP_10

结论:故障手工切换后,原主库DW_P从STANDBY提升为PRIMARY。


说明

5.1读写分离集群和数据守护集群dmarch.ini的配置区别

  1. 读写分离集群

[ARCHIVE_TIMELY1]
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = GRP1_RT_02 #即时归档目标实例名

  1. 数据守护集群

[ARCHIVE_REALTIME1]

ARCH_TYPE = REALTIME #实时归档类型

ARCH_DEST = GRP1_RT_02 #实时归档目标实例名

补充:

  1. 即时归档

即时归档(Timely)在主库将 Redo 日志写入联机日志文件后,通过 MAL 系统将 Redo 日志发送到备库。即时归档与实时归档的主要区别是 Redo 日志的发送时机不同。一个主库可以配置 1~8 个即时备库。

根据备库重演 Redo 日志和响应主库时机的不同,即时归档分为两种模式:事务一致模式和高性能模式。即时归档模式可以通过 dmarch.ini 中的 ARCH_WAIT_APPLY 或 WAIT_APPLY 配置项来设置。其中,ARCH_WAIT_APPLY 配置项默认值为 1,表示事务一致模式。

事务一致模式
主库事务提交触发 Redo 日志刷盘和即时归档,备库收到主库发送的 Redo 日志,并重演完成后再响应主库。主库收到备库响应消息后,再响应用户的提交请求。事务一致模式下,同一个事务的 SELECT 语句无论是在主库执行,还是在备库执行,查询结果都满足 READ COMMIT 隔离级要求。
高性能模式
与实时归档一样,备库收到主库发送的 Redo 日志后,马上响应主库,再启动日志重演。高性能模式下,备库与主库的数据同步存在一定延时(一般情况下延迟时间非常短暂,用户几乎感觉不到),不能严格保证事务一致性。


  1. 实时归档

与本地归档写入保存在磁盘中的日志文件不同,实时归档(Realtime)将主库产生的 Redo 日志通过 MAL 系统传递到备库,实时归档是实时主备和 MPP 主备的实现基础。实时归档只在主库生效,一个主库可以配置 1~8 个实时备库。

实时归档的执行流程是,主库在 Redo 日志(RLOG_PKG)写入联机日志文件前,将 Redo 日志发送到备库,备库收到 Redo 日志(RLOG_PKG)后标记为 KEEP_RLOG_PKG,将原 KEEP_RLOG_PKG 加入日志重演任务系统,并马上响应主库,不需要等待 Redo 日志重演结束后再响应主库。主库收到备库的响应消息,确认备库已经收到 Redo 日志后,再将 Redo 日志写入联机日志文件中。

另外,实时归档也可以支持读写分离集群,实时归档也分为两种模式:事务一致模式和高性能模式,可以通过 dmarch.ini 中的 ARCH_WAIT_APPLY 或 WAIT_APPLY 配置项来设置实时归档的模式。实时归档和即时归档这两种模式的具体含义的说明完全相同,区别仅在于配置为实时归档时,dmarch.ini 中的 ARCH_WAIT_APPLY 配置项默认值为 0,即采用高性能模式。

事务一致模式

主库事务提交触发 Redo 日志刷盘和即时归档,备库收到主库发送的 Redo 日志,并重演完成后再响应主库。主库收到备库响应消息后,再响应用户的提交请求。事务一致模式下,同一个事务的 SELECT 语句无论是在主库执行,还是在备库执行,查询结果都满足 READ COMMIT 隔离级要求。

高性能模式

与实时归档一样,备库收到主库发送的 Redo 日志后,马上响应主库,再启动日志重演。高性能模式下,备库与主库的数据同步存在一定延时(一般情况下延迟时间非常短暂,用户几乎感觉不到),不能严格保证事务一致性。

事务一致模式下,主备库之间严格维护事务一致性,但主库要等备库 Redo 日志重演完成后,再响应用户的提交请求,事务提交时间会变长,存在一定的性能损失。高性能模式则通过牺牲事务一致性获得更高的性能和提升系统的吞吐量。用户应该根据实际情况,选择合适的即时归档模式。

5.2 dm_svc.conf的配置区别

同步逻辑是几乎一样,区别主要在于事务分发即读写分离分发比例
读写分离集群可通过配置dm_svc.conf实现事务分发,数据守护没有。


读写分离集群

cat /etc/dm_svc.conf

##以#开头的行表示是注释

##全局配置区

TIME_ZONE=(480) #指明客户端的默认时区 +480东八区

LANGUAGE=(en)

DMRW=(192.168.0.101:5236,192.168.0.102:5236)

##服务配置

[DMRW]

LOGIN_MODE=(1) #0:优先连接 PRIMARY 模式的库,NORMAL 模式次之,最后选择 STANTBY 模式;1:只连接主库;2:只连接备库;3:优先连接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 NORMAL 模式;4:优先连接 NORMAL 模式的库,PRIMARY 模式次之,最后选择 STANDBY 模式。

RW_SEPARATE=(1) #是否启用读写分离。0:不启用;1:启用;2:启用,备库由客户端进行选择,且只会选择服务名中配置的节点。

RW_PERCENT=(30) #读写分离分发比例,有效值范围 0~100,主库占所有事物数的比例

SWITCH_TIMES=(60) #以服务名连接数据库时,若未找到符合条件的库成功建立连接,将尝试遍历服务名中库列表的次数。

SWITCH_INTERVAL=(1000) #在服务器之间切换的时间间隔,单位为毫秒


数据守护集群

cat /etc/dm_svc.conf

##以#开头的行表示是注释#

##全局配置区

TIME_ZONE=(480)

LANGUAGE=(cn)

DMHA=(192.168.0.101:5236,192.168.0.102:5236)

##服务配置

[DMHA]

LOGIN_MODE=(1) #0:优先连接 PRIMARY 模式的库,NORMAL 模式次之,最后选择 STANTBY 模式;1:只连接主库;2:只连接备库;3:优先连接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 NORMAL 模式;4:优先连接 NORMAL 模式的库,PRIMARY 模式次之,最后选择 STANDBY 模式。

SWITCH_TIMES=(60) #以服务名连接数据库时,若未找到符合条件的库成功建立连接,将尝试遍历服务名中库列表的次数。

SWITCH_INTERVAL=(1000) #在服务器之间切换的时间间隔,单位为毫秒


举报

相关推荐

0 条评论