文章目录
- 前言
- 一、前期规划
- 1.目录规划
- 2.端口规划
- 二、系统参数相关设置
- 1.关闭防火墙
- 2.关闭selinux
- 3.创建安装用户和组
- 4.修改操作系统资源限制
- 5.修改内核参数
- 7.创建数据文件存放目录
- 8.修改用户dmdba环境变量
- 三、安装数据库软件
- 1.上传数据库软件到操作系统
- 2.安装数据库软件(两台都要安装)
- 3.初始化主数据库实例
- 4.主库脱机备份
- 5.备份还原(备库执行)
- 四.配置参数(dmdba用户)
- 1.配置实例的配置文件 dm.ini
- 2.配置归档配置文件 dmarch.ini
- 3.配置MAL系统配置文件 dmmal.ini
- 4.配置守护进程配置文件 dmwatcher.ini
- 5.以 Mount 方式启动数据库实例
- 6.启动守护进程
- 五、启动确认监视器
- 六、注册服务
- 1.以服务方式启动
- 七、disql 客户端验证
- 总结
前言
实时主备由一个主库以及一个或者多个配置了实时(Realtime )归档的备库组成,其主要目的是保障数据库可用性,提高数据安全性。
实时主备系统中,主库提供完整的数据库功能,备库提供只读服务。
主库修改数据产生的Redo日志,通过实时归档机制,在写入联机Redo日志文件之前发送到备库,实时备库通过重演Redo日志与主库保持数据同步。当主库出现故障时,备库在将所有Redo日志重演结束后,就可以切换为主库对外提供数据库服务。
一、前期规划
按实际业务需求,选择合适的服务器,准备 3 台服务器,一台主库服务器,一台备库服务器,一台监视器服务器,服务器参数建议如下:
1.目录规划
用途 | 目录路径 | 备注 |
数据库软件安装目录 | /dm/dmdba/dmdbms | 可用空间>50 GB |
实例安装目录 | /dm/dmdata | 单独挂载性能最好的磁盘建议 SSD |
归档日志存放目录 | /dm/dmarch | 单独挂载磁盘 |
备份文件存放目录 | /dm/dmbak | 单独挂载磁盘 |
2.端口规划
实例名 | PORT_NUM | public ip | MAL_INST_PORT | MAL_INST_DW_PORT | MAL_DW_PORT | private ip | MAL_PORT |
dmdb1 | 5236 | 192.168.16.135 | 5236 | 52141 | 33141 | 10.10.10.135 | 61141 |
dmdb2 | 5236 | 192.168.16.136 | 5236 | 52141 | 33141 | 10.10.10.136 | 61141 |
端口号相关说明
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 #即时归档类型