实时主备概述

实时主备由一个主库以及一个或者多个配置了实时(Realtime)归档的备库组成,其主要目的是保障数据库可用性,提高数据安全性。实时主备系统中,主库提供完整的数据库功能,备库提供只读服务。主库修改数据产生的Redo日志,通过实时归档机制,在写入联机Redo日志文件之前发送到备库,实时备库通过重演Redo日志与主库保持数据同步。当主库出现故障时,备库在将所有Redo日志重演结束后,就可以切换为主库对外提供数据库服务

1 环境准备

服务器 主库IP:192.168.118.120   dm8数据库 实例名 :RAC1 端口号:5236

服务器 备库IP:192.168.118.121   dm8数据库 实例名 :RAC2 端口号:5236

# 数据库启动服务命令路径/dm8/bin,实例配置文件路径/dm8/data/DAMENG/

2 主备库分别初始化实例(按客户要求)

./dminit path=/dm8/data page_size=32 instance_name=RAC1

./dminit path=/dm8/data page_size=32 instance_name=RAC2

3 备份还原

# 如果是初始搭建环境,可以通过对主库脱机备份、对备库脱机还原的方式来准备数据, 如果主库已经处于运行状态,则可以对主库进行联机备份、对备库脱机还原的方式来准备数据。

3.1 主库创建实例之后,启动数据库并登录

./dmserver /dm8/data/DAMENG/dm.ini

3.2 关闭数据库,以dmrman备份数据库

BACKUP DATABASE '/dm8/data/DAMENG/dm.ini' BACKUPSET '/dm8/data/backup';

3.3 将备份文件复制到备库对应目录下(如果是root用户,复制成功需要将备份文件设置属于dmdba:dinstall用户组

scp -r /dm8/data/backup dmdba@192.168.118.121:/dm8/data/backup

3.4 备库启动dmrman执行数据库还原

RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/backup';
RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/backup';
RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC;

4 配置集群文件

4.1  vim dm.ini    #主备库实例都需更改下面参数

ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置

4.2  vim dmmal.ini  #主备库配置必须完全一致

MAL_CHECK_INTERVAL       = 5      #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL   = 5  #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME    = RAC1 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST              = 192.168.118.120 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT              = 61141    #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST    = 192.168.118.120 #实例的对外服务 IP 地址
MAL_INST_PORT    = 5236 #实例的对外服务端口,dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT      = 52141 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT    = 33141 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME       = RAC2
MAL_HOST                 = 192.168.118.121
MAL_PORT                 = 61141
MAL_INST_HOST       = 192.168.118.121
MAL_INST_PORT       = 5236
MAL_DW_PORT         = 52141
MAL_INST_DW_PORT    = 33141

4.3 vim dmarch.ini #主备库归档目标实例名不一致,其他一致

#与联机 Redo 日志文件可以被覆盖重用不同,本地归档日志文件不能被覆盖,写入其中Redo 日志信息会一直保留,直到用户主动删除;如果配置了归档日志空间上限,系统会自动删除最早生成的归档 Redo 日志文件,腾出空间。如果磁盘空间不足,且没有配置归档日志空间上限(或者配置的上限超过实际空间),系统将自动挂起,直到用户主动释放出足够的空间后继续运行。配置如下:

[ARCHIVE_REALTIME]
ARCH_TYPE        =  REALTIME #实时归档类型
ARCH_DEST        = RAC2 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE        = LOCAL #本地归档类型
ARCH_DEST        = /dm8/data/DAMENG/arch #本地归档文件存放路径
ARCH_FILE_SIZE   = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 500000 #单位 Mb,0 表示无限制,范围 1024~4294967294M

4.4 配置dmwatcher.ini #主备库配置一致

[GRP1]
DW_TYPE       =  GLOBAL #全局守护类型
DW_MODE       =  MANUAL # 手工切换 AUTO自动切换模式必须部署一个确认监视器
DW_ERROR_TIME    =  10 #远程守护进程故障认定时间
INST_RECOVER_TIME =  60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME  =  10 #本地实例故障认定时间
INST_OGUID     =  453332 #守护系统唯一 OGUID 值
INST_INI      =  /dm8/data/DAMENG/dm.ini #dm.ini配置文件路径
INST_AUTO_RESTART =  1 #打开实例的自动启动功能
INST_STARTUP_CMD  =  /dm8/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD =  0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD =  0 #指定备库重演日志的时间阀值,默认关闭

4.5 vim dmmonitor.ini #生产环境如果是自动切换需单独一台服务器配置监视器

MON_DW_Confirm    = 0  # 0表示普通监视器 ,最多配置8个,1 确认监视器模式
MON_LOG_PATH    = /dm8/data/log #监视器日志文件存放路径
MON_LOG_INTERVAL  = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE   = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT  = 0  #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID    = 453332 #组 GRP1 的唯一OGUID 值
#配置为监视器到组GRP1的守护进程的连接信息以―IP:PORT‖的形式配置
#IP对应dmmal.ini中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP     = 192.168.118.120:52141
MON_DW_IP     = 192.168.118.121:52141

5 以 Mount方式启动主备库

./dmserver /dm8/data/DAMENG/dm.ini mount

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

6 启动命令行工具 disql,登录主备库设置 OGUID 值和数据库模式。

6.1  主库

sp_set_oguid(453332);
alter database primary;

6.2 备库

sp_set_oguid(453332);
alter database standby;

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

./dmwatcher /dm8/data/DAMENG/dmwatcher.ini

8 启动监视器

./dmmonitor /dm8/data/DAMENG/dmmonitor.ini

docker 多个达梦集群 达梦数据库主备集群_docker 多个达梦集群

监视器提供一系列命令,支持当前守护系统状态查看以及故障处理,可输入help 命令查看各种命令说明使用,结合实际情况选择使用。至此一主一备的实时数据守护系统搭建完毕,在搭建步骤和各项配置都正确的情况下, 在监视器上执行 show 命令,可以监控到所有实例都处于 Open 状态,所有守护进程也都处于Open 状态,即为正常运行状态。

9 创建服务(root用户,安装目录script/root下,输入./dm_service_installer.sh -h查看帮助,过程略)

#如果是自动切换,一定要创建监视器服务并启动

创建成功之后,由于前面已经前台方式启动,以服务方式启动会报错,需要将前台服务关闭。关闭顺序如下

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

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

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

4.先关主库,后关备库(主库 Shutdown 过程中,需要 Purge 所有已提交事务,会修改数据,并产生 Redo 日志。如果先 Shutdown 备库,会导致主库发送归档日志失败,并且由于主库已经处于 Shutdown 状态,会导致主库异常关闭)

10  服务名配置

配置 DM 数据守护,一般要求配置连接服务名,以实现故障自动重连。连接服务名可以在 DM 提供的 JDBC、DPI 等接口中使用,连接数据库时指定连接服务名,接口会随机选择一个 IP 进行连接,如果连接不成功或者服务器状态不正确,则顺序获取下一个 IP 进行连接,直至连接成功或者遍历了所有 IP。可以通过编辑 dm_svc.conf 文件配置连接服务名。

dm_svc.conf 配置文件在 DM 安装时生成,Windows 平台下位于%SystemRoot%\system32 目录,Linux 平台下位于/etc 目录,详细配置见系统管理员手册

10.1 vim dm_svc.conf

dw_svc=(192.168.118.120:5236,192.168.118.121:5236)
LOGIN_MODE =(1)

JDBC连接串写法:#具体参考程序员手册

使用连接串:jdbc:dm://ip:port

使用服务名:jdbc:dm://服务名

类名为:dm.jdbc.driver.DmDriver

10.2 可直接字符串连接,无需在每个dm_svc.conf文件配置。
主备示例: url="jdbc:dm://dmconn?dmcnotallow=(192.168.10.11:5236,192.168.10.12:5236)&LOGIN_MODE=(1)";