注册
实时主备搭建
技术分享/ 文章详情 /

实时主备搭建

小灰灰_oO 2024/01/09 2093 2 0

实时主备搭建

1、部署规划

服务器类别 IP 数据库名 实例名 备注
主库 外网(NAT模式):192.168.100.30内网(主机模式):192.168.200.128 dmdb G1_RT_01
备库 外网(NAT模式):192.168.100.31内网(主机模式):192.168.200.129 dmdb G1_RT_02
确认监视器 内网(主机模式):192.168.200.130

端口规划:

服务器 OGUID MAL_INST_PORT/PORT_NUM(外网服务端口) MAL_INST_DW_PORT MAL_PORT(内网服务端口) MAL_DW_PORT(守护进程端口)
G1_RT_01 453331 32141 42141 52141 62141
G1_RT_02 453331 32142 42142 52142 62142

**目录规划:**在对应服务器上创建目录owner为dmdba组为dinstall)

目录 说明 容量
/dm 软件程序安装目录
/dm/bin 达梦执行程序所在目录
/dm/data 存放数据库文件(数据文件、REDO日志文件、控制文件等)
/dm/data/arch 存放归档日志
/dm/data/backup 存放数据库备份全量备份/dm/data/backup增量备份/dm/data/backup
/dm/data/slow 存放sql跟踪文件
mkdir /dm && chown dmdba:dinstall -R /dm

2、数据库安装

参考单机安装

3、主备集群配置

3.1 初始化

初始化前要确认dminit的参数

参数 说明
INSTANCE_NAME 实例名(DMSERVER)
PAGE_SIZE 数据页大小(8),可选值:4、8、16、32,单位:K
CASE_SENSITIVE 大小敏感(Y),可选值:Y/N,1/0
CHARSET/UNICODE_FLAG 字符集(0),可选值:0[GB18030],1[UTF-8],2[EUC-KR]
LENGTH_IN_CHAR VARCHAR类型长度是否以字符为单位(N),可选值:Y/N,1/0,设置
BLANK_PAD_MODE 设置空格填充模式(0),可选值:0/1,原库如果是oracle建议设置为1
EXTENT_SIZE 数据文件使用的簇大小(16),可选值:16、32、64,单位:页,设置为16
DB_NAME 数据库名(DAMENG)
PATH 初始数据库存放的路径,位于目录/dm/data/下
PORT_NUM 监听端口号(5236)
TIME_ZONE 设置时区(+08:00)
SYSDBA_PWD 设置SYSDBA密码(SYSDBA),密码长度为9到48
LOG_SIZE 日志文件大小(256),单位为:M,范围为:64M~2G,配置为2个,每个2G
  • 根据部署规划,切换到dmdba用户,主机运行以下命令:
su dmdba cd $DM_HOME/bin ./dminit PATH=/dm/data INSTANCE_NAME=G1_RT_01 DB_NAME=dmdb CHARSET=1 LENGTH_IN_CHAR=0 BLANK_PAD_MODE=0 PAGE_SIZE=32 EXTENT_SIZE=16 CASE_SENSITIVE=0 LOG_SIZE=2048 PORT_NUM=32141
  • 备机运行以下命令,跟主机唯一不同的点,就是实例名称改为G1_RT_02
su dmdba cd $DM_HOME/bin ./dminit PATH=/dm/data INSTANCE_NAME=G1_RT_02 DB_NAME=dmdb CHARSET=1 LENGTH_IN_CHAR=0 BLANK_PAD_MODE=0 PAGE_SIZE=32 EXTENT_SIZE=16 CASE_SENSITIVE=0 LOG_SIZE=2048 PORT_NUM=32142
  • 监视器
su dmdba cd $DM_HOME/bin ./dminit PATH=/dm/data INSTANCE_NAME=G1_RT_03 DB_NAME=dmdb CHARSET=1 LENGTH_IN_CHAR=0 BLANK_PAD_MODE=0 PAGE_SIZE=32 EXTENT_SIZE=16 CASE_SENSITIVE=0 LOG_SIZE=2048

3.2 备份主库,并还原到备库上

3.2.1 备份主库

deng初始化的实例必须先使用dmdba用户启动一次,才能脱机备份

登录dmdba账户,使用dmrman工具备份主库

su dmdba #启动dmrman #指定备份、还原执行载体,1/2:DMAP/进程自身,默认是DMAP。 dmrman USE_AP=2 #备份全库 backup database '/dm/data/dmdb/dm.ini' backupset '/dm/data/backup';

使用scp将备份文件传输到备库中

scp -r /dm/data/backup dmdba@192.168.100.31:/dm/data/

3.2.2 还原备库

登录dmdba账户,使用dmrman工具还原备库

su dmdba #启动dmrman dmrman restore database '/dm/data/dmdb/dm.ini' from backupset '/dm/data/backup'; recover database '/dm/data/dmdb/dm.ini' from backupset '/dm/data/backup'; recover database '/dm/data/dmdb/dm.ini' update db_magic;

注意:

一定要先备份主库,再还原到备库中,不然后面的配置就算全做对了,也是会配置失败的!

3.3 修改dm.ini参数,对应视图v$dm_ini

所有节点都要修改

vi /dm/data/dmdb/dm.ini
参数 参数说明 主机 备机
INSTANCE_NAME 实例名 G1_RT_01 G1_RT_02
PORT_NUM 端口 32141 32142
MAL_INI 是否启用MAL系统,0:不启用;1:启用 1 1
ARCH_INI 是否启用归档,0:不启用;1:启用 1 1
ALTER_MODE_STATUS 是否允许手工修改服务器的模式、状态和OGUID,1:允许;0:不允许。**注:**数据守护环境下建议配置为0,实例处于主机或备机模式后,不允许用户直接通过SQL语句修改服务器的模式、状态和OGUID 0 0
ENABLE_OFFLINE_TS 是否允许OFFLINE表空间,0:不允许;1:允许;2:备库不允许。 注:数据守护环境下建议配置为2 2 2
SVR_LOG 是否打开SQL日志功能,0:关闭;1:打开,并按照SQLLOG.INI中的配置来记录SQL日志;2:打开,按文件中记录数量切换日志文件,日志记录为详细模式;3:打开,不切换日志文件,日志记录为简单模式,只记录时间和原始语句 1 1

3.4 归档配置,对应视图v$dm_arch_ini

修改 dmarch.ini,配置本地归档和实时归档。

book关于归档模式的介绍,可以参考这份文档。几种归档模式的介绍

3.4.1 dmarch.ini配置文件参数说明

参数
ARCH_TYPE REDO日志归档类型:1️⃣REALTIME - 实时归档2️⃣LOCAL - 本地归档3️⃣SYNC - 同步归档4️⃣ASYNC - 异步归档5️⃣REMOTE - 远程归档
ARCH_DEST 归档目标:1️⃣实时归档同步归档异步归档设置为远程数据库实例名2️⃣本地归档归档文件存放路径
ARCH_FILE_SIZE 单个REDO日志归档文件大小,单位Mb,取值范围(64M~2048M),仅对本地归档有效,缺省128M
ARCH_SPACE_LIMIT REDO日志归档空间限制,当所有本地归档文件达到限制值时,系统自动删除最老的归档文件,单位Mb。0表示无空间限制,取值范围(1024M~4294967294M),仅对本地归档有效,缺省为0

在实例数据目录下新建文件dmarch.ini,执行以下命令:

vi /dm/data/dmdb/dmarch.ini

3.4.2 主库配置

[ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /dm/data/arch ARCH_FILE_SIZE = 2048 ARCH_SPACE_LIMIT = 512000 [ARCHIVE_REALTIME] ARCH_TYPE = REALTIME #实时归档 ARCH_DEST = G1_RT_02 #实时归档目标实例名

除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 Primary 模式时,需要同步归档数据的目标实例名

当前实例 G1_RT_01 是主库,需要向 G1_RT_02(实时备库)同步数据,因此实时归档的 ARCH_DEST 配置为 G1_RT_02。

3.4.3 备库配置

[ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /dm/data/arch ARCH_FILE_SIZE = 2048 ARCH_SPACE_LIMIT = 512000 [ARCHIVE_REALTIME] ARCH_TYPE = REALTIME #实时归档 ARCH_DEST = G1_RT_01 #实时归档目标实例名

当前实例 G1_RT_02 是备库,守护系统配置完成后,可能在各种故障处理中,G1_RT_02 切换为新的主库,正常情况下,G1_RT_01 会切换为新的备库,需要向G1_RT_01 同步数据,因此实时归档的 ARCH_DEST 配置为 G1_RT_01。

注意:

主备库配置的区别就是,ARCHIVE_REALTIME项下的ARCH_DEST分别指向另一台实例名


3.5 新建dmmal.ini配置文件,对应视图v$dm_mal_ini

dengMAL 系统是**DM内部高速通信系统**,基于 TCP/IP 协议实现。服务器的很多重要功能都是通过 MAL 系统实现通信的,例如数据守护、数据复制、MPP、远程日志归档等。MAL 系统内部包含一系列线程,有 MAL 监听线程、MAL 发送工作线程、MAL 接收工作线程等。

dmmal.ini 是 MAL 系统的配置文件。dmmal.ini 的配置项见下表。

需要用到 MAL 环境的实例,所有站点 dmmal.ini 需要保证严格一致

  • MAL_HOST 使用内部网络 IP
  • MAL_PORT 与 dm.ini 中 PORT_NUM 使用不同的端口值
  • MAL_DW_PORT 是各实例对应的守护进程之间,以及守护进程和监视器之间的通信端口。

3.5.1 一级配置项

配置项(一级) 说明
MAL_CHECK_INTERVAL 检测线程检测间隔,缺省为30s,取值范围0~1800,单位秒,如果配置为0,则表示不进行链路检测
MAL_CONN_FAIL_INTERVAL 检测线程认定链路断开的时间,缺省为10s,取值范围2~1800
🔴**[MAL_INST1]** 实例配置,配置文件中可以配置多个[MAL_INST**<font color='red' size=5>编号**]其中有子参数,子参数参考下表
MAL_SEND_THRESHOLD 最大待发送邮件数,用于控制待发送邮件总数,防止发送邮件堆积。取值范围1024~10000,缺省值2048
MAL_LEAK_CHECK 是否打开MAL内存泄露检查(0:关闭,1:打开),缺省为0
MAL_LOGIN_TIMEOUT MPP/DBLINK等实例间登录时的超时检测间隔3~1800,单位秒,缺省为15s
MAL_BUF_SIZE 单个MAL缓存大小限制,单位MB。当此MAL的缓存邮件超过此大小,则会将邮件存储到文件中。取值范围0~500000,缺省为100
MAL_SYS_BUF_SIZE MAL系统总内存大小限制,单位MB。取值范围0~500000,缺省为0,表示MAL系统无总内存限制
MAL_VPOOL_SIZE MAL 系统使用的内存初始化大小,单位MB。取值范围1~500000,缺省为10,此值一般要设置的比MAL_BUF_SIZE大一些
MAL_COMPRESS_LEVEL Mal消息压缩等级,取值范围0~10。0代表不进行消息压缩,为默认值 1~9表示采用zip算法,从1到9表示压缩速度依次递减,压缩率依次递增。 10表示采用snappy算法,压缩速度高于zip算法,压缩率相对低
MAL_TEMP_PATH 指定临时文件的目录。当邮件使用的内存超过mal_buf_size或者mal_sys_buf_size时,将新产生的邮件保存到临时文件中。如果缺省,则新产生的邮件保存到temp.dbf文件中
MAL_COMBIN_BUF_SIZE 指定MAL消息合并发送的缓冲区大小,单位KB。MAL发送消息时进行合并,减少网络发送次数。有效值范围0~131072。0表示不进行消息合并,为缺省值。最小缓冲区大小128k,当设置值大于0小于128时,自动调整为128
MAL_MESSAGE_CHECK 是否对MAL通信消息启用消息体校验(只有当消息的发送端和接收端都配置为1才启用通信体校验)。0:不启用;1:启用。缺省为1

3.5.2 MAL_INST的二级参数项

dmmal.ini的二级参数项指的是**一级配置项MAL_INST(实例配置)**的参数设置。

参数(二级) 说明
MAL_HOST 实例主库IP,内网IP
MAL_PORT MAL监听端口,用于数据守护、DSC、MPP等环境中各节点实例之间MAL链路配置,监听端端口配置此参数,与 dm.ini 中 PORT_NUM 使用不同的端口值
MAL_INST_HOST 实例主库IP,实例对外服务IP(外网IP)。(在MPP下以及读写分离的即时归档主备系统下一定要配置)
MAL_INST_PORT MAL_INST_NAME实例服务器监听通讯端口号,服务器配置此参数,取值范围102465534,发起连接端的端口在102465535之间随机分配 此参数的配置应与DM.INI中的PORT_NUM保持一致
MAL_INST_NAME 实例名,MAL系统中的各数据库实例不允许同名。
MAL_DW_PORT MAL_INST_NAME实例守护进程的监听端口,其他守护进程或监视器使用MAL_HOST + MAL_DW_PORT创建与该实例守护进程的TCP连接,监听端配置此参数,取值范围102465534,发起连接端的端口在102465535之间随机分配
MAL_LINK_MAGIC MAL链路网段标识,取值范围0~65535。缺省为0。设置此参数时,同一网段内的节点都设置相同,不同网段内的节点设置的值必须不同。搭建跨网段的DBLINK时,如果内外网不通,则必须配置此参数;如果内外网互通,则可以不配

3.5.3 文件具体配置

vim /dm/data/dmdb/dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL链路检测时间间隔,默认 30s MAL_CONN_FAIL_INTERVAL = 15 #判定MAL链路断开的时间,默认 10s [MAL_INST1] MAL_INST_NAME = G1_RT_01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 192.168.200.128 #MAL 系统监听 TCP 连接的 IP 地址 MAL_PORT = 52141 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.100.30 #实例的对外服务 IP 地址 MAL_INST_PORT = 32141 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 62141 #实例本地的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 42141 #实例监听守护进程 TCP 连接的端口 [MAL_INST2] MAL_INST_NAME = G1_RT_02 MAL_HOST = 192.168.200.129 MAL_PORT = 52142 MAL_INST_HOST = 192.168.100.31 MAL_INST_PORT = 32142 MAL_DW_PORT = 62142 MAL_INST_DW_PORT = 42142

3.6 守护进程配置文件dmwatcher.ini

守护进程(dmwatcher)是 DM 数据守护系统不可或缺的核心部件,是数据库实例和监视器之间信息流转的桥梁

  • 数据库实例向本地守护进程发送信息,接收本地守护进程的消息和命令;
  • 监视器(dmmonitor)接收守护进程的消息,并向守护进程发送命令;
  • 数据库实例与监视器之间没有直接的消息交互;守护进程解析并执行监视器发起的各种命令(Switchover/Takeover/Open database 等),并在必要时通知数据库实例执行相应的操作。

守护进程必须和被守护的数据库实例部署在同一台机器上

在数据目录下新建dmwatcher.ini

vim /dm/data/dmdb/dmwatcher.ini
[G1] #组名,自定义 DW_TYPE = GLOBAL #全局守护类型 DW_MODE = AUTO #故障自动切换模式 DW_ERROR_TIME = 30 #远程守护进程故障认定时间 INST_ERROR_TIME = 30 #本地实例故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_OGUID = 453331 #守护系统唯一OGUID值 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭 INST_INI = /dm/data/dmdb/dm.ini #dm.ini文件路径 INST_STARTUP_CMD = /dm/bin/dmserver #命令行方式启动

参数说明:

参数 说明
DW_TYPE 守护类型,默认为LOCALLOCAL ** - 本地守护 REALTIME:实时主备 TIMELY:读写分离 MARCH:MPP主备GLOBAL** - 全局
DW_MODE 切换模式,默认为MANUALMANUAL - 故障手动切换模式 AUTO - 故障自动切换模式,配置自动切换的前提是已经部署确认监视器。在提供第三方机器部署确认监视器情况下,可以配置为故障自动切换模式,主库出现故障时,系统自动将备库切换为主库对外提供数据库服务。
DW_ERROR_TIME 守护进程故障认定时间,取值范围为(3s~32767s),缺省15秒没有收到远程守护进程消息,即认定远程守护进程故障,对本地模式无效。另外此参数也是监视器认定守护进程的故障时间,超过设置的时间间隔仍没有收到守护进程消息,监视器认为守护进程出现故障
INST_ERROR_TIME 数据库故障认定时间,取值范围为(3s~32767s),缺省15秒没有收到数据库发送的状态信息,即认定其监控的数据库出现故障
INST_RECOVER_TIME 备库故障恢复检测时间间隔,取值范围0~86400s,缺省每60秒检查一下备库状态,满足故障恢复条件时,启动历史数据同步流程。数据守护系统启动完成后、Switchover主备切换后、Takeover备库接管后以及强制Open主库后,主库守护进程INST_RECOVER_TIME内存值会强制设置成0,确保尽快启动数据同步。另外,还可以通过监视器命令set recover time修改INST_RECOVER_TIME内存值。
INST_OGUID 系统通过OGUID值确定一个守护进程组,由用户保证OGUID值的唯一性,并确保数据守护系统中,数据库、守护进程和监视器配置相同的OGUID值。
INST_AUTO_RESTART 是否自动重启数据库实例,0:不自动重启 1:自动重启
INST_INI 监控数据库dm.ini路径。dmwatcher从dm.ini配置文件获取DW_PORT信息,并进一步从dmmal.ini中获取MAL_HOST/MAL_DW_PORT等信息。
INST_STARTUP_CMD 数据库启动命令
RLOG_SEND_THRESHOLD 指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD 指定备库重演日志的时间阀值,默认关闭

注意:

DW_TYPE配置全局守护类型后,守护进程守护的数据库实例,必须配置实时归档即时归档,否则dmwatcher会启动失败


3.7 启动数据库

3.7.1 启动主库

  • 以dmdba用户,用 Mount 方式启动主库
su dmdba # 初始化数据库,然后EXIT退出,如果没有初始化,直接以mount启动,会报错 /dm/bin/dmserver /dm/data/dmdb/dm.ini # 用 Mount 方式启动主库 /dm/bin/dmserver /dm/data/dmdb/dm.ini mount

注意

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

  • DISQL登录,修改数据库为 Primary 模式
SQL> SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1); #允许手工修改服务器的模式、状态和OGUID SQL> SP_SET_OGUID(453331); SQL> alter database primary; SQL> SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',0); #禁止手工修改服务器的模式、状态和OGUID

3.7.2 启动备库

  • 以dmdba用户,用 Mount 方式启动备库
su dmdba # 初始化数据库,然后EXIT退出,如果没有初始化,直接以mount启动,会报错 /dm/bin/dmserver /dm/data/dmdb/dm.ini # 用 Mount 方式启动备库 /dm/bin/dmserver /dm/data/dmdb/dm.ini mount

注意

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

  • DISQL登录,修改数据库为 Standby模式
SQL> SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1); #允许手工修改服务器的模式、状态和OGUID SQL> SP_SET_OGUID(453331); SQL> alter database standby; SQL> SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',0); #禁止手工修改服务器的模式、状态和OGUID

3.8 配置监视器,新建dmmonitor.ini

由于主库和实时备库的守护进程配置为自动切换模式,因此这里必须配置确认监视器。和普通监视器相比,确认监视器除了相同的命令支持外,在主库发生故障时,能够自动通知实时备库接管为新的主库,具有自动故障处理的功能。

3.8.1 配置单实例监视器

修改 dmmonitor.ini 配置确认监视器,其中 MON_DW_IP 中的 IP 和 PORT 和 dmmal.ini 中的 MAL_HOST 和 MAL_DW_PORT 配置项保持一致。

MON_DW_CONFIRM = 1 ##确认监视器模式 MON_LOG_PATH = /dm/data/log ##监视器日志文件存放路径 MON_LOG_INTERVAL = 60 ##每隔60s定时记录系统信息到日志文件 MON_LOG_FILE_SIZE = 32 ##每个日志文件最大32M MON_LOG_SPACE_LIMIT= 0 ##不限定日志文件总占用空间 [G1] ##组名,与dmwatcher.ini中一致 MON_INST_OGUID = 453331 ##组G1的唯一OGUID值 ##以下配置为监视器到组G1的守护进程的连接信息,以“IP:PORT”的形式配置 ##IP对应dmmal.ini中的MAL_HOST,PORT对应dmmal.ini中的MAL_DW_PORT MON_DW_IP = 192.168.200.128:62141 ##主机 MON_DW_IP = 192.168.200.129:62142 ##备机

3.9 启动守护进程

启动各个主备库上的守护进程:

./dmwatcher /dm/data/dmdb/dmwatcher.ini

守护进程启动后,进入 Startup 状态,此时实例都处于 Mount 状态。守护进程开始广播自身和其监控实例的状态信息,结合自身信息和远程守护进程的广播信息,守护进程将本地实例 Open,并切换 pen 状态。

3.10 启动监视器

多实例确认监视器系统中,需逐个单独启动各监视器。

启动视器:

./dmmonitor /dm/data/dmdb/dmmonitor.ini

监视器提供一系列命令,支持当前守护系统状态查看以及故障处理,可输入 help 命令,查看各种命令使用说明,结合实际情况选择使用。

至此一主一备的实时数据守护系统搭建完毕,在搭建步骤和各项配置都正确的情况下,在监视器上执行 show 命令,可以监控到所有实例都处于 Open 状态,所有守护进程也都处于 Open 状态,即为正常运行状态。

3.11 验证主备同步状态

  • 使用DISQL登录主库,建表并插入数据验证。
$ disql SYSDBA/SYSDBA@192.168.100.30 SQL> create table test(id int); SQL> insert into test values (1); SQL> commit;
  • 使用DISQL登录备库,查表验证数据
SQL> select * from test;

3.12 注册服务

注册服务需使用 root 用户进行注册。使用 root 用户进入数据库安装目录的 /dm/script/root 下,如下所示:

  • 主库/备库
$ cd /dm/script/root # 注册服务,注意配置文件的路径 $ ./dm_service_installer.sh -t dmserver -p DMSERVER -dm_ini /dm/data/dmdb/dm.ini $ ./dm_service_installer.sh -t dmwatcher -p DW -watcher_ini /dm/data/dmdb/dmwatcher.ini
  • 确认监视器
$ cd /dm/script/root # 注册服务,注意配置文件的路径 $ ./dm_service_installer.sh -t dmmonitor -p mon -monitor_ini /dm/data/dmdb/dmmonitor.ini

4、重启集群

  1. 关闭监视器
  2. 关闭主库守护进程
  3. 关闭备库守护进程
  4. 关闭主库实例
  5. 关闭备库实例
  6. 启动主库实例
  7. 启动备库实例
  8. 启动主库守护进程
  9. 启动备库守护进程
  10. 启动监视器
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服