DM达梦数据库之主备集群


前言

实时主备由一个主库以及一个或者多个配置了实时(Realtime )归档的备库组成,其主要目的是保障数据库可用性,提高数据安全性。
实时主备系统中,主库提供完整的数据库功能,备库提供只读服务。
主库修改数据产生的Redo日志,通过实时归档机制,在写入联机Redo日志文件之前发送到备库,实时备库通过重演Redo日志与主库保持数据同步。当主库出现故障时,备库在将所有Redo日志重演结束后,就可以切换为主库对外提供数据库服务。


一、前期规划

按实际业务需求,选择合适的服务器,准备 3 台服务器,一台主库服务器,一台备库服务器,一台监视器服务器,服务器参数建议如下:

1.目录规划

用途目录路径备注
数据库软件安装目录/dm/dmdba/dmdbms可用空间>50 GB
实例安装目录/dm/dmdata单独挂载性能最好的磁盘建议 SSD
归档日志存放目录/dm/dmarch单独挂载磁盘
备份文件存放目录/dm/dmbak单独挂载磁盘

2.端口规划

实例名PORT_NUMpublic ipMAL_INST_PORTMAL_INST_DW_PORTMAL_DW_PORTprivate ipMAL_PORT
dmdb15236192.168.16.1355236521413314110.10.10.13561141
dmdb25236192.168.16.1365236521413314110.10.10.13661141

端口号相关说明
PORT_NUM 数据库实例监听端口
MAL_INST_PORT 实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_INST_DW_PORT 实例监听守护进程TCP连接的端口
MAL_DW_PORT 实例本地的守护进程监听 TCP 连接的端口
MAL_PORT MAL系统监听TCP连接的端口

二、系统参数相关设置

1.关闭防火墙

代码如下:

systemctl status firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld.service

2.关闭selinux

vi /etc/selinux/config

SELINUX=disabled
SELINUXTYPE=targeted

3.创建安装用户和组

代码如下:

groupadd -g 10001 dinstall
useradd -u 20001 -g dinstall dmdba
passwd dmdba	
设置密码 dmdba

4.修改操作系统资源限制

vim /etc/security/limits.conf:

dmdba soft noproc 65536
dmdba hard noproc 65536
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba hard core unlimited
dmdba soft core unlimited

修改参数 vi /etc/security/limits.d/20-nproc.conf:

* soft nproc 65536

5.修改内核参数

vi /etc/sysctl.conf

fs.aio-max-nr = 1048576
fs.file-max=6815744
net.ipv4.ip_local_port_range = 1024 65535
net.core.rmem_default = 262144
net.core.rmem_max= 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
vm.overcommit_memory=0

使内核参数生效:
sysctl -p

7.创建数据文件存放目录

代码如下:

mkdir -p /dm/dmdba/dmdbms
mkdir -p /dm/dmdata
mkdir -p /dm/dmarch
mkdir -p /dm/dmbak
chown -R dmdba:dinstall /dm
chmod -R 775  /dm

8.修改用户dmdba环境变量

su - dmdba
vi ~/.bash_profile

export LANG=zh_CN.UTF8
export DM_INSTALL_TMPDIR=/tmp
export DM_HOME=/dm/dmdba/dmdbms
export PATH=$DM_HOME/bin:$PATH:$HOME/bin

三、安装数据库软件

1.上传数据库软件到操作系统

创建软件目录并上传

mkdir -p /dm/soft
上传软件至此目录
挂载
[root@dmdb01 ~]# mount /dm/soft/dm8_setup_rh7_64_ent_8.1.1.48_20191129.iso /mnt/

2.安装数据库软件(两台都要安装)

进入用户dmdba
su - dmdba
cd /mnt
执行安装命令

[dmdba@dmrw2 mnt]$ ./DMInstall.bin -i
#在命令行界面安装后面加参数-i

结果如下

请选择安装语言(C/c:中文 E/e:英文) [C/c]: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=大西洋时间(美国和加拿大)
请选择设置时区 [21]:

安装类型:
1 典型安装
2 服务器
3 客户端
4 自定义
请选择安装类型的数字序号 [1 典型安装]:1
所需空间: 1012M

请选择安装目录 [/home/dmdba/dmdbms]:/dm/dmdba/dmdbms
#这里输入规划的软件安装目录
可用空间: 67G
是否确认安装路径(/dm/dmdba/dmdbms)? (Y/y:是 N/n:)  [Y/y]:y

安装前小结
安装位置: /dm/dmdba/dmdbms
所需空间: 1012M
可用空间: 67G
版本信息: 
有效日期: 
安装结束安装类型: 典型安装
是否确认安装? (Y/y:是 N/n:):y
2021-06-17 14:03:05 
[INFO] 安装达梦数据库...
2021-06-17 14:03:06 
[INFO] 安装 基础 模块...
2021-06-17 14:03:10 
[INFO] 安装 服务器 模块...
2021-06-17 14:03:11 
[INFO] 安装 客户端 模块...
2021-06-17 14:03:13 
[INFO] 安装 驱动 模块...
2021-06-17 14:03:14 
[INFO] 安装 手册 模块...
2021-06-17 14:03:14 
[INFO] 安装 服务 模块...
2021-06-17 14:03:16 
[INFO] 移动ant日志文件。
2021-06-17 14:03:37 
[INFO] 安装达梦数据库完成。

请以root系统用户执行命令:
/dm/dmdba/dmdbms/script/root/root_installer.sh

切换到root用户

[root@dmdb01 dmdbms]# /dm/dmdba/dmdbms/script/root/root_installer.sh
##创建并启动DmAPService服务

3.初始化主数据库实例

软件安装目录:/dm/dmdba/dmdbms,实例初始化目录:/dm/dmdba/dmdbms/dmrw,初始化脚本如下:
cd /dm/dmdba/dmdbms/bin

./dminit path=/dm/dmdba/dmdbms db_name=dmrw page_size=32

在新窗口进入bin目录后台启动实例

 ./dmserver /dm/dmdba/dmdbms/dmrw/dm.ini

注意
初始化的实例必须先启动一次,才能脱机备份。

4.主库脱机备份

关闭后台启动实例的窗口
关闭数据库后,使用 dmrman 工具脱机备份主库,dmdba 用户到安装目录的 bin 下执行以下命令:
代码如下(示例):

./dmrman 

执行 backup 全库。

backup database '/dm/dmdba/dmdbms/dmrw/dm.ini' backupset '/dm/dmbak/bakfull';

结果如下

backup database '/dm/dmdba/dmdbms/dmrw/dm.ini' backupset '/dm/dmbak/bakfull';
file dm.key not found, use default license!
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[37904]
BACKUP DATABASE [dmrw],execute......
CMD CHECK LSN......
BACKUP DATABASE [dmrw],collect dbf......
CMD CHECK ......
DBF BACKUP SUBS......
total 2 packages processed...
total 7 packages processed...
total 8 packages processed...
DBF BACKUP MAIN......
BACKUPSET [/dm/dmbak/bakfull] END, CODE [0]......
META GENERATING......
total 10 packages processed...
total 10 packages processed...
total 10 packages processed!
CMD END.CODE:[0]
backup successfully!
time used: 00:00:01.270

5.备份还原(备库执行)

拷贝主库备份到备库合适目录,执行以下命令

scp -r /dm/dmbak/bakfull 192.168.16.136:/dm/dmbak/

关闭数据库后,使用 dmrman 工具还原备库,dmdba 用户到安装目录的 bin 下执行以下命令:

./dmrman

执行 restore。

 restore database '/dm/dmdba/dmdbms/dmrw/dm.ini' from backupset '/dm/dmbak/bakfull';

结果如下

restore database '/dm/dmdba/dmdbms/dmrw/dm.ini' from backupset '/dm/dmbak/bakfull';
file dm.key not found, use default license!
RESTORE DATABASE CHECK......
RESTORE DATABASE,dbf collect......
RESTORE DATABASE,dbf refresh ......
RESTORE BACKUPSET [/dm/dmbak/bakfull] START......
total 4 packages processed...
total 8 packages processed...
RESTORE DATABASE,UPDATE ctl file......
RESTORE DATABASE,REBUILD key file......
RESTORE DATABASE,CHECK db info......
RESTORE DATABASE,UPDATE db info......
total 8 packages processed...
total 8 packages processed!
CMD END.CODE:[0]
restore successfully.
time used: 349.764(ms)

执行 recover。

recover database '/dm/dmdba/dmdbms/dmrw/dm.ini' from backupset '/dm/dmbak/bakfull';
RMAN> recover database '/dm/dmdba/dmdbms/dmrw/dm.ini' from backupset '/dm/dmbak/bakfull';
recover database '/dm/dmdba/dmdbms/dmrw/dm.ini' from backupset '/dm/dmbak/bakfull';
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[37904]
RESTORE RLOG CHECK......
CMD END.CODE:[603],DESC:[备份集[/dm/dmbak/bakfull]备份过程中未产生日志]
备份集[/dm/dmbak/bakfull]备份过程中未产生日志
recover successfully!
time used: 236.684(ms)

执行 recover update db_magic。

recover database '/dm/dmdba/dmdbms/dmrw/dm.ini' update db_magic;

执行结果如下

recover database '/dm/dmdba/dmdbms/dmrw/dm.ini' update db_magic;
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[37904]
EP[0]'s apply_lsn[37904] >= end_lsn[37904]
recover successfully!
time used: 984.325(ms)

四.配置参数(dmdba用户)

1.配置实例的配置文件 dm.ini

修改实例的 dm.ini 文件参数,执行以下命令:

vi /dm/dmdba/dmdbms/dmrw/dm.ini

主库修改以下参数值:

INSTANCE_NAME = dmrw1
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2

备库修改以下参数值:

INSTANCE_NAME = dmrw2
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2

2.配置归档配置文件 dmarch.ini

在实例目录下新建文件 dmarch.ini,执行以下命令:

vi /dm/dmdba/dmdbms/dmrw/dmarch.ini

主库添加以下内容:

[ARCHIVE_REALTIME]
ARCH_TYPE     = REALTIME  #实时归档类型
ARCH_DEST     = dmrw2   #实时归档目标实例名(主库侧填写备库实例名)
[ARCHIVE_LOCAL1]
ARCH_TYPE     = LOCAL #本地归档类型
ARCH_DEST     = /dm/dmarch  #本地归档文件存放路径
ARCH_FILE_SIZE    = 128 #单位 MB,本地单个归档文件最大值
ARCH_SPACE_LIMIT  = 10240    #单位 MB,0 表示无限制,范围 1024~4294967294 MB

备库库添加以下内容:

[ARCHIVE_REALTIME]
ARCH_TYPE     = REALTIME  #实时归档类型
ARCH_DEST     = dmrw1   #实时归档目标实例名(备库侧填写主库实例名)
[ARCHIVE_LOCAL1]
ARCH_TYPE     = LOCAL #本地归档类型
ARCH_DEST     = /dm/dmarch  #本地归档文件存放路径
ARCH_FILE_SIZE    = 128 #单位 MB,本地单个归档文件最大值
ARCH_SPACE_LIMIT  = 10240    #单位 MB,0 表示无限制,范围 1024~4294967294 MB

3.配置MAL系统配置文件 dmmal.ini

在实例目录下新建文件 dmmal.ini,执行以下命令:

vi /dm/dmdba/dmdbms/dmrw/dmmal.ini

主备库文件内容要相同。

MAL_CHECK_INTERVAL   = 5  #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL  = 5  #判定 MAL 链路断开的时间
[MAL_INST1]
  MAL_INST_NAME = dmrw1 #与 dm.ini 中的 INSTANCE_NAME 一致
  MAL_HOST     = 10.10.10.135  #MAL 系统监听 TCP 内部网络 IP
  MAL_PORT     = 61141 #MAL 系统监听 TCP 连接的端口
  MAL_INST_HOST   = 192.168.16.135  #实例的对外服务 IP 地址
  MAL_INST_PORT   = 5236 #与 dm.ini 中的 PORT_NUM 一致
  MAL_DW_PORT   = 52141 #实例对应的守护进程监听 TCP 端口
  MAL_INST_DW_PORT = 33141
[MAL_INST2]
  MAL_INST_NAME = dmrw2 #与 dm.ini 中的 INSTANCE_NAME 一致
  MAL_HOST      = 10.10.10.136  # MAL 系统监听 TCP 内部网络 IP
  MAL_PORT          = 61141 #MAL 系统监听 TCP 连接的端口
  MAL_INST_HOST         = 192.168.16.136  #实例的对外服务 IP 地址
  MAL_INST_PORT         = 5236 #与 dm.ini 中的 PORT_NUM 一致
  MAL_DW_PORT  = 52141 #实例对应的守护进程监听 TCP 端口
  MAL_INST_DW_PORT = 33141

4.配置守护进程配置文件 dmwatcher.ini

在实例目录下新建文件 dmwatcher.ini,执行以下命令:

vi /dm/dmdba/dmdbms/dmrw/dmwatcher.ini

主备库文件内容要相同。

[GRP_RW] 
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/dmdba/dmdbms/dmrw/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART  = 1   #打开实例的自动启动功能
INST_STARTUP_CMD   = /dm/dmdba/dmdbms/bin/dmserver #命令行方式启动

5.以 Mount 方式启动数据库实例

使用 dmdba 用户,到数据库安装目录的 bin 下执行(主备库都执行)。

./dmserver /dm/dmdba/dmdbms/dmrw/dm.ini mount

在新的终端使用 disql 工具连接数据库,执行以下命令:

./disql SYSDBA/SYSDBA

主备库都修改 oguid,执行以下命令:

sp_set_oguid(453331);

主库修改数据库模式为 primary,执行以下命令:

alter database primary;

备库修改数据库模式为 standby,执行以下命令:

alter database standby;

6.启动守护进程

dmdba 用户下,到数据库安装目录的 bin 下执行(主备库都执行)。

./dmwatcher /dm/dmdba/dmdbms/dmrw/dmwatcher.ini

守护进程启动后,会将 Mount 的实例 Open。

五、启动确认监视器

守护进程配置为自动切换时,必须配置确认监视器。在主备服务器以外的服务器上(需安装有 DM 数据库软件,且与主备心跳网络端口开放)。
新建确认监视器配置文件 dmmonitor.ini,执行以下命令:

vi /dm/dmdba/dmdbms/dmmonitor.ini 

添加以下内容:

MON_DW_CONFIRM    = 1   #确认监视器模式
MON_LOG_PATH    = /home/dmdba/dmdbms/log #监视器日志文件存放路径
MON_LOG_INTERVAL  = 60 #每隔 60 s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE   = 32 #每个日志文件最大 32 MB
MON_LOG_SPACE_LIMIT  = 0  #不限定日志文件总占用空间
[GRP_RW] 
MON_INST_OGUID    = 453331 #组 GRP_RW 的唯一 OGUID 值
#以下配置为监视器到组 GRP_RW 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP     = 10.10.10.135:52141
MON_DW_IP     = 10.10.10.136:52141

启动监视器,执行以下命令:

./dmmonitor /dm/dmdba/dmdbms/dmmonitor.ini

启动后输入 show 命令查看集群状态。

show
2021-06-17 19:26:10 
#================================================================================#
GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG  
GRP_RW           453331      TRUE            AUTO            FALSE     


<<DATABASE GLOBAL INFO:>>
IP              MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
10.10.10.135    52141        2021-06-17 19:26:10  GLOBAL    VALID     OPEN           DMRW1            OK        1     1     OPEN        PRIMARY   DSC_OPEN       REALTIME  VALID    

EP INFO:
INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
5236       OK        DMRW1            OPEN        PRIMARY   0          0            REALTIME  VALID    3824            42630           3824            42630           NONE                  

<<DATABASE GLOBAL INFO:>>
IP              MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
10.10.10.136    52141        2021-06-17 19:26:10  GLOBAL    VALID     OPEN           DMRW2            OK        1     1     OPEN        STANDBY   DSC_OPEN       REALTIME  VALID    

EP INFO:
INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
5236       OK        DMRW2            OPEN        STANDBY   0          0            REALTIME  VALID    3774            42630           3774            42630           NONE                  

DATABASE(DMRW2) APPLY INFO FROM (DMRW1):
DSC_SEQNO[0], (ASEQ, SSEQ, KSEQ)[3824, 3824, 3824], (ALSN, SLSN, KLSN)[42630, 42630, 42630], N_TSK[0], TSK_MEM_USE[0]


#================================================================================#

六、注册服务

以上启动为前台方式启动,仅用户搭建过程中验证配置。配置没问题后需要将实例,守护进程和确认监视器注册为系统服务。
使用 root 用户,到数据库安装目录的 script/root 下,执行。

注册守护进程服务(主备库都执行)。

./dm_service_installer.sh -t dmwatcher -p dmrw -watcher_ini /dm/dmdba/dmdbms/dmrw/dmwatcher.ini

注册数据库实例服务(主备库都执行)。

./dm_service_installer.sh -t dmserver -p dmrw -dm_ini /dm/dmdba/dmdbms/dmrw/dm.ini

注册监视器服务(只需在监视器服务器上执行),执行以下命令:

./dm_service_installer.sh -t dmmonitor -p confirm -monitor_ini /dm/dmdba/dmdbms/dmmonitor.ini

1.以服务方式启动

主备 启动数据库实例,执行以下命令:

systemctl start DmServicedmrw

主备 启动守护进程,执行以下命令:

systemctl start DmWatcherServicedmrw

监控服务器(主备外)启动监视器,执行以下命令:

systemctl start DmMonitorServiceconfirm

七、disql 客户端验证

使用 disql 客户端登录主库,创建测试表,插入数据,执行以下命令:

./disql SYSDBA/SYSDBA@192.168.16.135:5236

SQL 提示符下执行以下命令:

create table test(id int);
insert into test values (1);
commit;

使用 disql 客户端登录备库,查询测试表验证,执行以下命令:

./disql SYSDBA/SYSDBA@192.168.56.12:5236

SQL 提示符下执行以下命令:

select * from test;
服务器[LOCALHOST:5236]:处于备库打开状态
登录使用时间: 6.908(毫秒)
disql V8
SQL> select * from test;

行号     ID         
---------- -----------
1          1

已用时间: 9.111(毫秒). 执行号:2.

总结

达梦的读写分离跟主备配置方法一样,只有再配置归档文件时将归档类型改为即时归档
ARCH_TYPE = TIMELY #即时归档类型

更多信息可前往达梦官网社区
https://eco.dameng.com/docs/zh-cn/start/index.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值