本次部署实时主备,一主一备,对于部分性能参数均采用默认值;通过主库备份还原方式同步各数据库的数据,确保各数据库的数据保持完全一致,不能使用分别初始化库或者直接拷贝数据文件的方法来直接配置数据库守护
安装目录:/home/dmdba/dmdbms
实例目录:/home/dmdba/dmdata/DAMENG/
归档目录:/home/dmdba/dmdata/DAMENG/arch
备份目录:/home/dmdba/dmdata/DAMENG/bak
达梦数据库:dm8(x86 redhat版)
操作系统:red hat 7.3
配置项 | 节点1(primary) | 节点2(standby) |
---|---|---|
实例名 | dmserver1 | dmserver2 |
ip地址 | 192.168.171.174 | 192.168.171.175 |
数据库端口 | 5236 | 5236 |
MAL端口 | 5336 | 5336 |
MAL守护进程端口 | 5436 | 5436 |
守护进程端口 | 5536 | 5536 |
守护组 | dmgroup | dmgroup |
OGUID | 123456 | 123456 |
记得先关闭防火墙功能
一.单机软件部署
创建用户
dm1/dm2
1.创建用户组dinstall
groupadd dinstall
2.创建安装用户dmdba
useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
初始化安装用户密码(执行命令后输出密码)
passwd dmdba
创建安装程序临时目录
mkdir -p /data/dm/
临时目录所有者及所属组变更
chown -R dmdba.dinstall /data/dm
临时目录权限设置
chmod -R 664 /data/dm
iso挂载
dm1/dm2
1.创建挂载目录
mkdir /data/dm/mnt
2.挂载iosmount -o loop /data/dm/dm8_20231116_x86_rh6_64.iso /data/dm/mnt
3.修改配置vi /etc/security/limits.conf
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft nproc 65535
dmdba hard nproc 65535
数据库软件安装
dm1/dm2
1.进入挂载目录
cd /data/dm/mnt
2.切换用户安装su dmdba
3.执行安装./DMInstall.bin -i
安装完毕root用户执行.sh命令
/home/dmdba/dmdbms/script/root/root_installer.sh
二.主备配置
1.主库配置
初始化数据库
/home/dmdba/dmdbms/bin/dminit PATH=/home/dmdba/dmdata INSTANCE_NAME=dmserver1 PAGE_SIZE=32
通过前台方式启动数据库,并保持界面
/home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdata/DAMENG/dm.ini
新开启一个终端,进入disql客户端配置归档模式
$ /home/dmdba/dmdbms/bin/disql SYSDBA/SYSDBA
SQL> ALTER DATABASE MOUNT;
# 开启归档配置
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/home/dmdba/dmdata/DAMENG/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';
SQL> ALTER DATABASE OPEN;
# 备份数据
SQL> BACKUP DATABASE BACKUPSET '/home/dmdba/dmdata/DAMENG/bak/';
# 修改dm.ini配置参数
SQL> SP_SET_PARA_VALUE (2,'PORT_NUM',5236);
SQL> SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);
SQL> SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);
SQL> SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);
SQL> SP_SET_PARA_VALUE (2,'MAL_INI',1);
SQL> SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);
回到数据库前台启动页面,通过 ctrl+c 关闭实例服务
配置文件
cd /home/dmdba/dmdata/DAMENG/
touch dmarch.ini dmmal.ini dmwatcher.ini
dmarch.ini 配置参数
#DaMeng Database Archive Configuration file
#this is comments
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dmdata/DAMENG/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
ARCH_FLUSH_BUF_SIZE = 0
ARCH_HANG_FLAG = 1
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = dmserver2 #实时归档目标实例名
dmmal.ini配置参数
MAL_CHECK_INTERVAL = 10 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间
MAL_TEMP_PATH = /home/dmdba/damdata/DAMENG/temp #临时文件目录
MAL_BUF_SIZE = 512 #单个 MAL 缓存大小,单位 MB
MAL_SYS_BUF_SIZE = 2048 #MAL 总大小限制,单位 MB
MAL_COMPRESS_LEVEL = 0 #MAL 消息压缩等级,0 表示不压缩
# 本次部署只有两个节点,如果有其他节点需要在下方添加新的实例信息(模版一致,改下实例名和ip即可)
[MAL_INST1]
MAL_INST_NAME = dmserver1 #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST = 192.168.171.174 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.171.174 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = dmserver2
MAL_HOST = 192.168.171.175
MAL_PORT = 5336
MAL_INST_HOST = 192.168.171.175
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
dmwatcher.ini配置参数
[dmgroup]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = MANUAL #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME = 20 #远程守护进程故障认定时间
INST_ERROR_TIME = 20 #本地实例故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_OGUID = 123456 #守护系统唯一 OGUID 值
INST_INI = /home/dmdba/dmdata/DAMENG/dm.ini #dm.ini 文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
注册服务
此步骤的执行需要以 root 用户进行
这里注册服务设置数据库以 mount 状态启动,由守护进程去调整数据库的状态
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p dmserver1 -dm_ini /home/dmdba/dmdata/DAMENG/dm.ini -m mount
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /home/dmdba/dmdata/DAMENG/dmwatcher.ini
2.备库配置
初始化数据库
/home/dmdba/dmdbms/bin/dminit PATH=/home/dmdba/dmdata INSTANCE_NAME=dmserver2 PAGE_SIZE=32
数据恢复
将前面主库备份的数据拷贝到备库;备库先创建bak/arch目录
# 通过scp拷贝文件
scp -r dmdba@192.168.171.175:/home/dmdba/dmdata/DAMENG/bak/* /home/dmdba/dmdata/DAMENG/bak/scp -r dmdba@192.168.171.175:/home/dmdba/dmdata/DAMENG/arch/* /home/dmdba/dmdata/DAMENG/arch/
通过dmrman 恢复备库
/home/dmdba/dmdbms/bin/dmrman CTLSTMT="RESTORE DATABASE '/home/dmdba/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/dmdata/DAMENG/bak'"
/home/dmdba/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/home/dmdba/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/dmdata/DAMENG/bak'"
/home/dmdba/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/home/dmdba/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC"
在/home/dmdba/dmdata/DAMENG/下配置 dmmal.ini 和 dmwatcher.ini 文件,配置与主库 相同
修改备库 dm.ini文件
INSTANCE_NAME = dmserver2
PORT_NUM = 5236 #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志重演信息
注册服务
此步骤的执行需要以 root 用户进行
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p dmserver2 -dm_ini /home/dmdba/dmdata/DAMENG/dm.ini -m mount
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /home/dmdba/dmdata/DAMENG/dmwatcher.ini
配置监视器(主库)
把监视器配置在主库;
vi /home/dmdba/dmdbms/bin/dmmonitor.ini
[dmgroup]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = MANUAL #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME = 20 #远程守护进程故障认定时间
INST_ERROR_TIME = 20 #本地实例故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_OGUID = 123456 #守护系统唯一 OGUID 值
INST_INI = /home/dmdba/dmdata/DAMENG/dm.ini #dm.ini 文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
[dmdba@dm DAMENG]$ cat /home/dmdba/dmdbms/bin/dmmonitor.ini
MON_DW_CONFIRM = 1 #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH = ../log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 512 #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT = 2048 #日志上限,单位 MB
[dmgroup]
MON_INST_OGUID = 123456 #组 dmgroup 的唯一 OGUID 值
MON_DW_IP = 192.168.171.174:5436 #机器A的ip:port,要替换成实际机器ip 端口
MON_DW_IP = 192.168.171.175:5436 #机器B的ip:port,要替换成实际机器ip 端口
也可以额外配置一份非确认监视器文件(官方建议执行此步骤),与确认监视器的配置文件大体相同,仅需把 MON_DW_CONFIRM 参数设置为0即可,后续用户可通过非确认监视器在集群正常的情况下手动进行主备切换,所以我又单独配置了一份非默认监视器文件dmmonitor_manual.ini(记得给+x执行权限)
[dmdba@dm DAMENG]$ cat /home/dmdba/dmdbms/bin/dmmonitor.ini
MON_DW_CONFIRM = 0 #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH = ../log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 512 #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT = 2048 #日志上限,单位 MB
[dmgroup]
MON_INST_OGUID = 123456 #组 dmgroup 的唯一 OGUID 值
MON_DW_IP = 192.168.171.174:5436 #机器A的ip:port,要替换成实际机器ip 端口
MON_DW_IP = 192.168.171.175:5436 #机器B的ip:port,要替换成实际机器ip 端口
------------------------------------------------------------------------------------------------------
[dmdba@dm DAMENG]$ cat /home/dmdba/dmdbms/bin/dmmonitor_manual.ini
MON_DW_CONFIRM = 0 #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH = ../log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 512 #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT = 2048 #日志上限,单位 MB
[dmgroup]
MON_INST_OGUID = 123456 #组 dmgroup 的唯一 OGUID 值
MON_DW_IP = 192.168.171.174:5436 #机器A的ip:port,要替换成实际机器ip 端口
MON_DW_IP = 192.168.171.175:5436 #机器B的ip:port,要替换成实际机器ip 端口
注册服务
此步骤的执行需要以 root 用户进行
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /home/dmdba/dmdbms/bin/dmmonitor.ini
启动集群
# 主库dmserver1
$ /home/dmdba/dmdbms/bin/DmServicedmserver1 start
$ /home/dmdba/dmdbms/bin/disql SYSDBA/SYSDBA
SQL> SP_SET_OGUID(123456);
SQL> ALTER DATABASE PRIMARY;
# 备库dmserver2
$ /home/dmdba/dmdbms/bin/DmServicedmserver2 start
$ /home/dmdba/dmdbms/bin/disql SYSDBA/SYSDBA
SQL> SP_SET_OGUID(123456);
SQL> ALTER DATABASE STANDBY;
# 分别在主库dmserver1 和备库dmserver2 上开启守护进程
/home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start
# 后台启动监视器(本次部署在主库dmserver1)
/home/dmdba/dmdbms/bin/DmMonitorServiceMonitor start
三.验证主备状态
1.监视器验证
确认监视器仅能在前台或后台运行一个,非确认监视器可以启动多个
cd /home/dmdba/dmdbms/bin
# dmmonitor_manual.ini 的配置参考dmmonitor.ini,修改MON_DW_CONFIRM = 0即可
./dmmonitor dmmonitor_manual.ini
show
2.数据验证
在主库插入数据,在备库查询
备库查询
3.主备切换
通过help查询命令,通过show显示主备详细信息
查询可切换状态
choose switchover dmgroup(dmgroup为配置文件配置的组名)
切换主备
switchover DMSERVER2
此时看到监视器信息显示dmserver2已经切换从备库standby切换为主库primary的一个状态。
部署完成~