达梦守护集群搭建

        该博客主要完成了达梦守护集群的搭建,包括守护集群的相关概念、搭建前的环境准备、配置文件说明、启动关闭流程、故障处理等内容。

1、部署三台DM8单机数据库

        部署单机数据库可查看内容DM8基于Linux安装(命令行)_1911abc的博客-CSDN博客,部署完成后启停一次数据库。

机器名

IP

用途

dm103

192.168.23.103

数据守护主库

dm104

192.168.23.104

数据守护备库

dm105

192.168.23.105

守护确认监视器

2、数据准备

1)配置数据守护之前,必须先通过备份还原方式同步各数据库的数据,确保各数据的数据保持完全一致;

2)主库可以是新初始化的数据库,也可以是正在生产、使用中的数据库。备库在备份还原前需要先准备初始化一个新库;

3)注意不能使用分别初始化库或者直接拷贝数据文件的方法来直接配置数据库守护;

4)若是主备环境已经搭建完成,备库数据磁盘出现故障导致数据丢失,在磁盘恢复以后也可重新初始化备库然后通过备份还原的方式使主备数据一致;

5)备份还原需要配置本地归档,由于是主备集群,还需要配置备库的实时归档;

6)归档说明:

本地归档:在redo日志写入日志文件后,由归档线程写入本地服务器中,最多配置8个本地归档。可以配置归档空间限制,这里配置了空间限制,数据库会自动删除最早生成的归档,腾出空间。

实时归档:实时归档只有在数据模式为主库才生效,是实现mpp和实时主备的基础,dm8支持实时归档的读写分离。主库在redo日志写入redo日志文件之前,通过mal系统发送redo日志到远程服务器。发送成功:远程服务器在收到redo日志,返回确认消息,主库再执行后续操作;发送失败或备库不是standby模式:会将主库切换为suspend挂起状态,阻塞所有redo日志的写入操作,最多能配置8个实时备库。

即时归档:是在redo日志写入联机日志文件后,再通过mal系统将redo_buf发动到备库,即时归档是读写分离实现的基础,一个主库最多配8个即时备库。

异步归档:在设定的时间点或者每隔设定时间,启动归档redo日志发送。设置定时归档,必须确保至少有一个本地归档。第一步:根据设定的时间,触发日志发送事件;第二步:通过mal系统获取远程的lsn,生成发送归档的任务,加入任务队列;第三步:归档任务线程,通过mal系统发送到远程服务器,最多可以设置8个异步归档。

远程归档:和本地归档类似,只是远程归档写的联机日志是另一台机器,不是在本服务器上;添加参数对应远程归档存放在本节点的实际路径

7)备份还原:

主库备份

RMAN> BACKUP DATABASE '/home/dmdba/dm/dmdbms/bin/dm.ini' FULL BACKUPSET '/dbbak/dmbak/bak_for_standby';

备库还原

RMAN> RESTORE DATABASE '/home/dmdba/dm/dmdbms/bin/dm.ini' FROM BACKUPSET '/dbbak/dmbak/bak_for_standby';

RMAN> RECOVER DATABASE '/home/dmdba/dm/dmdbms/bin/dm.ini' FROM BACKUPSET '/dbbak/dmbak/bak_for_standby';

RMAN> RECOVER DATABASE '/home/dmdba/dm/dmdbms/bin/dm.ini' UPDATE db_magic;

8)检查数据一致性

        以mount方式启动主、备数据库,登录并查询LSN值,确保主备机数据一致,然后正常关闭主备数据库进行下一步。

SQL> select file_LSN, cur_LSN from v$rlog;

行号     FILE_LSN             CUR_LSN             

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

1          37460                37460 

SQL> select permanent_magic;



行号     PERMANENT_MAGIC

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

1          491522710

3、配置文件及参数说明

1)dm.ini,主备库仅实例名不一致:

MAL_INIMAL 系统是基于 TCP 协议实现的一种内部通信机制,具有可靠、灵活、高效的特性。DM 通过 MAL 系统实现 Redo 日志传输,以及其他一些实例间的消息通讯。

ALTER_MODE_STATUS:是否允许手工修改服务器的模式、状态和 OGUID,1:允许;0:不允许。 注:数据守护环境下建议配置为 0,实例处于主机或备机模式后,不允许用户直接通过 SQL 语句修改服务器的模式、状态和 OGUID。

INSTANCE_NAME = GRP1_RT_01 #实例名

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,是 MAL 系统的配置文件,各主备库的配置必须完全一致:

MAL_DW_PORT:实例守护进程的监听端口,其他守护进程或监视器使用 MAL_HOST + MAL_DW_PORT 创建与该实例守护进程的 TCP 连接,监听端配置此参数,有效值范围 (1024~65534),发起连接端的端口在 1024-65535 之间随机分配。

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

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

[MAL_INST1]

MAL_INST_NAME = GRP1_RT_01 #实例名

MAL_HOST = 192.168.23.103 #实例主库的 IP 地址

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

MAL_INST_HOST = 192.168.23.103 #连接数据库服务器使用的 IP 地址

MAL_INST_PORT = 5236 #实例的对外服务端口

MAL_DW_PORT = 65101 #实例本地的守护进程监听 TCP 连接的端口

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

[MAL_INST2]

MAL_INST_NAME = GRP1_RT_03

MAL_HOST = 192.168.23.104

MAL_PORT = 55121

MAL_INST_HOST = 192.168. 23.104

MAL_INST_PORT = 5236

MAL_DW_PORT = 65121

MAL_INST_DW_PORT = 45121

3)dmarch.ini,配置本地归档和实时归档,主备库仅实例名不一致:

ARCH_SPACE_LIMIT:本地归档文件空间限制。当同一节点号的本地归档文件达到限制值时,系统自动删除最早生成的本地归档日志文件。

[ARCHIVE_REALTIME]

ARCH_TYPE = REALTIME #实时归档类型

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

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL #本地归档类型

ARCH_DEST = /dbarch/dmarch #本地归档文件存放路径

ARCH_FILE_SIZE = 2048 #本地单个归档文件最大值

ARCH_SPACE_LIMIT = 4096 #0 表示无限制,依磁盘大小确定

4)dmwatcher.ini,监视器配置文件:

DW_MODE:守护集群可由两台或三台机器搭建,故障切换可配置为手动切换或自动切换,当存在确认监视器时才可设置为自动切换;主库发生故障时,确认监视器自动选择一个备库,切换为主库对外提供服务。故障自动切换模式,要求必须配置,且只能配置一个确认监视器;主库发生故障时,由用户根据实际情况,通过监视器命令将备库切换为主库。在用户干预之前,备库可以继续提供只读服务,但修改非临时表数据的操作将会失败。

INST_AUTO_RESTART:配置数据库实例服务自动拉起,若实例未启动,此时启动守护会自动打开数据库服务。

[GRP1]

DW_TYPE = GLOBAL  #全局守护类型

DW_MODE = AUTO      #自动切换模式,AUTO,MANUL

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

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

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

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

INST_INI = /home/dmdba/dm/dmdbms/bin/dm.ini   #dm.ini 配置文件路径

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

INST_STARTUP_CMD = /home/dmdba/dm/dmdbms/bin/dmserver #命令行方式启动

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

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

5) dmmonitor.ini,监视器配置文件

MON_DW_CONFIRM:监视器模式,1为确认监视器,一个守护进程只能有一个确认监视器,确认监视器除了具备监控模式监视器所有功能外,还具有状态确认和自动接管两个功能。

MON_DW_IP:监视器到组 GRP1 的守护进程的连接信息,以IP:PORT的形式配置,IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT

MON_DW_CONFIRM = 1 #确认监视器模式,0为普通监视器

MON_LOG_PATH = /home/dmdba/dm/dmdbms/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.23.103:65101

MON_DW_IP = 192.168.23.104:65121

4、启动主备库,配置集群环境

1)以mount方式启动数据库,否则系统启动时会重构回滚表空间,生成 Redo 日志;并且,启动后应用可能连接到数据库实例进行操作,破坏主备库的数据一致性。数据守护配置结束后,守护进程会自动 Open 数据库;

2)设置oguid值:系统通过 OGUID 值确定一个守护进程组,由用户保证 OGUID 值的唯一性,并确保数据守护系统中,数据库、守护进程和监视器配置相同的 OGUID 值;

3)配置数据库模式,将192.168.23.103置为主库,将192.168.23.104置为备库;

4)启动主备库守护进程,启动监视器;

5)确认集群状态无误后注册后台服务,可使用dm提供的脚本注册,也可利用dm提供的模板手动注册并加开机自动启动,这里选择手动注册。

配置主库:

[dmdba@dameng103 bin]$ ./dmserver dm.ini mount

[dmdba@dameng103 bin]$ ./disql SYSDBA/SYSDBA

SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);

SQL> sp_set_oguid(453331);

SQL> alter database primary;

SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

配置备库:

[dmdba@dameng104 bin]$ ./dmserver dm.ini mount

[dmdba@dameng104 bin]$ ./disql SYSDBA/SYSDBA

SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);

SQL> sp_set_oguid(453331);

SQL> alter database standby;

SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

启动主库守护进程:

[dmdba@dameng103 bin]$ ./dmwatcher /dbdata/dmdata/DAMENG/dmwatcher.ini

DMWATCHER[4.0] V8

DMWATCHER[4.0] IS READY

启动备库守护进程:

[dmdba@dameng104 bin]$ ./dmwatcher /dbdata/dmdata/DAMENG/dmwatcher.ini

DMWATCHER[4.0] V8

DMWATCHER[4.0] IS READY

启动监视器:

[dmdba@dameng105 bin]$ ./dmmonitor /dbdata/dmdata/DAMENG/dmmonitor.ini

[monitor]         2022-08-15 10:14:15: DMMONITOR[4.0] V8

[monitor]         2022-08-15 10:14:15: DMMONITOR[4.0] IS READY.



[monitor]         2022-08-15 10:14:16: 收到守护进程(GRP1_RT_01)消息

                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS IMODE     RSTAT    N_OPEN   FLSN            CLSN            

                  2022-08-15 10:14:16  OPEN           OK        GRP1_RT_01       OPEN        PRIMARY   VALID    2        50220           50220           

[monitor]         2022-08-15 10:14:16: 收到守护进程(GRP1_RT_03)消息

                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            

                  2022-08-15 10:14:16  OPEN           OK        GRP1_RT_03       OPEN        STANDBY   VALID    2        50220           50220

5、主备切换

        主库维护,滚动升级等场景,可以执行 Switchover 命令,实现主备库切换。如果存在多个备库,需要先执行 Choose Switchover 命令,选出守护进程组中可以切换的备库。

        主备库切换在实现逻辑上等同于主备库正常状态下用户主动发起的Takeover 操作。Swithover完成后,主备库之间数据是不完全同步的,要由新主库 B 的守护进程通过 Recovery 流程,重新同步数据到新备库 A。Switchover 命令会修改切换后主库守护进ZINST_RECOVER_TIME 内存值为 3 秒(默认 60 秒),确保尽快启动故障恢复流程,同步主库数据完成后,重新将归档设置为 Valid 状态。

        在故障恢复流程完成之前,再次执行Switchover 命令会报错,如果主库故障,备库接管将会报错;备库强制接管会引发守护进程组分裂。

6、关闭数据守护

        关闭守护系统时,必须按照一定的顺序来关闭守护进程和数据库实例。特别是自动切换模式,如果退出守护进程或主备库的顺序不正确,可能会引起主备切换,甚至造成守护进程组分裂。通过监视器执行 Stop Group 命令关闭数据守护系统,是最简单、安全的方式。命令执行成功后,数据库实例正常关闭。但守护进程并没有真正退出,而是将状态切换为Shutdown 状态。

Stop Group 命令内部流程如下:

1)通知守护进程切换为 Shutdown 状态;

2)通知主库退出;

3)通知其他备库退出。

如果使用手动方式关闭数据守护系统,请严格按照以下顺序执行:

1)如果启动了确认监视器,先关闭确认监视器(防止自动接管);

2)关闭备库守护进程(防止重启实例)

3)关闭主库守护进程(防止重启实例)

4)Shutdown 主库

5)Shutdown 备库

如果是只关闭主库,并且不想引发备库自动接管,有以下两种方法:

1)通过 Detach database 命令将所有备库分离,通过 Stop database 命令退出主库;

2)通过 Stop dmwatcher 命令关闭所有守护进程监控,手动正常退出主库。

如果是只关闭备库,并且不想引发主库发送日志失败进入 Suspend 状态,请严格按照
以下顺序执行:

通过 Detach database 命令将备库分离出数据守护系统,正常退出备库(手动退出或者通过 Stop database命令退出)。

7、故障处理

1)备库故障处理

        故障自动切换模式下,备库故障后,如果主备库之间的归档状态仍然有效,主库的守护进程会先切换为 Confirm 状态,等待确认监视器的确认消息,如果确认为符合故障处理条件,主库守护进程再切换至 Failover 状态,将故障备库的归档失效。

        故障手动切换模式下,备库故障后,如果主备库之间的归档状态仍然有效,会直接切换到 Failover 状态,并将故障备库的归档失效,不需要备库故障确认。备库故障后,备库的守护进程如果还处于活动状态且监控功能没有被关闭,则会切换到Startup 状态下。

        备库故障重启后,如果存在活动主库,主库守护进程根据备库实例的模式、状态、备库守护进程状态、守护进程控制文件状态、备库已经同步到的 Open 记录以及备库的恢复间隔等信息判断是否可以进行故障恢复,在满足故障恢复条件的情况下,主库守护进程启动Recovery 流程,重新恢复主备库到一致状态。如果一直没有观察到主库守护进程发起 Recovery 流程,可以借助监视器的 check recover 命令查找备库不满足条件的原因,并做对应的处理。

2)主库故障处理

        故障自动切换模式下,主库故障后,确认监视器会捕获到故障信息,自动选出可接管的备库,并通知备库进行接管。备库接管由确认监视器自动触发,无需用户干预。故障手动切换模式下,主库故障后,需要人工干预,可以先在监视器上执行 Choose Takeover 命令,选出守护进程组中可以接管的备库在监视器上输入 Takeover 命令通知备库执行接管。这两种方式的接管执行流程是一样的。

        有些情况下,备库接管会失败,但主库不能启动或者及时恢复对外服务的情况下,可以使用 Takeover Force 命令,进行备库强制接管。强制接管具有一定的风险,可能导致备库和故障主库数据不一致,而造成部分数据的丢失,出现数据库分裂的情况,所以应该慎重使用。

        故障自动切换模式下,可以实时处理故障,但对网络稳定性要求更高,需要确保主备库之间,主备库与守护进程、确认监视器之间的网络稳定可靠,否则可能会误判主库故障,备库自动接管后,出现多个 Open 状态的主库,引发脑裂。故障手动切换模式下,备库不会自动接管,出现节点故障或者网络故障时,由用户根据各种故障情况,进行人工干预。

        主库故障重启后,守护进程根据本地和远程库的 Open 记录、LSN 信息以及模式和状态信息来判定重启后的恢复策略,可能继续作为主库加入守护系统,也可能修改为 Standby模式,以备库身份重新加入守护系统,如果出现分裂,则需要用户干预。

        如下,模拟主库故障实现备库自动接管成为主库,故障恢复后原主库作为备库:

 更多内容可访问达梦官方社区地址:https://eco.dameng.com

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值