DM8数据库主备高可用配置
DM8数据库主备高可用配置
一、部署规划
IP规划:
|
主机名 |
服务ip |
心跳ip |
数据库名 |
实例名 |
备注 |
|
DM1 |
192.168.3.4 |
192.168.3.8 |
GRP1_RT_01 |
GRP1_RT_01 |
主库 |
|
DM2 |
192.168.3.5 |
192.168.3.9 |
GRP1_RT_02 |
GRP1_RT_02 |
备库 |
|
DM3 |
192.168.3.6 |
|
|
|
确认监视器 |
端口规划:
|
实例名 |
实例端口 |
MAL 系统监听 TCP 连接的端口 |
实例本地的守护进程监听 TCP 连接的端口 |
实例监听守护进程 TCP 连接的端口 |
|
GRP1_RT_01 |
32141 |
61141 |
52141 |
33141 |
|
GRP1_RT_02 |
32142 |
61141 |
52141 |
33141 |
二、数据库软件安装
注:主备数据库节点和确认监视器安装节点,都需要安装数据库软件。
2.1 操作系统配置
2.1.1 操作系统用户创建
groupadd -g 12349 dinstall
useradd -u 12345 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
passwd dmdba
2.1.2 修改操作系统用户变量
使用dmdba用户执行以下命令:
vi .bash_profile
添加如下内容:
export DM_HOME=/dm/dmdbms
export PATH=$PATH:$DM_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin
变量生效:
[dmdba@DM1 ~]$ source .bash_profile
2.1.3 修改操作系统用户资源限制
使用root用户执行以下命令:
vi /etc/security/limits.conf
添加如下内容:
dmdba soft nice 0
dmdba hard nice 0
dmdba soft as unlimited
dmdba hard as unlimited
dmdba soft fsize unlimited
dmdba hard fsize unlimited
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft data unlimited
dmdba hard data unlimited
2.1.4 修改操作系统参数
使用root用户执行以下命令:
vi /etc/sysctl.conf
添加如下内容:
fs.file-max = 6815744
fs.aio-max-nr = 1048576
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
vm.swappiness = 0
vm.dirty_background_ratio = 3
vm.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
kernel.core_pattern=/coredump/%e.core.%p
参数生效:
sysctl -p
2.1.5 安装目录创建
使用root用户执行以下命令:
mkdir -p /dm/dmdbms
chown -R dmdba:dinstall /dm
2.2 数据库软件安装
2.2.1 解压软件包
使用root用户执行以下命令:
unzip dm8_20210630_x86_rh6_64_ent.zip
chown dmdba:dinstall DM*
2.2.2 数据库软件安装
注:因主备库配置为自动切换模式,所以需要配置确认监视器。
主备节点和监视器节点都需安装数据库软件
使用dmdba用户执行以下命令:
./DMInstall.bin -i
Please select the installer's language (E/e:English C/c:Chinese) [E/e]:c
解压安装程序..........
欢迎使用达梦数据库安装程序
是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:n
是否设置时区? (Y/y:是 N/n:否) [Y/y]:y
设置时区:
[ 1]: GTM-12=日界线西
[ 2]: GTM-11=萨摩亚群岛
[ 3]: GTM-10=夏威夷
[ 4]: GTM-09=阿拉斯加
[ 5]: GTM-08=太平洋时间(美国和加拿大)
[ 6]: GTM-07=亚利桑那
[ 7]: GTM-06=中部时间(美国和加拿大)
[ 8]: GTM-05=东部部时间(美国和加拿大)
[ 9]: GTM-04=大西洋时间(美国和加拿大)
[10]: GTM-03=巴西利亚
[11]: GTM-02=中大西洋
[12]: GTM-01=亚速尔群岛
[13]: GTM=格林威治标准时间
[14]: GTM+01=萨拉热窝
[15]: GTM+02=开罗
[16]: GTM+03=莫斯科
[17]: GTM+04=阿布扎比
[18]: GTM+05=伊斯兰堡
[19]: GTM+06=达卡
[20]: GTM+07=曼谷,河内
[21]: GTM+08=中国标准时间
[22]: GTM+09=汉城
[23]: GTM+10=关岛
[24]: GTM+11=所罗门群岛
[25]: GTM+12=斐济
[26]: GTM+13=努库阿勒法
[27]: GTM+14=基里巴斯
请选择设置时区 [21]:21
安装类型:
1 典型安装
2 服务器
3 客户端
4 自定义
请选择安装类型的数字序号 [1 典型安装]:1
所需空间: 1178M
请选择安装目录 [/home/dmdba/dmdbms]:/dm/dmdbms
可用空间: 36G
是否确认安装路径(/dm/dmdbms)? (Y/y:是 N/n:否) [Y/y]:y
安装前小结
安装位置: /dm/dmdbms
所需空间: 1178M
可用空间: 36G
版本信息:
有效日期:
安装类型: 典型安装
是否确认安装? (Y/y:是 N/n:否):y
2021-10-07 18:11:25
[INFO] 安装达梦数据库...
2021-10-07 18:11:25
[INFO] 安装 基础 模块...
2021-10-07 18:12:10
[INFO] 安装 服务器 模块...
2021-10-07 18:12:11
[INFO] 安装 客户端 模块...
2021-10-07 18:12:19
[INFO] 安装 驱动 模块...
2021-10-07 18:12:21
[INFO] 安装 手册 模块...
2021-10-07 18:12:23
[INFO] 安装 服务 模块...
2021-10-07 18:12:24
[INFO] 移动日志文件。
2021-10-07 18:12:24
[INFO] 安装达梦数据库完成。
请以root系统用户执行命令:
/dm/dmdbms/script/root/root_installer.sh
安装结束
三、主备集群配置
3.1 创建数据库实例
注:主备2个节点都需创建数据库实例
以dmdba用户执行如下操作命令:
[dmdba@DM1 ~]$ dminit
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2022-06-28
input system dir: /dm/dmdbms/data
input db name: GRP1_RT_01
input port num: 32141
input page size(4, 8, 16, 32): 32
input extent size(16, 32, 64): 16
input sec priv mode(0, 1, 2): 0
input time zone(-12:59,+14:00): +8:00
string case sensitive? ([Y]es, [N]o): y
which charset to use? (0[GB18030], 1[UTF-8], 2[EUC-KR]): 0
length in char? ([Y]es, [N]o): n
enable database encrypt? ([Y]es, [N]o): n
input slice size(0, 512, 4096): 4096
page check mode? (0/1/2): 0
input elog path: /dm/dmdbms/data/
only create huge table with delta? (0/1): 1
rlog generate for huge? (0/1): 1
pseg_mgr_flag (0/1): 0
auto_overwrite mode? (0/1/2): 1
CHARACTER type fixed storage ? ([Y]es/1, [N]o/0): y
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
log file path: /dm/dmdbms/data/GRP1_RT_01/GRP1_RT_0101.log
log file path: /dm/dmdbms/data/GRP1_RT_01/GRP1_RT_0102.log
write to dir [/dm/dmdbms/data/GRP1_RT_01].
3.2 启停主库
使用dmdba用户执行以下命令:
dmserver /dmdata/data/DAMENG/dm.ini
出现system is ready后ctrl +c停止数据库。
3.3 脱机备份主库
使用dmdba用户执行以下命令:
[dmdba@DM1 bak]$ dmrman CTLSTMT="BACKUP DATABASE '/dm/dmdbms/data/GRP1_RT_01/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dm/dmdbms/data/bak/BACKUP_FILE_01'"
dmrman V8
BACKUP DATABASE '/dm/dmdbms/data/GRP1_RT_01/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dm/dmdbms/data/bak/BACKUP_FILE_01'
file dm.key not found, use default license!
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[23437], file_lsn[23437]
Processing backupset /dm/dmdbms/data/bak/BACKUP_FILE_01
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00]
backup successfully!
time used: 00:00:01.286
3.4 脱机还原备库
使用dmdba用户执行以下命令:
拷贝主库备份文件至备库:
zip -r BACKUP_FILE_01.zip BACKUP_FILE_01
scp BACKUP_FILE_01.zip dmdba@192.168.3.5:/dm/dmdbms/data/bak
3.4.1 数据还原
使用dmdba用户执行以下命令:
dmrman CTLSTMT="RESTORE DATABASE '/dm/dmdbms/data/GRP1_RT_02/dm.ini' FROM BACKUPSET '/dm/dmdbms/data/bak/BACKUP_FILE_01'"
3.4.2 数据库更新
使用dmdba用户执行以下命令:
dmrman CTLSTMT="RECOVER DATABASE '/dm/dmdbms/data/GRP1_RT_02/dm.ini' UPDATE DB_MAGIC"
3.5 配置dm.ini
主库:
使用dmdba用户执行以下命令:
vi dm.ini
修改如下内容:
INSTANCE_NAME = GRP1_RT_01
PORT_NUM = 32141
DW_INACTIVE_INTERVAL = 60
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
RLOG_SEND_APPLY_MON = 64
备库:
使用dmdba用户执行以下命令:
vi dm.ini
修改如下内容:
INSTANCE_NAME = GRP1_RT_02
PORT_NUM = 32142
DW_INACTIVE_INTERVAL = 60
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
RLOG_SEND_APPLY_MON = 64
3.6 配置dmmal.ini
注:在dm.ini文件同级目录下创建dmmal.ini
主库:
vi dmmal.ini
添加如下内容:
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01
MAL_HOST = 192.168.3.8
MAL_PORT = 61141
MAL_INST_HOST = 192.168.3.4
MAL_INST_PORT = 32141
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 33141
[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 192.168.3.9
MAL_PORT = 61142
MAL_INST_HOST = 192.168.3.5
MAL_INST_PORT = 32142
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
备库:
vi dmmal.ini
添加如下内容:
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01
MAL_HOST = 192.168.3.8
MAL_PORT = 61141
MAL_INST_HOST = 192.168.3.4
MAL_INST_PORT = 32141
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 33141
[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 192.168.3.9
MAL_PORT = 61142
MAL_INST_HOST = 192.168.3.5
MAL_INST_PORT = 32142
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
3.7 配置dmarch.ini
注:在dm.ini同级目录下,创建dmarch.ini
主库:
vi dmarch.ini
添加如下内容:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RT_02
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/dmdbms/data/GRP1_RT_01/arch
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 0
备库:
vi dmarch.ini
添加如下内容:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RT_01
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/dmdbms/data/GRP1_RT_02/arch
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 0
3.8 配置dmwatcher.ini
注:在dm.ini同级目录下,创建dmwatcher.ini。
主库:
vi dmwatcher.ini
添加如下内容:
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453331
INST_INI = /dm/dmdbms/data/GRP1_RT_01/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD =/dm/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
备库:
vi dmwatcher.ini
添加如下内容:
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453331
INST_INI = /dm/dmdbms/data/GRP1_RT_02/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /dm/dmdbms/bin/dmserver
RLOG_APPLY_THRESHOLD = 0
3.9 启动主备库到mount状态
主库:
使用dmdba用户执行以下命令:
dmserver /dm/dmdbms/data/GRP1_RT_01/dm.ini mount
备库:
使用dmdba用户执行以下命令:
dmserver /dm/dmdbms/data/GRP1_RT_02/dm.ini mount
3.10 设置OGUID
主库:
使用dmdba用户执行以下命令:
[dmdba@DM1 bin]$ disql sysdba/SYSDBA@127.0.0.1:32141
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(453331);
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
备库:
使用dmdba用户执行以下命令:
disql sysdba/SYSDBA@127.0.0.1:32142
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(453331);
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
3.11 修改数据库模式
主库:
使用dmdba用户执行以下命令:
disql sysdba/SYSDBA@127.0.0.1:32141
SQL>alter database primary;
备库:
使用dmdba用户执行以下命令:
disql sysdba/SYSDBA@127.0.0.1:32142
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>alter database standby;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
3.12 配置确认监视器
注:因为主备库配置为自动切换模式,所以需要配置确认监视器
在DM3服务器的/dm/data目录下创建dmmonitor.ini。
添加如下内容:
MON_DW_CONFIRM = 1
MON_LOG_PATH = /dm/data/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP1]
MON_INST_OGUID = 453331
MON_DW_IP = 192.168.3.8:52141
MON_DW_IP = 192.168.3.9:52142
3.13 注册数据库服务
注:主备库都执行
使用root用户执行以下命令:
./dm_service_installer.sh -t dmwatcher -p GRP1_RT_01 -watcher_ini /dm/dmdbms/data/GRP1_RT_01/dmwatcher.ini
./dm_service_installer.sh -t dmwatcher -p GRP1_RT_02 -watcher_ini /dm/dmdbms/data/GRP1_RT_02/dmwatcher.ini
./dm_service_installer.sh -t dmserver -p GRP1_RT_01 -dm_ini /dm/dmdbms/data/GRP1_RT_01/dm.ini
./dm_service_installer.sh -t dmserver -p GRP1_RT_02 -dm_ini /dm/dmdbms/data/GRP1_RT_02/dm.ini
3.14 启用户数据库实例服务
主库:
使用root用户执行以下命令:
systemctl enable DmServiceGRP1_RT_01.service
备库:
使用root用户执行以下命令:
systemctl enable DmServiceGRP1_RT_02.service
3.15 启动守护进程
主库:
使用root用户执行以下命令:
systemctl enable DmWatcherServiceGRP1_RT_01.service
systemctl start DmWatcherServiceGRP1_RT_01.service
systemctl status DmWatcherServiceGRP1_RT_01.service
备库:
使用root用户执行以下命令:
systemctl enable DmWatcherServiceGRP1_RT_02.service
systemctl start DmWatcherServiceGRP1_RT_02.service
systemctl status DmWatcherServiceGRP1_RT_02.service
3.16 启动监视器
使用dmdba用户执行以下命令:
dmmonitor /dm/data/dmmonitor.ini
3.17 验证集群主备同步状态
主库:
使用dmdba执行以下命令:
[dmdba@DM1 ~]$ disql test/test12345@127.0.0.1:32141
服务器[127.0.0.1:32141]:处于主库打开状态
登录使用时间 : 1.424(ms)
disql V8
SQL> create table t(id int);
操作已执行
已用时间: 68.245(毫秒). 执行号:500.
SQL> insert into t values(5);
影响行数 1
已用时间: 2.113(毫秒). 执行号:501.
SQL> commit;
操作已执行
已用时间: 2.601(毫秒). 执行号:502.
备库:
SQL> conn test/test12345@127.0.0.1:32142
服务器[127.0.0.1:32142]:处于备库打开状态
登录使用时间 : 3.957(ms)
SQL> select * from t;
行号 ID
---------- -----------
1 5
已用时间: 11.039(毫秒). 执行号:100.
主库插入的数据,在备库中可正常查询,证实集群主备同步状态正常。
四、数据库参数调整
执行参数优化脚本,优化数据库参数。
五、重启数据库实例
(1) 若为第一次关闭数据库实例,执行以下操作:
使用root用户执行以下命令:
关闭主库守护进程:systemctl stop DmWatcherServiceGRP1_RT_01.service
关闭备库守护进程:systemctl stop DmWatcherServiceGRP1_RT_02.service
关闭主、备库数据库实例:
使用dmdba用户执行以下操作:
在system is ready界面,按ctrl +c停止数据库。
启动主库实例:systemctl start DmServiceGRP1_RT_01.service
启动备库实例:systemctl start DmServiceGRP1_RT_02.service
启动主库守护进程:systemctl start DmWatcherServiceGRP1_RT_01.service
启动备库守护进程:systemctl start DmWatcherServiceGRP1_RT_02.service
(2) 若为第二次关闭数据库实例,执行以下操作
使用root用户执行以下命令:
关闭主库守护进程:systemctl stop DmWatcherServiceGRP1_RT_01.service
关闭备库守护进程:systemctl stop DmWatcherServiceGRP1_RT_02.service
关闭主库实例:systemctl stop DmServiceGRP1_RT_01.service
关闭备库实例:systemctl stop DmServiceGRP1_RT_02.service
启动主库实例:systemctl start DmServiceGRP1_RT_01.service
启动备库实例:systemctl start DmServiceGRP1_RT_02.service
启动主库守护进程:systemctl start DmWatcherServiceGRP1_RT_01.service
启动备库守护进程:systemctl start DmWatcherServiceGRP1_RT_02.service
想要获取达梦数据库更多的学习资料,可登陆达梦数据云适配中心(https://eco.dameng.com/)获取。

浙公网安备 33010602011771号