达梦数据守护集群介绍
达梦数据守护集群软件(DM Data Watch)是一种集成化的高可靠性解决方案,该方案基于数据库REDO日志,不依赖于第三方软件和存储,用于解决由于硬件故障、自然灾害等原因导致的数据库服务长时间中断问题,提供不间断数据库服务,可同时满足用户对数据安全性和高可用性的要求。数据守护包含的主要部件有:主数据库、备数据库、联机REDO日志系统、本地REDO日志归档服务、实时REDO日志归档服务、REDO日志重做服务、MAL系统、守护进程和监视器。其中,守护进程和监视器是两个独立的工具,其他部件集成在DM8数据库服务器DMSERVER中。
一、前提
搭建数据守护系统前,达梦使用的服务器版本应一致,同时还应注意各实例所在主机的操作系统位数、大小端模式、时区及时间设置都应一致,以及使用同一个用户启动 DM 服务器和守护进程 dmwatcher,以免系统在运行时出现意想不到的错误。
二、环境准备
准备两台机器用来部署主备库,其中dm1和dm2配置两块网卡,一块接入内部网络交换模块,一块接入到外部交换机。
两台机器都先安装dm8数据库软件其中主库创建实例,从库只安装软件,安装路径为'/dm/dmdbs',执行程序保存在'/dm/dmdbs/bin'目录中,数据存放路径为'/dm/dmdbs/data',归档日志路径'/dm/dmarch'。
1.数据守护集群搭建
配置数据守护之前,必须先通过备份还原方式同步各数据库的数据,确保各数据的数据保持完全一致。主库可以是新初始化的数据库,也可以是正在生产、使用中的数据库。
不能使用分别初始化库或者直接拷贝数据文件的方法,原因如下:
每个库都有一个永久魔数(permenant_magic),一经生成,永远不会改变,主库传送日志时会判断这个值是否一样,确保是来自同一个数据守护环境中的库,否则传送不了日志。
由于 dminit 初始化数据库时,会生成随机密钥用于加密,每次生成的密钥都不相同,备库无法解析采用主库密钥加密的数据。
每个库都有一个数据库魔数(DB_MAGIC),每经过一次还原、恢复操作,DB_MAGIC就会产生变化,需要通过这种方式来区分同一个数据守护环境中各个不同的库。
如果是初始搭建环境,可以通过对主库脱机备份、对备库脱机还原的方式来准备数据,如果主库已经处于运行状态,则可以对主库进行联机备份、对备库脱机还原的方式来准备数据。
本次由于是初始搭建环境,所以采用对主库脱机备份、对备库脱机还原的方式来准备数据.
2.配置过程
创建用户&组
groupadd -g dinstall
useradd -u -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
passwd dmdba
关闭防火墙
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld
修改selinux.conf为disabled
创建安装目录
mkdir -p /dm/dmdbms
mkdir -p /dm/dmarch
mkdir -p /dm/dmbak
chown -R dmdba:dinstall /dm/
chmod -R 775 /dm/
配置环境变量
vi .bash_profile
export DM_HOME="/dm/dmdbms"
export LD_LIBRARY_PATH="/dm/dmdbms/bin:$LD_LIBRARY_PATH"
export PATH="/dm/dmdbms/bin:$PATH"
修改系统参数
cat /etc/security/limits.conf
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft nproc 102400
dmdba hard nproc 63653
dmdba soft core unlimited
dmdba hard core unlimited
介质挂载:
mount dm8_20220928_x86_kylin10_64_ent_8.1.2.138_pack3.iso
cd /mnt/cdrom
达梦安装(主)
[dmdba@dm1 cdrom]$ ./DMInstall.bin –i
Please select the installer's language (E/e:English C/c:Chinese) [E/e]:
Extract install files..........
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 31096
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
The max number of open files is too little, suggest to set 65536 or more to number of open files.
Welcome to DM DBMS Installer
Whether to input the path of Key File? (Y/y:Yes N/n:No) [Y/y]:n
Whether to Set The TimeZone? (Y/y:Yes N/n:No) [Y/y]:n
Installation Type:
1 Typical
2 Server
3 Client
4 Custom
Please Input the number of the Installation Type [1 Typical]:
Require Space: 1178M
Please Input the install path [/home/dmdba/dmdbms]:/dm/dmdbms
No write permission!
Please Input the install path [/home/dmdba/dmdbms]:/dm/dmdbms
Available Space:449G
Please Confirm the install path(/dm/dmdbms)? (Y/y:Yes N/n:No) [Y/y]:y
Pre-Installation Summary
Installation Location: /dm/dmdbms
Require Space: 1178M
Available Space: 448G
Version Information:
Expire Date:
Installation Type: Typical
Confirm to Install? (Y/y:Yes N/n:No):
Confirm to Install? (Y/y:Yes N/n:No):y
2022-10-12 17:46:20
[INFO] Installing DM DBMS...
2022-10-12 17:46:20
[INFO] Installing BASE Module...
2022-10-12 17:46:22
[INFO] Installing SERVER Module...
2022-10-12 17:46:23
[INFO] Installing CLIENT Module...
2022-10-12 17:46:24
[INFO] Installing DRIVERS Module...
2022-10-12 17:46:24
[INFO] Installing MANUAL Module...
2022-10-12 17:46:24
[INFO] Installing SERVICE Module...
2022-10-12 17:46:25
[INFO] Move log file to log directory.
2022-10-12 17:46:25
[INFO] Installed DM DBMS completely.
Please execute the commands by root:
/dm/dmdbms/script/root/root_installer.sh
End
[root@dm1 soft]# /dm/dmdbms/script/root/root_installer.sh
Move /dm/dmdbms/bin/dm_svc.conf to /etc
Modify the files' mode of DM Server
Create the DmAPService service
Created symlink from
/etc/systemd/system/multi-user.target.wants/DmAPService.service to /usr/lib/systemd/system/DmAPService.service.
Finished to create the service (DmAPService)
Start the DmAPService service
端口解释:
服务端口:对外提供数据库服务的端口
心跳端口:用于数据同步的端口
守护监听端口:数据守护监听数据库的端口
守护进程端口:datawatch收集数据守护信息的端口
主:
dminit PATH=/dm/dmdbms DB_NAME=DMDB INSTANCE_NAME=DMDB PORT_NUM=52361 PAGE_SIZE=32 EXTENT_SIZE=32 CHARSET=1 CASE_SENSITIVE=0 LENGTH_IN_CHAR=0 BLANK_PAD_MODE=1
------初始化数据库
dmserver /dm/dmdbms/DMDB/dm.ini
------启动成功后ctrl+c 退出
./dm_service_installer.sh -t dmserver -dm_ini /dm/dmdbms/DMDB/dm.ini -p DMDB
------配置服务
配置服务后,可以用DmService 管理:
DmServiceDMDB start
Dmdba用户:
1)主库开启归档 alter databse archivelog 并指定路径
2)backup database '/dm/dmdbms/DMDB/dm.ini' full;
达梦安装(从库)
dminit PATH=/dm/dmdbms DB_NAME=DMDB INSTANCE_NAME=DMDB2 PORT_NUM=52361 PAGE_SIZE=32 EXTENT_SIZE=32 CHARSET=1 CASE_SENSITIVE=0 LENGTH_IN_CHAR=0 BLANK_PAD_MODE=1
./dm_service_installer.sh -t dmserver -dm_ini /dm/dmdbms/DMDB/dm.ini -p DMDB
主库的备份集cp到从库:
scp ./* dm2:/dm/dmbak/
恢复备库:
restore database '/dm/dmdbms/DMDB/dm.ini' from backupset '/dm/dmbak/DB_HTDMDB_FULL_20221013_113553_411581';
recover database '/dm/dmdbms/DMDB/dm.ini' from backupset '/dm/dmbak/DB_HTDMDB_FULL_20221013_113553_411581';
recover database '/dm/dmdbms/DMDB/dm.ini' update db_magic;
主从系统开启服务自启动
systemctl enable DmServiceDMDB.service
systemctl start DmServiceDMDB.service
主库:
vi /dm/dmdbms/DMDB/dm.ini
INSTANCE_NAME = DMDB #实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16
PORT_NUM = 52361 #数据库实例监听端口
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 次的日志发送信息
vi /dm/dmdbms/DMDB/dmmal.ini
[MAL_INST1]
MAL_INST_NAME = DMDB
MAL_HOST = 10.101.101.201
MAL_PORT = 52381
MAL_DW_PORT = 52391
MAL_INST_HOST = 10.101.103.201
MAL_INST_PORT = 52361
MAL_INST_DW_PORT = 52371
[MAL_INST2]
MAL_INST_NAME = DMDB2
MAL_HOST = 10.101.101.202
MAL_PORT = 52381
MAL_DW_PORT = 52391
MAL_INST_HOST = 10.101.103.202
MAL_INST_PORT = 52361
MAL_INST_DW_PORT = 52371
vi /dm/dmdbms/DMDB/dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = DMDB2
vi /dm/dmdbms/DMDB/dmwatcher.ini
[GRP1] #守护进程组名
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 270001 #守护系统唯一 OGUID 值
INST_INI = /dm/dmdbms/DMDB/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
./dmserver /dm/dmdbms/DMDB/dm.ini mount
disql sysdba
回车
SQL> select instance_name,status$ from v$instance;
mount
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(270001);
alter database primary;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
备库:
vi /dm/dmdbms/DMDB/dm.ini
INSTANCE_NAME = DMDB #实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16
PORT_NUM = 52361 #数据库实例监听端口
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 次的日志发送信息
vi /dm/dmdbms/DMDB/dmmal.ini
[MAL_INST1]
MAL_INST_NAME = DMDB
MAL_HOST = 10.101.101.201
MAL_PORT = 52381
MAL_DW_PORT = 52391
MAL_INST_HOST = 10.101.103.201
MAL_INST_PORT = 52361
MAL_INST_DW_PORT = 52371
[MAL_INST2]
MAL_INST_NAME = DMDB2
MAL_HOST = 10.101.101.202
MAL_PORT = 52381
MAL_DW_PORT = 52391
MAL_INST_HOST = 10.101.103.202
MAL_INST_PORT = 52361
MAL_INST_DW_PORT = 52371
vi /dm/dmdbms/DMDB/dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = DMDB2
vi /dm/dmdbms/DMDB/dmwatcher.ini
[GRP1] #守护进程组名
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /dm/dmdbms/DMDB/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
./dmserver /dm/dmdbms/DMDB/dm.ini mount
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(270001);
alter database standby;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
vi /dm/dmdbms/DMDB/dm.ini
ALTER_MODE_STATUS = 1
主从:
[root@dm1&2 ~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /dm/dmdbms/DMDB/dmwatcher.ini -p mon
Created symlink /etc/systemd/system/multi-user.target.wants/DmWatcherServicemon.service → /usr/lib/systemd/system/DmWatcherServicemon.service.
创建服务(DmWatcherServicemon)完成
配置监视器:
dmmonitor.ini:
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /dm/dmdbms/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP1] #守护进程组名,和dmwatcher.ini中的保持一致
MON_INST_OGUID = 270001 #组 GRP1 的唯一 OGUID 值
#以下配置为监视器到组 GRP1 的守护进程的连接信息,以―IP:PORT‖的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 10.101.101.201:52391
MON_DW_IP = 10.101.101.202:52391
主:
/dm/dmdbms/bin/dmwatcher /dm/dmdbms/DMDB/dmwatcher.ini
dmmonitor/dm/dmdbms/DMDB/dmmonitor.ini
systemctl start DmWatcherServicemon
监视器执行show命令检查状态
show
验证:
主:
create table dwdb(id int primary key,name varchar(20));
insert into dwdb values(1,'qipengfei');
commit;
备:
select * from dwdb;
最后确认是否同步到从库。
文章
阅读量
获赞