神舟通用数据库双机切换环境搭建
神舟通用的双机切换环境原理示意图:
神通数据库的双机热备原理,从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端,具体步骤略
在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
从备机的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自动把数据库切换回主服务器。