神舟通用数据库双机切换环境搭建

神舟通用数据库双机切换环境搭建

神舟通用的双机切换环境原理示意图:

clip_image002

神通数据库的双机热备原理,从Oracle DBA的角度,其实不难理解,和早年的Oracle双机环境原理没有什么本质的区别,都是需要共享存储,主节点承载业务压力,备用节点平时不会有任何压力,HA服务通过心跳网络监控数据库实例,当数据库实例发生故障时,向备机切换,包括一系列动作:

1. 虚拟IP飘移

2. 共享存储从主节点卸载,挂载到备用节点

3. 在备机启动数据库

早年的Oracle 双机环境,需要有第三方的集群软件来监控数据库,后来这个活grid Infrastructure 也能做了。神舟通用有自己的HA服务,也不需要第三方的集群软件。

下面用3台虚拟机来介绍一下具体的配置步骤,三台虚拟机配置:

主机 备机 存储(&客户端)
主机名 Centos75vm1 Centos75vm2 Centos75vm3
服务地址 192.168.204.121 192.168.204.122 192.168.204.123
心跳地址 192.168.42.121 192.168.42.122
备用心跳 & ISCSI地址 192.168.10.121 192.168.10.122 192.168.10.123
项目
OS & version Centos 7.5
DB version 神舟通用 7.0.8 for Linux 64位
浮动服务IP 192.168.204.10
浮动服务IP网段网关 192.168.204.2
共享存储挂在点 /oscardb

准备共享存储

在centos75vm3上使用lio 配置iscsi 存储的target端,具体步骤略

lio

在centos75vm1和centos75vm2上挂载这个设备

# iscsiadm -m discovery --op=new --op=delete --type sendtargets --portal 192.168.10.123

# iscsiadm -m node -l

[root@centos75vm2 log]# lsscsi

[0:0:0:0] disk VMware, VMware Virtual S 1.0 /dev/sda

[2:0:0:0] cd/dvd NECVMWar VMware IDE CDR10 1.00 /dev/sr0

[3:0:0:0] disk LIO-ORG sdb 4.0 /dev/sdb

将这个块设备做成文件系统,这里用的是xfs类型:

# mkfs.xfs /dev/sdb

先挂在到主机centos75vm1上

# mount /dev/sdb /oscardb

(这里只是测试,不考虑多路径及固定设备名等问题,实际环境肯定要考虑)

安装数据库软件及创建数据库

在cento75vm1上安装数据库软件并创建数据库

神舟通用数据库的安装比较简单,“一路回车”就可以,软件安装到缺省位置就可以,我这里是/opt/ShenTong

安装软件后重启主机,然后使用dbconfiger工具创建数据库,注意所有的文件都要放在/oscardb 这个共享文件系统下,包括控制文件,log文件,system,audit,temp表空间数据文件。注意这里有个工具的小问题,dbconfiger不能选择undo表空间的创建位置,undo表空间的文件会创建到软件安装的位置下去,不在共享存储上,后续要改一下。

移动数据文件的方法和Oracle很像,也是启动数据库到mount阶段下,通过“改文件名”修改控制文件中的信息,再手工移动这个文件,然后open数据库就可以了。唯一需要注意的是,要想将数据库启动到mount阶段,不能用iSQL,只能用oscar程序的后台交互模式,试了好久才弄明白,文档写的太含糊了。。。

# oscar

backend> startup mount

/*Session 0*/ WARNING, the system state: Loaded

backend> alter database rename file '/opt/ShenTong/odbs/OSRDB/undots01.dbf' to '/oscardb/ShenTong/odbs/OSRDB/undots01.dbf';

/*Session 0*/ LOG, alter database rename file '/opt/ShenTong/odbs/OSRDB/undots01.dbf' to '/oscardb/ShenTong/odbs/OSRDB/undots01.dbf', at backend

/*Session 0*/ NOTICE, 修改数据文件路径仅修改控制文件中的数据路径,并不会移动物理文件,请在下次数据库服务器启动前,移动或复制当前的数据文件到如下位置: "/oscardb/ShenTong/odbs/OSRDB/undots01.dbf",否则数据库将无法正常启动。

backend> alter database open;

instance recovery... 1: start log analyze RestartLSN: 6697472

instance recovery... 1: finish log analyze, waste 0(S)

。。。。。。

将数据库服务设置成不自动启动:

# chkconfig oscardb_OSRDBd off

在centos75vm2 上安装数据库软件

安装数据库软件的位置和centos75vm1保持一致,这里是/opt/ShenTong。不创建数据库。安装后重启虚拟机。

将centos75vm1上的system.conf,OSRDB.conf(位于神通数据库安装目录的ADMIN 文件夹下,这里是/opt/ShenTong/admin) 拷贝到centos75vm2 相同目录,同时需要把centos75vm1 上/etc/init.d 下面数据库相关服务拷贝到centos75vm2上对应目录下。Agent和HA服务不创建数据库也会有,只需要把oscardb_OSRDBd 服务复制过来就可以。

将centos75vm1上的数据库关闭,手工umount 共享存储,再mount到centos75vm2上,然后用/etc/init.d/oscardb_OSRDBd start 确认在备机可以正常启动数据库。测试后关闭数据库,并umount存储。

在centos75vm3上安装数据库客户端软件

用于远程连接虚拟服务IP,过程略。

配置HA集群

关闭主机和备机的HA服务,

# service oscarhad stop

在主机和备机分别修改配置文件/opt/ShenTong/agent/HA/ha.conf

#=双机热备默认ping网关失败的最大次数,超过该次数则自身卸载资源,默认1

HA_PING_GATEWAY_FAILED_MAXNUM=1

#=双机热备默认ping网关时间间隔,单位秒,默认3秒

HA_PING_GATEWAY_INTEVAL=3

#=HA服务监控端口号,默认5430

CTRL_PORT=5430

#=是否启用IPV6功能,默认FALSE

IPV6_ENABLE=FALSE

#=是否启用详细日志打印功能,默认FALSE

HA_DETAIL_LOG=FALSE

#=双机热备要查询的产品名称 oscar/kstore,默认oscar

HA_PRODUCT_NAME=oscar

#=双机热备要查询的数据库名称,默认OSRDB

HA_DBNAME=OSRDB

#=双机热备切换服务器查询超时时间,单位秒,默认20秒

HA_QUERY_TIMEOUT=20

#=双机热备查询间隔,单位秒,默认1秒

HA_QUERY_INTEVAL=3

#=双机热备系统启动初始化超时时间,当HA_IS_MASTER为FALSE时,超过此时间连接不到master服务器才会切换为master,单位秒,默认120

HA_INIT_TIMEOUT=120

#=本机是否作为双机热备的默认master服务器启动,FALSE:ha启动HA_INIT_TIMEOUT后才会切换为master,TRUE:ha启动HA_QUERY_TIMEOUT后就会切换为master,默认FALSE;两台服务器中有且只有一台为默认master,当争夺master权冲突时,默认master服务器具有优先权

HA_IS_MASTER=TRUE

# 主机是TRUE,备机是FALSE

#=当主节点从失败状态转换为正常状态后,是否重新获得资源,默认FALSE

HA_AUTO_FAILBACK=FALSE

#=主机数据库启动失败最大次数,默认3,此参数只在HA_AUTO_FAILBACK为TRUE时有效

HA_MASTER_STARTFAILED_MAXNUM=3

#=双机热备默认ping通网关超时时间,默认1秒

HA_GATEWAY_PINT_TIMEOUT=1

#=双机热备系统对外连接的网关地址,默认192.168.0.1

HA_GATEWAY=192.168.204.2

#=双机热备切换时运行服务名称,默认oscardb_OSRDBd

HA_SERVICE_NAME=oscardb_OSRDBd

#=双机热备共享磁盘挂载方式,0:分区盘符挂载,1:UUID挂载,默认0,当HA_MODE为1时才需要设置

HA_SHARE_DISC_MOUNT_TYPE=0

#=双机热备共享磁盘设备名称或UUID,默认/dev/sdb1,当HA_MODE为1时才需要设置

HA_SHARE_DISC_DEVICE=/dev/sdb

#=双机热备共享磁盘挂载路径,默认/mnt/sdb1,当HA_MODE为1时才需要设置

HA_SHARE_DISC_DIRECTORY=/oscardb

#=双机热备共享磁盘文件系统类型,默认ext3,当HA_MODE为1时才需要设置

HA_SHARE_DISC_FSTYPE=xfs

#=双机热备浮动IP地址,默认192.168.0.10

HA_SERVER_IP_ADDRESS=192.168.204.10

#=双机热备对提供服务外子网掩码,默认255.255.255.0

HA_SUB_MASK=255.255.255.0

#=双机热备检测IP地址,即对方的IP,默认192.168.0.20

HA_QUERY_IP_ADDRESS=192.168.42.122

# 主机写备机的心跳IP,备机写主机的心跳IP

#=双机热备检测端口,主从服务器需要相同,需要确保服务器防火墙开放了此端口,默认4447

HA_QUERY_PORT=4447

#=双机热备本机网络设备名称,默认eth0:1

HA_LOCAL_NET_DEV_NAME=ens33:1

# 根据自己的情况修改设备名,这个设备名就是服务IP对应的网卡设备名

#=是否启用备用连接用于双机热备的检测,默认FALSE

HA_ENABLE_RESERVE=TRUE

#=双机热备备用检测IP地址,即对方的IP,默认192.168.1.20

HA_QUERY_IP_ADDRESS_RESERVE=192.168.10.122

# 这里用了iscsi存储的链路做了备用心跳

#=双机热备备用检测端口,主从服务器需要相同,需要确保服务器防火墙开放了此端口,默认4448

HA_QUERY_PORT_RESERVE=4448

启动HA并测试

在主机和备机分别启动ha服务:

# service oscarhad start

HA服务会在主机挂载存储,并自动启动数据库。在centos75vm3上远程连接虚拟IP:

然后直接关闭虚拟机centos75vm1的“电源”,模拟down机,在centos75vm3上的客户端需要重新连接,几秒以后,可以正常连接到切换到centos75vm2上的实例。

# isql -h 192.168.204.10 -p 2003 -U sysdba -W

捕获stdb

从备机的ha_log.txt中也能看到切换的过程:

。。。。。。

2020-06-23, 13:20:00, Code: NTC_SC_HA_ERROR, Info: 数据库HA双机热备检测信息,接收线程接收到发送数据

2020-06-23, 13:20:09, Code: ERR_OS_SOCKET_FAILURE, Info: SOCKET操作失败,HA主心跳线接收线程超时时间内未接收到数据,系统错误码是:0, File: ./src/heartbeat.c, Line: 524

2020-06-23, 13:20:09, Code: NTC_SC_HA_ERROR, Info: 数据库HA双机热备检测信息,主心跳网络异常,进入到RecvDataFromClient抛出的异常catch

: DiscMountType =0

: Mount worked!

: everything is O.K.

2020-06-23, 13:20:11, Code: NTC_SC_HA_ERROR, Info: 数据库HA双机热备检测信息,启动双机热备共享磁盘挂载成功,切换服务器成功

2020-06-23, 13:20:33, Code: NTC_SC_HA_ERROR, Info: 数据库HA双机热备检测信息,HA主心跳线双机热备连接远程服务器失败

2020-06-23, 13:20:39, Code: NTC_SC_HA_ERROR, Info: 数据库HA双机热备检测信息,HA主心跳线双机热备连接远程服务器失败

2020-06-23, 13:20:42, Code: NTC_SC_HA_ERROR, Info: 数据库HA双机热备检测信息,HA主心跳线双机热备连接远程服务器失败

2020-06-23, 13:20:46, Code: NTC_SC_HA_ERROR, Info: 数据库HA双机热备检测信息,HA主心跳线双机热备连接远程服务器失败

。。。。。。

在实际环境中,我们修复了主服务器后,可以通过手工关闭备机数据库的方式,让HA自动把数据库切换回主服务器。

Comments are closed.