服务器类别 | 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
参考单机安装
初始化前要确认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
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
初始化的实例必须先使用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/
登录dmdba账户,使用dmrman工具还原备库
su dmdba
#启动dmrman
dmrman
restore database '/dm/data/dmdb/dm.ini' from backupset '/dm/data/backup';
recover database '/dmdata/dmdb/dm.ini' from backupset '/dmdata/backup';
recover database '/dmdata/dmdb/dm.ini' update db_magic;
注意:
一定要先备份主库,再还原到备库中,不然后面的配置就算全做对了,也是会配置失败的!
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 |
v$dm_arch_ini
修改 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
[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。
[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
分别指向另一台实例名
v$dm_mal_ini
MAL 系统是**
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 是各实例对应的守护进程之间,以及守护进程和监视器之间的通信端口。
配置项 (一级) | 说明 |
---|---|
MAL_CHECK_INTERVAL | 检测线程检测间隔,缺省为30s,取值范围0~1800,单位秒,如果配置为0,则表示不进行链路检测 |
MAL_CONN_FAIL_INTERVAL | 检测线程认定链路断开的时间,缺省为10s,取值范围2~1800 |
🔴[MAL_INST1] | 实例配置,配置文件中可以配置多个[MAL_INST编号]其中有子参数,子参数参考下表 |
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 |
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时,如果内外网不通,则必须配置此参数;如果内外网互通,则可以不配 |
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
守护进程(dmwatcher)是 DM 数据守护系统不可或缺的核心部件,是数据库实例和监视器之间信息流转的桥梁。
守护进程必须和被守护的数据库实例部署在同一台机器上
在数据目录下新建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 | 守护类型,默认为LOCAL **LOCAL ** - 本地守护 REALTIME:实时主备 TIMELY:读写分离 MARCH:MPP主备 GLOBAL - 全局 |
DW_MODE | 切换模式,默认为MANUAL MANUAL - 故障手动切换模式 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会启动失败
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数据库。
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
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数据库。
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
由于主库和实时备库的守护进程配置为自动切换模式,因此这里必须配置确认监视器。和普通监视器相比,确认监视器除了相同的命令支持外,在主库发生故障时,能够自动通知实时备库接管为新的主库,具有自动故障处理的功能。
配置确认监视器时可以选择配置单实例监视器或配置多实例监视器,下面将分别介绍配置单实例监视器以及多实例监视器时dmmonitor.ini 配置文件中的配置信息。
修改 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 ##备机
为每个实例配置一个 dmmonitor.ini。众多 dmmonitor.ini 中,除 MON_ID 参数不同以外,其他参数应完全一致。
以其中一个实例的 dmmonitor.ini 为例进行介绍。各实例的 MON_ID 与 MON_INST_ID 应相同。dmmonitor.ini 配置文件中的内容如下:
启动各个主备库上的守护进程:
./dmwatcher /dm/data/dmdb/dmwatcher.ini
守护进程启动后,进入 Startup 状态,此时实例都处于 Mount 状态。守护进程开始广播自身和其监控实例的状态信息,结合自身信息和远程守护进程的广播信息,守护进程将本地实例 Open,并切换为 Open 状态。
多实例确认监视器系统中,需逐个单独启动各监视器。
启动监视器:
./dmmonitor /dm/data/dmdb/dmmonitor.ini
监视器提供一系列命令,支持当前守护系统状态查看以及故障处理,可输入 help 命令,查看各种命令使用说明,结合实际情况选择使用。
至此一主一备的实时数据守护系统搭建完毕,在搭建步骤和各项配置都正确的情况下,在监视器上执行 show 命令,可以监控到所有实例都处于 Open 状态,所有守护进程也都处于 Open 状态,即为正常运行状态。
$ disql SYSDBA/SYSDBA@192.168.100.30
SQL> create table test(id int);
SQL> insert into test values (1);
SQL> commit;
SQL> select * from test;
注册服务需使用 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