DM数据库主备集群部署
一、部署规划
主备集群作为最简单的高可用架构,顾名思义为主对外提供数据服务,备库作为备库,故障发生时可以进行数据库主备切换。而切换可分为自动切换和手动切换两种模式。下面介绍的是手动切换。
IP及机器规划:
主机名称 | 服务IP | 心跳IP | 数据库名称 | 数据库实例名称 |
---|---|---|---|---|
dm1 | 192.168.20.66 | 192.168.111.128 | DAMENG | dmdb1 |
dm2 | 192.168.20.67 | 192.168.111.129 | DAMENG | dmdb2 |
端口规划:
实例名称 | 实例端口 | MAL 系统监听 TCP 连接的端口 | 实例本地守护进程监听TCP端口 | 实例监听守护进程端口 |
---|---|---|---|---|
dmdb1 | 5236 | 7336 | 7436 | 7536 |
dmdb2 | 5236 | 7336 | 7436 | 7536 |
用户规划:
安装用户名 | 所属组 | 登录口令 |
---|---|---|
dmdba | dinstall | Test@dameng666 |
目录规划:
安装介质挂载目录 | /dmiso |
---|---|
数据库软件安装目录 | /home/dmdba/dmdbms |
数据库实例安装目录 | /dmdata/ |
归档日志存放路径 | /dmdata/arch |
备份文件存放路径 | /dmdata/dmbak/ |
二、数据库软件安装
2.1安装前操作系统设置(两台机器都要设置)
1.修改内核参数
`vi /etc/sysctl.conf`
添加以下内容
##DM##
fs.file-max = 6815744
fs.aio-max-nr = 1048576
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.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
kernel.core_pattern = /dmdata/core.%e.%p
vm.swappiness=10
vm.dirty_background_ratio = 0
vm.min_free_kbytes = 2097152
##DM##
执行以下参数生效
sysctl -p
2.修改用户资源限制
vim /etc/security/limits.conf
文件末尾添加如下内容:
##DM##
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
##DM##
修改完毕后重新登录dmdba用户执行以下命令查看是否生效
su - dmdba
ulimit -a
此外需要检查/etc/security/limits.d/目录下是否有其他限制资源的配置文件,如果有也需要修改。
Note:RHEL5, RHEL6使用90-nproc.conf ,而RHEL7使用 20-nproc.conf
dmdba soft nproc 65536
dmdba hard nproc 65536
参数使用限制:
1.data seg size
建议用户设置为 1048576(即 1GB)以上或 unlimited(无限制),此参数过小将导致数据库启动失败。
2. file size
建议用户设置为 unlimited(无限制),此参数过小将导致数据库安装或初始化失败。
3. open files
建议用户设置为 65536 以上或 unlimited(无限制)。
4.virtual memory
建议用户设置为 1048576(即 1GB)以上或 unlimited(无限制),此参数过小将导致数据库启动失败。
3.新建数据库管理用户和组
[root@dm1 ~]# groupadd dinstall -g 2001
[root@dm1 ~]# useradd -G dinstall -m -d /home/dmdba -s /bin/bash -u 2001 dmdba
4.修改 dmdba 用户密码
passwd dmdba
Test@dameng666
5.创建安装目录
[root@dm1 ~]# mkdir -p /dmiso /home/dmdba/dmdbms /dmdata/arch /dmdata/dmbak/
6.赋予目录权限
[root@dm1 ~]# chown -R dmdba:dinstall /home/dmdba/
[root@dm1 ~]# chown -R dmdba:dinstall /dmdata/
7.执行以下命令,修改 dmdba 用户环境变量
[root@dm1 limits.d]# vi /home/dmdba/.bash_profile
文件末尾添加如下内容:
export DM_HOME=/home/dmdba/dmdbms
export PATH=$PATH:$DM_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin
2.1数据库软件安装(两台机器都要安装)
1.解压iso的zip包
[root@dm1 ~]# unzip dm8_20230418_x86_rh6_64.zip
Archive: dm8_20230418_x86_rh6_64.zip
inflating: dm8_20230418_x86_rh6_64.iso_SHA256.txt
inflating: dm8_20230418_x86_rh6_64.iso
2.使用root用户挂载数据库软件的iso文件
[root@dm1 ~]# mount -o loop dm8_20230418_x86_rh6_64.iso /dmiso/
mount: /dev/loop0 写保护,将以只读方式挂载
3.使用dmdba用户安装软件
[root@dm1 ~]# su - dmdba
切换到 /dmiso 目录下
[dmdba@dm1 ~]$ cd /dmiso/
执行 DMInstall.bin 文件开始安装,选择 -i 参数以命令行方式安装。
./DMInstall.bin -i
选择安装程序的语言 c/C 为中文,e/E 为英文。
提示是否安装 key 文件,输入 N 跳过。
选择时区,21 即东 8 区。
选择安装类型,默认典型安装(包含所有内容)。
选择软件安装目录,默认/home/dmdba/dmdbms
2023-06-20 16:09:06
[INFO] 安装 基础 模块...
2023-06-20 16:09:06
[INFO] 安装达梦数据库...
2023-06-20 16:10:11
[INFO] 安装 服务器 模块...
2023-06-20 16:10:17
[INFO] 安装 客户端 模块...
2023-06-20 16:11:02
[INFO] 安装 驱动 模块...
2023-06-20 16:11:18
[INFO] 安装 手册 模块...
2023-06-20 16:11:19
[INFO] 安装 服务 模块...
2023-06-20 16:11:19
[INFO] 移动日志文件。
2023-06-20 16:11:20
[INFO] 安装达梦数据库完成。
4.以root系统用户执行命令
/home/dmdba/dmdbms/script/root/root_installer.sh
至此两台机器的DM8数据库已经安装完成,随后进行数据库实例的初始化
三、主备集群配置
3.1初始化实例
2台机器都需要完成实例的初始化
dm1上切换至dmdba用户执行以下命令:
su - dmdba
dminit path=/dmdata page_size=32 extent_size=32 charset=1 log_size=2048 db_name=DAMENG instance_name=dmdb1
dm2上切换至dmdba用户执行以下命令:
su - dmdba
dminit path=/dmdata page_size=32 extent_size=32 charset=1 log_size=2048 db_name=DAMENG instance_name=dmdb2
以主机dm1为主库,启动实例
dmserver /dmdata/DAMENG/dm.ini
出现system is ready后输入exit停止数据库。
3.2脱机备份数据库
使用ps命令确认主库 dmap 服务已启动
ps -ef|grep dmap
)(C:\Users\刘文瑞\AppData\Roaming\Typora\typora-user-images\image-20230621102017117.png)]
若未启动,切换至dmdba用户,跳转到安装目录的bin目录下执行下面命令:
./DmAPService start
切换至dmdba用户 启动dmrman工具
dmrman use_ap=2
执行 backup 全库:
backup database '/dmdata/DAMENG/dm.ini' backupset '/home/dmdba/bakfull';
退出dmrman工具
exit
3.3备份还原备库
将备份的文件/home/dmdba/bakfull拷贝到备库服务器上。
scp -r bakfull/ dmdba@192.168.20.67:/home/dmdba/
在主机dm2上,同样要检查dmap服务是否启动,参考dm1步骤。
使用 dmrman 工具还原备库,dmdba 用户执行:
dmrman
进入dmrman工具交互界面
执行 restore:
restore database '/dmdata/DAMENG/dm.ini' from backupset '/home/dmdba/bakfull';
完成后执行 recover:
recover database '/dmdata/DAMENG/dm.ini' from backupset '/home/dmdba/bakfull';
最后执行 recover update db_magic
recover database '/dmdata/DAMENG/dm.ini' update db_magic;
退出dmrman工具
exit
检查数据一致性
以 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.4修改dm.ini参数
两个实例都需要修改
vi /dmdata/DAMENG/dm.ini
主库dmdb1上修改以下参数值:
INSTANCE_NAME = DMDB1
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
备库dmdb2上修改以下参数值:
INSTANCE_NAME = DMDB2
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
3.5配置归档配置文件dmarch.ini
在安装实例的目录下创建文件dmarch.ini
vi /dmdata/DAMENG/dmarch.ini
主库dmdb1上添加以下内容:
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = DMDB2
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
备库dmdb2上添加以下内容:
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = DMDB1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
3.6配置MAL系统配置文件dmmal.ini
在实例安装目录下新建文件 dmmal.ini,执行以下命令。
vi /dmdata/DAMENG/dmmal.ini
主备库2个节点文件内容要相同
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 15
[MAL_INST1]
MAL_INST_NAME = DMDB1
MAL_HOST = 192.168.111.128
MAL_PORT = 7336
MAL_INST_HOST = 192.168.20.66
MAL_INST_PORT = 5236
MAL_DW_PORT = 7436
MAL_INST_DW_PORT = 7536
[MAL_INST2]
MAL_INST_NAME = DMDB2
MAL_HOST = 192.168.111.129
MAL_PORT = 7336
MAL_INST_HOST = 192.168.20.67
MAL_INST_PORT = 5236
MAL_DW_PORT = 7436
MAL_INST_DW_PORT = 7536
3.7配置守护进程配置文件dmwatcher.ini
在实例目录下新建文件 dmwatcher.ini
vi /dmdata/DAMENG/dmwatcher.ini
主备库2节点文件内容要相同
[GRP_DW]
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 30
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 20
INST_OGUID = 453331
INST_INI = /dmdata/DAMENG/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
以 mount 方式启动数据库实例
使用 dmdba 用户,执行以下命令(主备库都执行):
dmserver /dmdata/DAMENG/dm.ini mount
在新的终端使用 disql 工具连接数据库:
./disql SYSDBA/SYSDBA
主备库都修改 oguid,执行以下命令:
sp_set_oguid(453331);
主库dmdb1上修改数据库模式为 primary,执行以下命令:
alter database primary;
备库dmdb2上修改数据库模式为 standby,执行以下命令:
alter database standby;
启动守护进程
dmdba 用户下,到数据库安装目录的 bin 下执行以下命令(主备库都执行)
dmwatcher /dmdata/DAMENG/dmwatcher.ini
守护进程启动后,会将 Mount 的实例 Open。
3.8配置监视器进程配置文件dmmonitor.ini
因为我们这里部署的是dm数据库手动切换模式的主备库,所以该监视器可以在任意节点部署,但在守护进程配置为自动切换时,必须配置确认监视器。在主备服务器以外的服务器上(需安装有 DM 数据库软件,且与主备心跳网络端口开放)。
新建确认监视器配置文件,我们这里在dmdb1实例所在的dm1机器上配置
vi /dmdata/DAMENG/dmmonitor.ini
添加以下内容:
说明:具体配置时,请把#和#之后的中文内容删除。
MON_DW_CONFIRM = 0 #普通监视器模式
MON_LOG_PATH = /home/dmdba/dmdbms/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60 s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 200 #每个日志文件最大 32 MB
MON_LOG_SPACE_LIMIT = 1024 #不限定日志文件总占用空间
[GRP_DW]
MON_INST_OGUID = 453331 #组 GRP_DW 的唯一 OGUID 值
\#以下配置为监视器到组 GRP_DW 的守护进程的连接信息,以“IP:PORT”的形式配置
\#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.111.128:7436
MON_DW_IP = 192.168.111.129:7436
执行以下命令,启动监视器。
dmmonitor /dmdata//DAMENG/dmmonitor.ini
启动后输入 show 命令查看集群状态,这里稍后会进行验证在展示操作。
3.9配置SQL日志
配置sql日志,主要记录慢sql和错误sql日志
所有节点修改sqllog.ini
vi /dmdata//DAMENG/sqllog.ini
BUF_TOTAL_SIZE = 10240
BUF_SIZE = 1024
BUF_KEEP_CNT = 6
[SLOG_ALL]
FILE_PATH = ../log
PART_STOR = 1
SWITCH_MODE = 2
SWITCH_LIMIT = 512
ASYNC_FLUSH = 1
FILE_NUM = 5
ITEMS = 0
SQL_TRACE_MASK = 2:3:25
MIN_EXEC_TIME = 1500
USER_MODE = 0
USERS =
3.10注册服务
以上启动为前台方式启动,仅用户搭建过程中验证配置。配置没问题后需要将实例,守护进程和确认监视器注册为系统服务。
使用 root 用户,到数据库安装目录的script/root下。
注册守护进程服务(主备库都执行):
./dm_service_installer.sh -t dmwatcher -p dw -watcher_ini /dmdata/DAMENG/dmwatcher.ini
注册数据库实例服务(主备库都执行):
./dm_service_installer.sh -t dmserver -p dmdb -dm_ini /dmdata/DAMENG/dm.ini
以服务方式启动
执行以下命令,启动数据库实例:
systemctl start DmServicedmdb
执行以下命令,启动守护进程:
systemctl start DmWatcherServicedw
三、验证主备同步状态
切换至dmdba用户执行以下命令,启动监视器:(我们这里装在dm1机器上了所以在dm1上操作)
./dmmonitor /dmdata/dmdb/dmmonitor.ini
其中守护进程状态 WSTATUS 为 OPEN,实例状态 ISTATUS 为 OPEN,归档类型 RTYPE 为 REALTIME,归档状态 RSTAT 为VALID
disql 登陆主库,建表验证
disql SYSDBA/SYSDBA
SQL 提示符下执行以下命令:
create table test(id int);
insert into test values (1);
commit;
使用 disql 客户端登录备库,查询测试表验证,执行以下命令:
disql SYSDBA/SYSDBA
SQL 提示符下执行以下命令:
select * from test;
查看数据是否正常同步。
四、主备集群部署过程(自动切换)
守护进程配置为自动切换时,必须配置确认监视器。在主备服务器以外的服务器上(需安装有 DM 数据库软件,且与主备心跳网络端口开放)。
在实例目录下新建文件 dmwatcher.ini,执行以下命令:
vi /dmdata/DAMENG/dmwatcher.ini
主备库2节点文件内容要相同。
DW_MODE改为自动切换模式
[GR_DW] DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 30
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 20
INST_OGUID = 453331
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
启动监视器(在主备之外节点配置)
守护进程配置为自动切换时,必须配置确认监视器。在主备服务器以外的服务器上(需安装有 DM 数据库软件,且与主备机器心跳网络端口开放)。
新建确认监视器配置文件 dmmonitor.ini,执行以下命令:
vi /dmdata/DAMENG/dmmonitor.ini
添加以下内容:
MON_DW_CONFIRM = 1
MON_LOG_PATH = /home/dmdba/dmdbms/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 200
MBMON_LOG_SPACE_LIMIT = 1024
[GRP_DW]
MON_INST_OGUID = 453331
MON_DW_IP = 192.168.111.128:7436
MON_DW_IP = 192.168.111.129:7436
注册监视器服务:
使用 root 用户,到数据库安装目录的script/root下。
注册守护进程服务(主备库都执行)。
./dm_service_installer.sh -t dmmonitor -p dw -monitor_ini /dmdata/dmdb/dmmonitor.ini
以服务方式启动监视器服务
执行以下命令,启动数据库实例:
systemctl start DmMonitorServicedw
达梦数据库社区地址:https://eco.dameng.com