引言
来了一需求,一项目数据库高可用要求使用双机热备,至于为什么不用RAC,不在本文讨论范围内。因操作系统使用的是RHEL7.3,借助LINUX7.X版本的Pacemaker 工具构建oracle的单实例双机HA。
因之前未在RHEL7.X上构建过Oracle的HA,故本文记录下
解决方案
- 由 Pacemaker 实现 VIP 、卷/文件系统、数据库实例和数据库监听器的管理、切换;
【服务器信息】
192.168.0.161 主库
192.168.0.162 备库
192.168.0.16 VIP
操作系统版本
Red Hat Enterprise Linux Server release 7.3 (Maipo)
共享磁盘,挂载到 2 个 HA 节点
/oradata
/archive
集群配置步骤
- 在 2 个 HA 节点上设置服务器名称和命名解析。注意:若DNS服务器可用, 可忽略此步骤
[root@EthanDBdb02 ~]# cat /etc/hosts
#primary database
192.168.0.161 EthanDBdb01
#second database
192.168.0.162 EthanDBdb02
#second database
192.168.0.162 EthanDBvip
- 在 2 个 HA 节点上安装 HA 所需要的包并启动服务
# yum groupinstall "High Availability"
# yum install pcs pacemaker fence-agents-all
启动pcsd服务在每个节点上
# systemctl start pcsd.service
# systemctl enable pcsd.service
- 在 2 个 HA 节点上打开防火墙的对应服务端口
# firewall-cmd --permanent --add-service=high-availability
# firewall-cmd --permanent --add-port=7410/udp
# firewall-cmd --reload
# firewall-cmd --list-all
注意
防火墙配合 HA 增加了 high-availability 服务, udp 7410 端口给 stonith kdump 设备使用。
- 在 2 个 HA 节点上设置hacluster用户的密码
# echo HACLUSTER_PASSWORD | passwd --stdin hacluster
注意:HACLUSTER_PASSWORD 是为 hacluster 用户设置的密码。
- 在 HA1 节点上注册两个 HA 节点的集群服务并创建集群
认证集群节点
输入hacluster用户名和密码
# pcs cluster auth EthanDBdb01 EthanDBdb02
Username: hacluster
Password:
EthanDBdb02: Authorized
EthanDBdb01: Authorized
创建集群
# pcs cluster setup --start --name group_cluster EthanDBdb01 EthanDBdb02
# pcs cluster enable –all
#pcs cluster status #查看集群状态
# pcs resource show #查看状态
- 在 HA1 节点上, 设置 stonith kdump 设备
添加FENCE设备
[root@EthanDBdb01 ~]# pcs stonith create kdump fence_kdump pcmk_reboot_action="off" pcmk_host_list="EthanDBdb01 EthanDBdb02"
设置 stonith kdump 可以防止节点故障时, 集群软件直接停机, 从而不产生 kdump 文件的问题。或者通过以下命令禁用 stonith。
[root@EthanDBdb01 ~]# pcs property set stonith-enabled=false
- 在 HA1 节点上, 增加 VIP 资源
[root@EthanDBdb01 ~]# pcs resource create VIP ocf:heartbeat:IPaddr2 ip=192.168.0.16 cidr_netmask=24 nic=enp0s3 op monitor interval=10s --group=oracle
上述命令参数描述:
-
nic=enp0s3 为网卡信息,使用#ip a 命令可查看
-
op monitor interval=10s 网络监控检测为10s,如果每隔10s服务器HA1节点不可达,则将VIP切换至HA2节点上。
- 在 HA1 节点上,添加共享存储
[root@EthanDBdb01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/Vg_Oracle-Lv_oracle 50G 10G 37G 22% /oracle
/dev/mapper/Vg_Oracledata-Lv_oradata 433G 63G 349G 16% /oradata
/dev/mapper/Vg_Oracledata-Lv_archive 50G 2.4G 45G 6% /archiv
[root@EthanDBdb01 ~]# pcs resource create oradata Filesystem device="/dev/vg_avpsdb/lvm_avpsoradata" directory="/oradata" fstype="xfs" --group oracle_group
[root@EthanDBdb01 ~]# pcs resource create archive Filesystem device="/dev/vg_avpsdb/lvm_avpsarchive" directory="/archive" fstype="xfs" --group oracle_group
- 在 HA1 节点上,添加Oracle实例和监听
在集群group_cluster中的资源组中添加实例和监听
添加实例
[root@EthanDBdb01 ~]# pcs resource create group_instance oracle sid=group home=/oracle/oracle/product/19.3.0/db_1 user=oracle --group oracle
添加监听
[root@EthanDBdb01 ~]# pcs resource create group_lsnr oralsnr sid=group home=/oracle/oracle/product/19.3.0/db_1 user=oracle --group oracle
- 在 HA1节点上验证集群状态
[root@EthanDBdb01 ~]# pcs status
Cluster name: group_cluster
Stack: corosync
Current DC: EthanDBdb01 (version 1.1.15-11.el7-e174ec8) - partition with quorum
Last updated: Mon Sep 30 11:21:12 2019 Last change: Wed Sep 25 17:11:44 2019 by root via crm_resource on EthanDBdb02
2 nodes and 7 resources configured
Online: [ EthanDBdb01 EthanDBdb02 ]
Full list of resources:
groupdb1-ipmi (stonith:fence_ipmilan): Started EthanDBdb01
groupdb2-ipmi (stonith:fence_ipmilan): Started EthanDBdb02
Resource Group: oracle
VIP (ocf::heartbeat:IPaddr2): Started EthanDBdb01
oradata (ocf::heartbeat:Filesystem): Started EthanDBdb01
archive (ocf::heartbeat:Filesystem): Started EthanDBdb01
group_lsnr (ocf::heartbeat:oralsnr): Started EthanDBdb01
group_instance (ocf::heartbeat:oracle): Started EthanDBdb01
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
- 常用命令
切换节点服务器命令,将 Resource Group: oracle 从HA1切换至HA2上。
[root@EthanDBdb01 ~]# pcs resource move oracle EthanDBdb02
删除整个资源组
# pcs resource delete oracle
Oracle 为资源组名称Resource_Group_name
删除资源组被管控对象
如删除资源组中监听、实例资源
# pcs resource delete group_lsnr
# pcs resource delete group_instance
至此,整个资源配置完成。
结语
-
本文重点讲述了如何在Red Hat Enterprise Linux 7.x 中如何使用PCS High Availability 实现 Oracle Database 单实例的高可用;
-
有一点,本文可以实现服务器如有异常完成节点间的切换;但并没有对监听和实例的异常状态监控判断,故,在单节点监听或者实例异常的情况下,不能进行节点的自动切换,即不能把资源组中的共享存储、监听、实例、VIP切换至备机。后续文章将持续探讨。
参考
https://github.com/lees07/RHEL7HA/blob/master/RHEL7HA-4-ORACLEDB.md