仲裁盘功能
普通的网络心跳的方式,如果收不到对方的心跳,无法准确判断对方的状态:有可能是对方挂掉了,也有可能是网络出现了问题。如果此时都切换为主,就会出现脑裂,出现数据双写破坏了数据的完整性。
因此神通HA引入了仲裁盘功能,仲裁盘,就是各个节点都可以访问的一个共享存储盘。主要作用是在协调集群节点间的故障转移。两台服务器传入本机心跳信息进入仲裁盘,也可以读取对方的心跳信息,然后根据双方的信息进行判断主机是否正常运行。
注解
在神通HA服务正常运行的过程中如果仲裁盘收不到对方的心跳(对方心跳信息不在变化),有以下几种情况:
- 有可能是对方挂掉了。自己切换为主,没有问题。
- 有可能一方和仲裁盘连接出现问题,一方和仲裁盘连接正常。自己和仲裁盘的连接是否正常是可以感知的,和仲裁盘连接正常的切换为主,和仲裁盘连接有问题的切换为备。
- 有可能两方和仲裁盘连接都有问题,都切换为备。两方都和共享存储失联,切换为主也没有意义。
多实例支持
神通HA支持多实例,需要注意的是每一个实例都有与其对应的一个HA服务进程、一块仲裁盘、一块存储盘、一个独立端口、一个可用的浮动IP。不同的实例配置文件不同。
每一个实例不会影响其他实例的运行使用。各个实例之间可以独立切换。
存储的挂载方式
通过设备名称挂载
服务器读到硬盘都会有一个设备名称,通过该名称可以将数据盘挂载到服务器上、客户端就可以通过访问服务器从而访问数据库。
使用 fdisk -l 命令即可查看当前所有连接的存储驱动器。
神通HA可通过调用resourceManager脚本进行设备名方式的存储盘挂载
$MOUNT -t $FSTYPE $DEVICE $MOUNTPOINT
参数详情参考resourceManager文件使用
示例:mount -t ext4 /dev/sdb2 /opt/ShenTong/odbs
通过设备UUID挂载
UUID为系统中的存储设备提供唯一的标识字符串,不管这个设备是什么类型的。自动分配的设备名称并非总是一致的,它们依赖于启动时内核加载模块的顺序。如果你在插入了USB盘时启动了系统,而下次启动时又把它拔掉了,就有可能导致设备名分配不一致。如果你在系统中添加了新的存储设备如硬盘,很可能会造成一些麻烦,比如说启动的时候因为找不到设备而失败,而使用UUID则不会有这样的问题。
使用blkid命令,即可查看当前所以设备的UUID。
神通HA可通过调用resourceManager脚本进行设备UUID挂载:
$MOUNT -U $DEVICE $MOUNTPOINT
参数详情参考resourceManager文件使用
示例: mount -U 964996ec-b7dd-4a11-9cd7-2c6811917e62 /opt/ShenTong/odbs
通过NFS挂载
通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,使得每个计算机的节点能够像使用本地资源一样方便地使用网上资源。工作原理是使用客户端/服务器架构,由一个客户端程序和服务器程序组成。服务器程序向其他计算机提供对文件系统的访问,其过程称为输出。NFS客户端程序对共享文件系统进行访问时,把它们从NFS服务器中“输送”出来。文件通常以块为单位进行传输。NFS传输协议用于服务器和客户机之间文件访问和共享的通信,从而使客户机远程地访问保存在存储设备上的数据。
使用showmount -e ip*可以看到服务端提供的所以共享磁盘
神通HA通过调用resourceManager脚本来实现NFS远程存储盘挂载
$MOUNT -t $FSTYPE $DEVICE $MOUNTPOINT
参数详情参考resourceManager文件使用
示例:mount -t nfs 10.1.203.40:/export/osc01 /opt/ShenTong/odbs
若在实际工作过程中需要开机自动挂载硬盘可以通过编辑/etc/fstab文件系统信息,在最后加入需要挂载的硬盘信息。
专用机环境的支持
专用机部署HA服务过程与通用机基本相同。但是需要注意的是专用机只能通过服务的方式启停数据库服务。
服务存放的路径为:/usr/lib/systemd/system/
启动数据库服务:Systemctl start oscar_OSRDBd
启动HA服务:systemctl start oscarhad.service
停止HA服务:systemctl stop oscarhad.service
重启HA服务:systemctl restart oscarhad.service
oscarha的命令行参数
oscarha [SZ_OSCAR_HOME -i | -u | -m VOTE_DISK | -c | -d config_file_path | -e SZ_OSCAR_HOME | -s | -S dbname | -Q | -C | -I Port | -v | -h];
-d specify the configuration file "ha.conf path"
-e the SZ_OSCAR_HOME's value
-i install ha service
-u uninstall ha service
-m init the VOTE_DISK's path
-c run ha by command line
-s stop the ha
-S Stop the database server
-Q Query the ha server run state
-C Change the ha server run state
-I Query the ha Configuration file path
-v show version
-h show help
-d:指定配置文件,需要在后面接一个配置文件参数
-d参数使用示例:
oscarha -d /opt/ShenTong/agent/HA/ha.conf -c
-e:指定数据库路径,需要在后面接一个数据库主目录路径参数
-e参数使用示例:
oscarha -e /opt/ShenTong -c
-i:安装ha服务
-i参数使用示例:
oscarha -i
-u:卸载ha服务
-u参数使用示例:
oscarha -u
-m:初始化仲裁盘,后面需要接一个仲裁盘
-m参数使用示例:
oscarha -m /dev/raw/raw1
-c:启动HA服务
-c参数使用示例:
oscarha -c
-s:停止HA服务
-s参数使用示例:
oscarha -s
-S:停止数据库服务,需要接一个数据库服务实例名称参数
-S参数使用示例:
oscaha -S OSRDB
-Q:检查当前节点主备状态
-Q参数使用示例:
oscarha -Q
-C:切换当前节点主备状态
-C参数使用示例:
oscarha -C
-v:查询ha服务版本
-v参数使用示例:
oscarha -v
-h:显示帮助
-h参数使用示例:
oscarha -h
resourceManager资源文件
神通HA是通过resourceManager脚本对资源进行管理的,实施人员也可以用resourceManager脚本来手动测试资源的情况,且可以修改resourceManager来添加一些打印日志信息来进行调试。
| 参数 |
参数说明 |
| --opType |
脚本服务的运行方式start/stop/status |
| --dbName |
HA监控的数据库名 |
| --serverInfo |
服务名,服务管理方式,是否为专用机 |
| --dataDisk |
挂载方式,存储文件系统,设备名,挂载点 |
| --netMInfo |
网卡名称,IPV6,浮动IP,网关,子网掩码 |
| --netSInfo |
备用网络网卡名称,IPV6,备用网络浮动IP,备用网络网关,备用网络子网掩码 |
加载资源:
"/opt/ShenTong/bin/resourceManager" --opType=start --dbName=OSRDB --serverInfo=oscardb_OSRDBd,byCommand,normal --dataDisk=mount-by-uuid,ext4,df8f7e46-4ce2-4e65-8a5d-908e5af3e4c9,/opt/ShenTong/odbs --netMInfo=ens33,ipv6-disable,192.168.22.22,192.168.22.2,24
卸载资源:
"/opt/ShenTong/bin/resourceManager" --opType=stop --dbName=OSRDB --serverInfo=oscardb_OSRDBd,byService,normal --dataDisk=mount-by-uuid,ext4,df8f7e46-4ce2-4e65-8a5d-908e5af3e4c9,/opt/ShenTong/odbs --netMInfo=ens33,ipv6-disable,192.168.22.22,192.168.22.2,24
IP挂载:ip address add $FLOATIP/$SubMaskLen dev $NetDevice
示例:ip address add 192.168.11.11/24 dev ens33
共享存储盘挂载:$MOUNT -t $FSTYPE $DEVICE $MOUNTPOINT
示例:mount -t nfs 10.1.203.40:/export/db1 /opt/ShenTong/odbs
数据库启停:/etc/init.d/$ServiceName start
/etc/init.d/$ServiceName stop
示例:/etc/init.d/oscardb_OSRDBd start
systemctl start oscardb_OSRDBd.service
/etc/init.d/oscardb_OSRDBd stop
systemctl stop oscardb_OSRDBd.service
HA支持第三方资源文件
神通HA支持第三方资源管理,一些用户需求,软件和数据库部署在一起的,如果数据库发生了切换,希望软件也进行切换。
在ha.conf文件中有两个参数HA_OTHER_RES_ENABLE和HA_OTHER_RES_FILEPATH
HA_OTHER_RES_ENABLE默认值为FALSE,当该参数为TRUE时程序会启动第三方资源的挂载与卸载支持。
HA_OTHER_RES_FILEPATH默认值为空,该参数为第三方资源脚本调用文件的路径,当该参数没有发生变化时程序会去默认路径$SZ_OSCAR_HOME/agent/HA/下寻找相关的资源脚本文件。
HA启动时从$SZ_OSCAR_HOME/agent/HA/目录或者用户指定的目录中寻找所有的hares文件,每一个hares文件代表着一个第三方资源,并读取资源文件的头信息获取资源的执行方式。HA程序启动后将按照资源的规则逐一执行。
1)程序启动后新增的hares文件或者对原资源文件头信息修改不会生效(对原资源文件的内容修改会生效),必须重启HA软件才会生效;
2)资源文件的头信息不符合约定可能会导致资源不会被调用,请注意HA日志信息,明确资源文件是否有错误信息抛出;
3)资源文件必须为标准的shell脚本,否则无法执行;
hares文件的约定的文件头:
#!/bin/sh
#runMode=start/stop
#runTime=before/after
#runBlocking=yes/no
注解
现在第三方资源的脚本文件头文件格式有严格的要求,每一行内容中都不能有空格,字母大小写必须保持与规定的一致
#runMode代表的是在start下去执行还是在stop下去执行,必须指定,无默认值,无此设置报错
#runTime代表是在内部资源之前还是在内部资源之后调用执行,默认为after
#runBlocking代表的是用阻塞模式去执行还是非阻塞,默认非阻塞模式
注解
现在第三方资源的支持仅仅只是去执行了$SZ_OSCAR_HOME/agent/HA/目录或者用户指定的目录下所有标准文件头的*.hares脚本文件,若脚本编写有问题的情况下资源并不一定正确加载或卸载。
success表示资源文件加载或卸载成功
failed表示资源文件加载或卸载失败
需要注意的是目前只能判断阻塞模式执行脚本是否成功,以非阻塞的方式执行脚本提示肯定是成功的,但实际脚本执行结果需要另外确定。