注册
达梦8主备集群搭建和切换测试-详细
专栏/培训园地/ 文章详情 /

达梦8主备集群搭建和切换测试-详细

一方石 2024/08/02 668 0 0
摘要

一、 硬件需求

  1. 生产环境至少需要三台服务器,1主、1从、1监视器。由于资源有限,将监视器安装在主库机器上,本次实验使用 2 台虚拟机。
    操作系统:麒麟服务器版V10 LANCE

  2. 服务器规划
    主节点:192.168.11.233 数据库名:dmrw 实例名:dmrw1 实例端口:5236
    备节点:192.168.11.234 数据库名:dmrw 实例名:dmrw1 实例端口:5236
    具体如下:
    网络规划.png

二、 数据库软件安装

1.关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
如果不关闭防火墙,就只能开放端口:
firewall-cmd --add-port=5236/tcp --permanent --zone=public
firewall-cmd –reload
firewall-cmd --list-ports

2.关闭selinux
getenforce
setenforce 0
vi /etc/sysconfig/selinux
SELINUX=disabled

3.创建dm8目录
mkdir /dm8

4.创建用户组和用户
groupadd dinstall
useradd -g dinstall dmdba
id dmdba
passwd dmdba
密码:dameng123

5.修改/dm权限
chown dmdba:dinstall /dm
ll -ld /dm

6.设置文件最大打开数目
vi /etc/security/limits.conf
dmdba soft nofile 65536
dmdba hard nofile 65536

ulimit -n 65536
ulimit -a

7.挂载光盘
mount -o loop /opt/dm8_20240408_x86_rh7_64.iso /mnt

8.使用dmdba安装dm软件
su -
xhost +
echo $DISPLAY
xclock

su - dmdba
export DISPLAY=:0.0 #上面root的DISPLAY值
cd /mnt
./DMInstall.bin
1.png
2.png
3.png
4.png
5.png
6.png
7.png
8.png
9.png

三、主备集群搭建

初始化主备库环境
主库:dminit path=/dm8/data db_name=dmrw instance_name=dmrw1 page_size=32 extent_size=32
备库:dminit path=/dm8/data db_name=dmrw instance_name=dmrw2 page_size=32 extent_size=32
初始化其实就是用命令创建数据库的意思,如果不指定db_name或者instance_name,默认的话是DMSERVER。数据库默认的帐号密码是SYSDBA/SYSDBA。这里用的是简化的创建语句,在实际使用中可以用下面的语句来建库:
dminit INI_FILE=/dm/data/DMDB/dm.ini path=/dm/data LOG_PATH=/dm/data/DMDB/PROD01.log LOG_PATH=/dm/data/DMDB/PROD02.log LOG_PATH=/dm/data/DMDB/PROD03.log EXTENT_SIZE=16 PAGE_SIZE=16 LOG_SIZE=500 CHARSET=0 SYSDBA_PWD=Dameng123 DB_NAME=PROD INSTANCE_NAME=TEST PORT_NUM=5238

通过命令启动主节点数据库:
dmserver /dm8/data/dmrw/dm.ini

(主库操作)关闭数据库,并使用dmrman进行全备,并将备份发给备库
由于搭建主备集群要求数据库数据完全一致,因此采用主库全备,备库使用主库全备还原的方法来保证一致性。
停止主库数据库:
rman>backup database '/dm8/data/dmrw/dm.ini' backupset '/dm8/bakfull';
拷贝备份文件到备库:
cd /dm8/bakfull
scp bakfull.* 192.168.11.234:/dm8/dmbak/

(备库操作)还原备数据库
dmrman
rman>restore database '/dm8/data/dmrw/dm.ini' from backupset '/dm8/dmbak';
rman>recover database '/dm8/data/dmrw/dm.ini' from backupset '/dm8/dmbak';
rman>recover database '/dm8/data/dmrw/dm.ini' update db_magic;

以下开始对主库、备库进行相关配置:
------------------------------主库的配置---------------------------------------------------
dmserver /dm8/data/dmrw/dm.ini mount
vi dm.ini
INSTANCE_NAME = dmrw1
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2

vi dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = dmrw2

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm8/dmarch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 10240

vi dmmal.init
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = dmrw1 #与 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.11.233 #MAL 系统监听 TCP 内部网络 IP
MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.11.233 #实例的对外服务 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 = 192.168.11.234 # MAL 系统监听 TCP 内部网络 IP
MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.11.234 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #与 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 端口
MAL_INST_DW_PORT = 33141

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

以MOUNT方式启动数据库实例
$ cd /dm8/dmdbms/bin/

./dmserver /dm8/data/dmrw/dm.ini mount
#这里以mount模式启动数据库,包括备库也是只能mount模式启动。后续守护进程启动后会判断主备库的FILE_LSN、 CUR_LSN,如果值相同且永久魔数一致情况下会自动把主备库open
$ cd /dm8/dmdbms/bin/
./disql SYSDBA/SYSDBA
SQL> sp_set_oguid(453331); 注:设置OUGID值
SQL> alter database primary; 主库修改数据库为 primary 模式

--------------------------------------------备库上的配置------------------------------------------
vi dm.ini
INSTANCE_NAME = dmrw2
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2

vi dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = dmrw1

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm8/dmarch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 10240

vi dmmal.init
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = dmrw1 #与 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.11.233 #MAL 系统监听 TCP 内部网络 IP
MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.11.233 #实例的对外服务 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 = 192.168.11.234 # MAL 系统监听 TCP 内部网络 IP
MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.11.234 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #与 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 端口
MAL_INST_DW_PORT = 33141

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

以MOUNT方式启动数据库实例
$ cd /dm8/data/bin/

dmserver /dm8/data/dmrw/dm.ini mount
$ cd /dm8/data/bin/
./disql SYSDBA/SYSDBA
SQL> sp_set_oguid(453331); 注:设置OUGID值
SQL> alter database standby; 备库修改数据库为 standby 模式

-------------------------------配置监视器------------------------------------
vi dmmonitor0.ini
MON_DW_CONFIRM = 0 #普通监视器模式
MON_LOG_PATH = /dm8/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 = 192.168.11.233:52141
MON_DW_IP = 192.168.11.234:52141

启动守护进程:
dmwatcher /dm8/data/dmrw/dmwatcher.ini
启动普通监视器:
dmmonitor /dm8/data/dmrw/dmmonitor0.ini
这里配置的是普通监视器,可以在普通监视器里执行命令查看集群状态,也可以手动进行主备切换:
查看监控.png
监视器切换.png
也可以配置一个确认监视器,当生产库出现故障时可以自动切换到备库:
vi dmmonitor1.ini
MON_DW_CONFIRM = 1 #确认监视器模式,其他同普通监视器
MON_LOG_PATH = /dm8/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 = 192.168.11.233:52141
MON_DW_IP = 192.168.11.234:52141

启动确认监视器(生产环境建议在第三台服务器上启动):
dmmonitor /dm8/data/dmrw/dmmonitor0.ini
-------------------------注册服务,让服务开机可以自动运行---------------------
关闭数据库、守护进程、监视器:
之前我们启动的主备数据库、守护进程、监视器,都是在前台通过命令启动的,通过contrl+C停止主库和备库的相关进程。

在主库和备库执行:
./dm_service_installer.sh -t dmwatcher -p dmrw -watcher_ini /dm8/data/dmrw/dmwatcher.ini #-p表示服务名
./dm_service_installer.sh -t dmserver -p dmrw -dm_ini /dm8/data/dmrw/dm.ini
./dm_service_installer.sh -t dmmonitor -p dmrw -monitor_ini /dm8/data/dmrw/dmmonitor0.ini #-p normal表示普通监视器

在主库和备库手动启动数据库、守护进程、监视器:
systemctl start DmServicedmrw
systemctl status DmwatcherServicedmrw
systemctl status DmMonitorServicedmrw

四、主备测试

(1)主库新增数据
root@dm1(192.168.11.233)/data/dmdbms/bin>./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于主库打开状态
登录使用时间 : 3.781(ms)
disql V8
SQL> create table t1(id int);
操作已执行
SQL> insert into t1 values(1),(2),(3);
影响行数 3
SQL> commit;
操作已执行

(2)备库查看
root@dm2(192.168.11.234)/data/dmdbms/bin>./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于备库打开状态
登录使用时间 : 3.520(ms)
disql V8
SQL> select * from t1;
行号 id


1 1
2 2
3 3
SQL> insert into t1 values(4),(5);
insert into t1 values(4),(5);
[-710]:试图在STANDBY模式下,修改用户库.已用时间: 0.671(毫秒). 执行号:0.【备库只读】

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服