使用HeartBeat搭建WordPress网站高可用集群

  • A+
所属分类:服务搭建

WordPress是全球最流行的开源博客程序,因免费开源、主题精美、简单易用、高扩展性等等特点,近年来受到了许多建站爱好者们的追捧。WordPress同时也是一款优秀的内容管理系统,如今越来越多中小型企业基于WordPress搭建起了各种内部使用的网站平台,比如企业新闻发布网站、班组工作计划平台等等。为防止因单一服务器故障导致业务中断,今天给大家分享如何使用HeartBeat搭建WordPress网站高可用集群,最终实现对企业提供持续稳定的Web服务。

实验环境

实验平台:VMware Workstation 14

操作系统:RHEL 6.10

主用服务器主机名/业务IP地址/心跳IP地址:Wanghualang-A / 192.168.1.201 / 10.0.0.1

备用服务器主机名/业务IP地址/心跳IP地址:Wanghualang-B / 192.168.1.202 / 10.0.0.2

共享存储服务器主机名/业务IP地址:Wanghualang-C / 192.168.1.203

业务网络:使用虚拟机的桥接模式,模拟外网

心跳网络:使用虚拟机的仅主机模式,模拟内网

Cluster-Glue:1.0.12

Resource-Agents:3.9.6

HeartBeat:3.0.6

iSCSI-Target:1.4.20.2

Apr:1.6.3

Apr-Util:1.6.1

Apache:2.4.34

MySQL:5.7.23

PHP:7.2.8

WordPress:4.9.4

实验说明

实验主要分为四大步骤,依次为共享存储篇(iSCSI-Target)、集群软件篇(Heartbeat)、架设网站篇(WordPress)、集群测试篇(HA)。其中Wanghualang-A、Wanghualang-B两台服务器用于配置集群软件和网站程序,Wanghuaang-C主机则用于搭建共享存储,下文简称为A机、B机、C机。特别说明一下,因为本次实验是在VMware虚拟机下进行,且已安装VMware Tools,三台虚拟机会自动和物理机进行时间同步,所以本次实验跳过配置时钟同步。在真正的生产环境中,必须使用NTP服务器、GPS同步时钟等至少一种可靠手段确保服务器的时间一致性。

灵魂画师

使用HeartBeat搭建WordPress网站高可用集群

不足之处

本次实验意在演示大致的集群搭建过程,细节上存在许多不足之处,有兴趣的朋友们可以等实验结束后再回来思考一下如何改进,更详细的搭建文章我会在日后分享。

不足之处展开

1.没有配置多路径连接共享存储,链路不可靠

2.使用存储设备名进行挂载操作,重启系统或者新增设备有几率发生设备名改变

共享存储篇

第一步 搭建共享存储

安装依赖包,在C机上强烈建议大家挂载RHEL 6.10系统镜像并配置本地Yum源,目的是为了确保系统内核与内核开发工具的版本号一致,以便顺利编译安装iscsi-target。至于A、B机,则不用在意这个问题,可以按需配置自己喜欢的软件源。

  1. [root@Wanghualang-C ~]# yum install -y make gcc patch kernel-devel kernel-headers  

编译安装iSCSI-Target

  1. [root@Wanghualang-C ~]# cd /usr/local/src/  
  2. [root@Wanghualang-C src]# wget --no-check-certificate https://download.wanghualang.com/iscsitarget-1.4.20.2.tar.gz  
  3. [root@Wanghualang-C src]# tar xzf iscsitarget-1.4.20.2.tar.gz   
  4. [root@Wanghualang-C src]# cd iscsitarget-1.4.20.2  
  5. [root@Wanghualang-C iscsitarget-1.4.20.2]# make  
  6. [root@Wanghualang-C iscsitarget-1.4.20.2]# make install  

添加新硬盘,关闭虚拟机电源,添加一块10G的新硬盘,用于提供A机、B机的共享存储,虚拟机添加新硬盘的操作可以参考Gif动画。

使用HeartBeat搭建WordPress网站高可用集群

添加硬盘后,再次启动虚拟机,查看硬盘信息便可看到新添加的10G硬盘,教程中新添加的硬盘设备名为/dev/sdb,如下图。

  1. [root@Wanghualang-C ~]# fdisk -l  

使用HeartBeat搭建WordPress网站高可用集群

配置启动iSCSI-Target

扩展阅读展开

/etc/iet/ietd.conf默认配置如下。

默认配置:Target iqn.2001-04.com.example:storage.disk2.sys1.xyz

  1. iqn:全称iSCSI Qualified Name,即  
  2. 2001-04:表示年份-月份,可以按需自定义;  
  3. com.example:表示反向域名,可以按需自定义;  
  4. storage.disk2.sys1.xyz:表示设备标识符,可以按需自定义。  

默认配置:Lun 0 Path=/dev/sdc,Type=fileio,ScsiId=xyz,ScsiSN=xyz

  1. Lun 0:全称Logical Unit Number  
  2. Path=/dev/sdc:表示即将共享的硬盘设备,该硬盘设备必须存在于主机上;  
  3. Type=fileio:表示共享设备类型,fileio表示使用一块硬盘进行共享存储;  
  4. ScsiId=xyz:表示标识符,建议设置为和Target相同的值;  
  5. ScsiSN=xyz:表示标识符,建议设置为Target相同的值。  

为了便于识别共享存储,教程使用的配置如下。

  1. Target iqn.2018-08.com.wanghualang:storage  
  2. Lun 0 Path=/dev/sdb,Type=fileio,ScsiId=storage,ScsiSN=storage  

  1. [root@Wanghualang-C ~]# echo "Target iqn.2018-08.com.wanghualang:storage" >> /etc/iet/ietd.conf  
  2. [root@Wanghualang-C ~]# echo "Lun 0 Path=/dev/sdb,Type=fileio,ScsiId=storage,ScsiSN=storage>> /etc/iet/ietd.conf  
  3. [root@Wanghualang-C ~]# /etc/init.d/iscsi-target start  
  4. [root@Wanghualang-C ~]# chkconfig --add iscsi-target  
  5. [root@Wanghualang-C ~]# chkconfig iscsi-target on  

第二步 测试挂载共享存储

A机、B机都需要测试挂载共享存储磁盘,A机需要依次进行安装iscsi-initiator、创建分区、格式化分区、屏蔽磁盘检查、测试挂载共享存储磁盘;B机则只需要安装iscsi-initiator、测试挂载共享存储磁盘即可。

主用服务器操作篇 - Wanghualang-A

安装iSCSI-Initiator-Utils,搜索发现远程共享存储磁盘,最终得到一块新的网络磁盘,如下图。

  1. [root@Wanghualang-A ~]# yum -y install iscsi-initiator-utils  
  2. [root@Wanghualang-A ~]# iscsiadm -m discovery -t sendtargets -p 192.168.1.203  
  3. [root@Wanghualang-A ~]# /etc/init.d/iscsi start  
  4. [root@Wanghualang-A ~]# fdisk -l  

使用HeartBeat搭建WordPress网站高可用集群

扩展阅读展开

A机、B机只需要执行一次discovery发现操作,系统将会记录共享磁盘信息,如果需要删除共享磁盘相关信息,可以进入以下路径进行删除.

[root@Wanghualang-A ~]# cd /var/lib/iscsi/send_targets/
[root@Wanghualang-A ~]# cd /var/lib/iscsi/nodes

首先确认网络磁盘在本地的盘符,比如教程中就是/dev/sdb,再创建共享存储分区,磁盘分区的操作可以参考Gif动画。

  1. [root@Wanghualang-A ~]# fdisk /dev/sdb  

使用HeartBeat搭建WordPress网站高可用集群

格式化分区

  1. [root@Wanghualang-A ~]# mkfs.ext4 /dev/sdb5  

屏蔽磁盘检查

  1. [root@Wanghualang-A ~]# tune2fs -c -1 -i 0 /dev/sdb5  

创建挂载目录

  1. [root@Wanghualang-A ~]# mkdir /mnt/wanghualang  

测试挂载存储磁盘,必须确保能正常挂载,如下图,挂载成功后直接卸载即可。

  1. [root@Wanghualang-A ~]# mount /dev/sdb5 /mnt/wanghualang  
  2. [root@Wanghualang-A ~]# df -h  
  3. [root@Wanghualang-A ~]# umount /mnt/wanghualang  

使用HeartBeat搭建WordPress网站高可用集群

备用服务器操作篇 - Wanghualang-B

安装iSCSI-Initiator-Utils

  1. [root@Wanghualang-B ~]# yum -y install iscsi-initiator-utils  
  2. [root@Wanghualang-B ~]# iscsiadm -m discovery -t sendtargets -p 192.168.1.203  
  3. [root@Wanghualang-B ~]# /etc/init.d/iscsi start  
  4. [root@Wanghualang-B ~]# fdisk -l  

测试挂载存储磁盘

  1. [root@Wanghualang-B ~]# mkdir /mnt/wanghualang  
  2. [root@Wanghualang-B ~]# mount /dev/sdb5 /mnt/wanghualang  
  3. [root@Wanghualang-B ~]# df -h  
  4. [root@Wanghualang-B ~]# umount /mnt/wanghualang  

集群软件篇

第三步 准备工作

为保证实验顺利进行,A机、B机都需要完成必要的准备工作,两台服务器的操作除了互相发送公钥的主机IP地址不同之外,其余操作完全一样,每一小步操作建议A机、B机同时进行。

禁用SElinux

  1. [root@Wanghualang-A ~]# setenforce 0      
  2. [root@Wanghualang-A ~]# sed -ri 's#^(SELINUX=).*#\1disabled#g' /etc/selinux/config    

禁用防火墙

  1. [root@Wanghualang-A ~]# service iptables stop  
  2. [root@Wanghualang-A ~]# service ip6tables stop  
  3. [root@Wanghualang-A ~]# chkconfig iptables off  
  4. [root@Wanghualang-A ~]# chkconfig ip6tables off  

安装SSH客户端

  1. [root@Wanghualang-A ~]# yum -y install openssh-clients  

生成SSH密钥,如果不打算设置密钥验证密码的话,执行命令后连按三次回车即可。

  1. [root@Wanghualang-A ~]# ssh-keygen -t rsa  

发送A机公钥给B机服务器,首次登陆需要选择yes,并手动输入一次对方主机的登陆密码,以后就不用了。

  1. [root@Wanghualang-A ~]# scp -r /root/.ssh/id_rsa.pub 192.168.1.202:/root/.ssh/authorized_keys  

再发送B机公钥给A机服务器,首次登陆需要选择yes,并手动输入一次对方主机的登陆密码,以后就不用了。

  1. [root@Wanghualang-B ~]# scp -r /root/.ssh/id_rsa.pub 192.168.1.201:/root/.ssh/authorized_keys  

添加主机表

  1. [root@Wanghualang-A ~]# echo "192.168.1.201 Wanghualang-A" >> /etc/hosts  
  2. [root@Wanghualang-A ~]# echo "192.168.1.202 Wanghualang-B" >> /etc/hosts  

创建HA用户和用户组

  1. [root@Wanghualang-A ~]# groupadd haclient  
  2. [root@Wanghualang-A ~]# useradd -M hacluster -s /sbin/nologin -g haclient  

设置环境变量,必须重新登陆一次终端才能生效,建议大家配置完毕后立即退出终端,重新登陆一次。

  1. [root@Wanghualang-A ~]# vim /root/.bash_profile  

  1. export PREFIX=/usr/local/heartbeat  
  2. export LCRSODIR=$PREFIX/libexec/lcrso   
  3. export CLUSTER_USER=hacluster  
  4. export CLUSTER_GROUP=haclient  
  5. export CFLAGS="$CFLAGS -I$PREFIX/include -L$PREFIX/lib"  
  6. getent group ${CLUSTER_GROUP} >/dev/null || groupadd -r ${CLUSTER_GROUP}  
  7. getent passwd ${CLUSTER_USER} >/dev/null || useradd -r -g ${CLUSTER_GROUP} -d /var/lib/heartbeat/cores/hacluster -s /sbin/nologin -c "cluster user" ${CLUSTER_USER}  

第四步 安装集群软件

A机、B机都需要安装集群软件,这一步中的所有操作均适用于两台服务器,每一小步操作强烈建议A机、B机同时进行。注意,在安装集群软件之前,两台服务器必须要重新登陆一次SSH终端,这样第三步中设置的环境变量才能生效,否则会影响接下来的软件安装。

下载软件源码包

  1. [root@Wanghualang-A ~]# cd /usr/local/src/  
  2. [root@Wanghualang-A src]# wget --no-check-certificate https://download.wanghualang.com/Heartbeat-3.0.6.tar.bz2  
  3. [root@Wanghualang-A src]# wget --no-check-certificate https://download.wanghualang.com/Cluster-Glue-1.0.12.tar.bz2  
  4. [root@Wanghualang-A src]# wget --no-check-certificate https://download.wanghualang.com/resource-agents-3.9.6.tar.gz  

安装依赖包

  1. [root@Wanghualang-A ~]# yum install -y asciidoc swig autoconf automake intltool libtool libtool-ltdl-devel cluster-glue-libs-devel docbook-dtds docbook-style-xsl glib2-devel libxml2 libxml2-devel e2fsprogs-devel libxslt-devel libuuid-devel gettext-devel bzip2-devel  

编译安装Cluster Glue

  1. [root@Wanghualang-A ~]# cd /usr/local/src/  
  2. [root@Wanghualang-A src]# tar xjf Cluster-Glue-1.0.12.tar.bz2  
  3. [root@Wanghualang-A src]# cd Reusable-Cluster-Components-glue--0a7add1d9996/  
  4. [root@Wanghualang-A Reusable-Cluster-Components-glue--0a7add1d9996]# ./autogen.sh  
  5. [root@Wanghualang-A Reusable-Cluster-Components-glue--0a7add1d9996]# ./configure --prefix=$PREFIX  --with-daemon-user=${CLUSTER_USER} --with-daemon-group=${CLUSTER_GROUP} --enable-fatal-warnings=no  
  6. [root@Wanghualang-A Reusable-Cluster-Components-glue--0a7add1d9996]# make  
  7. [root@Wanghualang-A Reusable-Cluster-Components-glue--0a7add1d9996]# make install  

编译安装Resource Agents

  1. [root@Wanghualang-A ~]# cd /usr/local/src/  
  2. [root@Wanghualang-A src]# tar xzf resource-agents-3.9.6.tar.gz   
  3. [root@Wanghualang-A src]# cd resource-agents-3.9.6  
  4. [root@Wanghualang-A resource-agents-3.9.6]# ./autogen.sh  
  5. [root@Wanghualang-A resource-agents-3.9.6]# ./configure --prefix=$PREFIX --enable-fatal-warnings=no  
  6. [root@Wanghualang-A resource-agents-3.9.6]# make  
  7. [root@Wanghualang-A resource-agents-3.9.6]# make install  

编译安装Heartbeat

  1. [root@Wanghualang-A ~]# cd /usr/local/src/  
  2. [root@Wanghualang-A src]# tar xjf Heartbeat-3.0.6.tar.bz2  
  3. [root@Wanghualang-A src]# cd Heartbeat-3-0-958e11be8686  
  4. [root@Wanghualang-A Heartbeat-3-0-958e11be8686]# ./bootstrap  
  5. [root@Wanghualang-A Heartbeat-3-0-958e11be8686]# ./configure --prefix=$PREFIX --enable-fatal-warnings=no  
  6. [root@Wanghualang-A Heartbeat-3-0-958e11be8686]# make  
  7. [root@Wanghualang-A Heartbeat-3-0-958e11be8686]# make install  

配置HeartBeat系统服务项,个人建议不要设置开机启动。

  1. [root@Wanghualang-A ~]# chkconfig --add heartbeat  
  2. [root@Wanghualang-A ~]# chkconfig heartbeat off  

第五步 配置集群软件

A机、B机都需要配置集群软件,除了心跳检测的IP地址不同之外,其余配置参数必须完全一致,到了配置心跳IP地址的时候,我会再次强调注意。初次接触Heartbeat的朋友,建议阅读所有扩展阅读。

扩展阅读展开

介绍一下Heartbeat集群软件中四个最重要的配置文件,分别是ha.cf、authkeys、haresources、cib.xml,配置文件用途和教程预设文件路径如下。

核心配置文件:/usr/local/heartbeat/etc/ha.d/ha.cf
认证配置文件:/usr/local/heartbeat/etc/ha.d/authkeys
节点配置文件:/usr/local/heartbeat/etc/ha.d/haresources
节点配置文件:/usr/local/heartbeat/var/lib/heartbeat/crm/cib.xml

认证配置文件(authkeys)用于设定集群认证方式,目前有crc、md5、sha1三种加密,安全性越好,系统资源占用率越高,安全性从高到低排序:sha1>md5>crc;
核心配置文件(ha.cf)用于设定集群管理方式、日志文件路径、心跳检测间隔等内容,其中集群管理方式将决定使用节点配置文件haresources,还是节点配置文件cib.xml;
节点配置文件(haresources)是HeartBeat 1.x版本中默认使用的配置文件,如果核心配置文件未启用crm集群管理方式,节点配置文件将使用haresources;
节点配置文件(cib.xml)是Heartbeat 2.x之后的版本中推荐使用的配置文件,如果核心配置文件已启用crm集群管理方式,节点配置文件将使用cib.xml。

拷贝配置文件模版,因模版文件里的内容几乎都是被注释的状态,换句话说就是和空白文件没什么区别,仅仅是辅助大家理解阅读和修改,有需要的朋友可以执行下面三条命令拷贝模版文件。

[root@Wanghualang-A ~]# cp -rf /usr/local/heartbeat/share/doc/heartbeat/ha.cf /usr/local/heartbeat/etc/ha.d
[root@Wanghualang-A ~]# cp -rf /usr/local/heartbeat/share/doc/heartbeat/authkeys /usr/local/heartbeat/etc/ha.d
[root@Wanghualang-A ~]# cp -rf /usr/local/heartbeat/share/doc/heartbeat/haresources /usr/local/heartbeat/etc/ha.d

为了方便演示,教程中选择直接创建全新的同名文件进行编辑,配置文件中相关参数的详细说明见下面的扩展阅读。

配置ha.cf

不同的运行环境决定不同的配置参数,有必要再次说明一下实验环境。本次实验是使用两台虚拟机模拟服务器集群,不启用crm集群管理方式,心跳通信方式选择最为常见的以太网模式,并采用单播网络形式来组织心跳检测,所以配置文件中将不会出现以太网的广播、组播方式,也不会出现串口设备通信的相关参数,最终配置如下:

扩展阅读展开

  1. #调试日志文件,辅助分析启动故障原因,运维排错必备  
  2. debugfile /var/log/ha-debug  
  3.   
  4. #集群日志文件  
  5. logfile /var/log/ha-log  
  6.   
  7. #心跳检测间隔时间,单位是秒。表示每隔2秒心跳网卡会发起一次广播,以确认对方的服务器是否存活。  
  8. keepalive 2  
  9.   
  10. #死亡时间,单位是秒。表示备用服务器超过30秒没有接收到主用服务器的心跳信号,就会主管接管主用服务器上的业务。  
  11. deadtime 30  
  12.   
  13. #警告时间,单位是秒。表示心跳延迟的时间,备用节点超过10秒没有接收到主用服务器的心跳信号,会记录一次警告,但不会主动接管主用服务器上的业务,可以配合deadtime使用。  
  14. warntime 10  
  15.   
  16. #服务器宕机到再次启动的过程中,必然会出现一段时间的网络中断,该参数就是解决这个时间间隔带来的影响,数值一般是deadtime的2~3倍,具体设置需要根据实际需要设置。  
  17. initdead 120  
  18.   
  19. #通信端口,默认端口号694  
  20. udpport 694  
  21.   
  22. #单播网络组织心跳检测,因为就只有两台服务器,即备用服务器只有一台,所以没必要使用广播、组播。注意,心跳网卡设备和对端服务器IP地址不要写错。  
  23. ucast eth1 10.0.0.2  
  24.   
  25. #自动切回开关,选择On,表示当主用服务器从故障中恢复正常后,会主动向备用服务器请求资源接管。  
  26. auto_failback on  
  27.   
  28. #节点资源列表,因为之前已经修改过本机的Hosts文件,直接写Wanghualang-A、Wanghualang-B来代替主用服务器和备用服务器的IP地址即可。  
  29. node    Wanghualang-A  
  30. node    Wanghualang-B  
  31.   
  32. #网络测试节点,主要是用于测试本机网卡是否正常工作,或者说本机网络通信是否正常,推荐与网关设备进行通信。  
  33. ping 192.168.1.1  
  34.   
  35. #集群自带的脚本插件,测试本机网络状态是否正常。  
  36. apiauth ipfail gid=haclient uid=hacluster  
  37. respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail -m 100 -d 5s  

  1. [root@Wanghualang-A ~]# vim /usr/local/heartbeat/etc/ha.d/ha.cf  

  1. debugfile /var/log/ha-debug  
  2. logfile /var/log/ha-log  
  3. keepalive 2  
  4. deadtime 30  
  5. warntime 10  
  6. initdead 120  
  7. udpport 694  
  8. ucast eth1 10.0.0.2  
  9. auto_failback on  
  10. node Wanghualang-A  
  11. node Wanghualang-B  
  12. ping 192.168.1.1  
  13. apiauth ipfail gid=haclient uid=hacluster  
  14. respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail -m 100 -d 5s  

特别说明:B机在配置ha.cf的时候,心跳检测应该配置为:ucast eth1 10.0.0.1,其余和A机一样。

配置haresources

配置集群资源文件非常关键,对编辑内容有一定的格式规范要求,格式为:主节点+集群IP地址+共享存储+应用服务。这里说明一下,如果大家仅仅是为了搭建测试HeartBeat的故障转移功能,而并非实现Web高可用的话,资源文件就写成下面的内容即可。本次实验的最终目的是实现Web高可用,等配置好Apache、MySQL、WordPress之后,会再次回来编辑haresources,目前先跳过吧。

扩展阅读展开

Wanghualang-A:网站主用服务器节点,因为之前已经修改过本机的Hosts文件,直接写Wanghualang-A来代替主用服务器的IP地址即可;
IPaddr::192.168.1.250/24/eth0/:集群服务虚拟IP地址/子网掩码/业务网络网卡设备;
Filesystem::/dev/sdb5::/mnt/wanghualang::ext4:挂载共享存储,硬盘设备、挂载节点、磁盘文件系统要根据实际情况修改;
mysqld:实质上这里是通过调用mysqld服务的启动脚本,调用路径为/etc/init.d,其实就是一个应用标识符而已;
httpd:实质上这里是通过调用httpd服务的启动脚本,调用路径为/etc/init.d,其实就是一个应用标识符而已。

  1. [root@Wanghualang-A ~]# vim /usr/local/heartbeat/etc/ha.d/haresources  

  1. Wanghualang-A IPaddr::192.168.1.250/24/eth0/ Filesystem::/dev/sdb5::/mnt/wanghualang::ext4  

配置authkeys

为了提高运行效率,教程中使用的是安全性最低的crc。

  1. [root@Wanghualang-A ~]# vim /usr/local/heartbeat/etc/ha.d/authkeys  

  1. auth 1  
  2. 1 crc  

修改认证配置文件权限

  1. [root@Wanghualang-A ~]# chmod 600 /usr/local/heartbeat/etc/ha.d/authkeys  

创建集群插件程序软链接

  1. [root@Wanghualang-A ~]# ln -s /usr/local/heartbeat/lib64/heartbeat/plugins/RAExec/* /usr/local/heartbeat/lib/heartbeat/plugins/RAExec/  
  2. [root@Wanghualang-A ~]# ln -s /usr/local/heartbeat/lib64/heartbeat/plugins/* /usr/local/heartbeat/lib/heartbeat/plugins/  

第六步 测试集群软件

如果只是为了搭建测试HeartBeat的故障转移功能,而不是配置Web高可用,那么实验就快结束了,现在就可以开始测试故障转移功能。

启动A机集群软件

  1. [root@Wanghualang-A ~]# service heartbeat start  

在等待启动的过程中,建议大家开启第二个终端窗口,实时观察集群调试日志。

  1. [root@Wanghualang-A ~]# tail -f /var/log/ha-debug  

一切顺利的话,A机会成功挂载共享存储磁盘,并且eth0网卡上会出现一个192.168.1.250的虚拟IP地址,如下图。

使用HeartBeat搭建WordPress网站高可用集群

当A机集群软件顺利启动后,再启动B机集群软件。

  1. [root@Wanghualang-B ~]# service heartbeat start  

依旧建议大家观察集群调试日志,细心的的朋友就会发现B机的调试日志和A机有着明显的不同。

  1. [root@Wanghualang-B ~]# tail -f /var/log/ha-debug  

一切顺利的话,B机是不会挂载共享存储磁盘,eth0网卡上也不会出现虚拟IP地址,如下图。

使用HeartBeat搭建WordPress网站高可用集群

开始测试集群的服务器故障转移,打开虚拟机主页,右键点击A机,依次点击电源-关闭客户机,模拟电源故障断电、内核崩溃宕机,如下图。

使用HeartBeat搭建WordPress网站高可用集群

当A机虚拟机宕机后,B机若能自动挂载共享存储磁盘,并接管虚拟服务IP地址192.168.1.250,说明集群故障转移成功,如下图。

使用HeartBeat搭建WordPress网站高可用集群

如果集群核心配置文件中开启了auto_failback参数,那么当A机恢复正常,并启动集群软件后,A机会主动挂载共享存储磁盘,并接管虚拟服务IP地址192.168.1.250。

架设网站篇

第七步 编译安装Web环境 + WordPress网站程序

说明一下,接下来要正式开始部署应用,请确保集群资源已切换至A机,B机随时待命!A机、B机均需要搭建Web环境,教程中将使用编译安装的方式部署LAMP,为了减少差错下文会详细记录A机、B机的具体操作。

主用服务器操作篇 - Wanghualang-A

下载、解压源码包

  1. [root@Wanghualang-A ~]# cd /usr/local/src/  
  2. [root@Wanghualang-A src]# wget --no-check-certificate http://cn2.php.net/distributions/php-7.2.8.tar.gz  
  3. [root@Wanghualang-A src]# wget --no-check-certificate http://mirrors.hust.edu.cn/apache/apr/apr-1.6.3.tar.gz  
  4. [root@Wanghualang-A src]# wget --no-check-certificate http://mirrors.hust.edu.cn/apache/apr/apr-util-1.6.1.tar.gz  
  5. [root@Wanghualang-A src]# wget --no-check-certificate http://mirrors.shu.edu.cn/apache//httpd/httpd-2.4.34.tar.gz  
  6. [root@Wanghualang-A src]# wget --no-check-certificate https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-boost-5.7.23.tar.gz  
  7. [root@Wanghualang-A src]# tar xzf php-7.2.8.tar.gz   
  8. [root@Wanghualang-A src]# tar xzf apr-1.6.3.tar.gz   
  9. [root@Wanghualang-A src]# tar xzf apr-util-1.6.1.tar.gz   
  10. [root@Wanghualang-A src]# tar xzf httpd-2.4.34.tar.gz   
  11. [root@Wanghualang-A src]# tar xzf mysql-boost-5.7.23.tar.gz  

安装Apache,新建Apache用户和用户组。

  1. [root@Wanghualang-A ~]# groupadd apache  
  2. [root@Wanghualang-A ~]# useradd -M apache -s /sbin/nologin -g apache  

安装依赖包

  1. [root@Wanghualang-A ~]# yum -y install pcre-devel expat-devel  

编译安装软件

  1. [root@Wanghualang-A ~]# mv /usr/local/src/apr-1.6.3 /usr/local/src/httpd-2.4.34/srclib/apr/  
  2. [root@Wanghualang-A ~]# mv /usr/local/src/apr-util-1.6.1 /usr/local/src/httpd-2.4.34/srclib/apr-util/  
  3. [root@Wanghualang-A ~]# cd /usr/local/src/httpd-2.4.34  
  4. [root@Wanghualang-A httpd-2.4.34]# ./configure  --prefix=/usr/local/apache  --enable-charset-lite  --enable-rewrite  --enable-cgi  --enable-so  
  5. [root@Wanghualang-A httpd-2.4.34]# make  
  6. [root@Wanghualang-A httpd-2.4.34]# make install  

配置服务启动脚本,但不用设置开机启动,统一由集群软件来控制。

  1. [root@Wanghualang-A ~]# cp -rf /usr/local/apache/bin/apachectl /etc/init.d/httpd      
  2. [root@Wanghualang-A ~]# chmod 755 /etc/init.d/httpd      
  3. [root@Wanghualang-A ~]# sed -i '1i\#chkconfig: - 85 15' /etc/init.d/httpd      
  4. [root@Wanghualang-A ~]# chkconfig --add httpd  

安装MySQL,新建MySQL用户和用户组。

  1. [root@Wanghualang-A ~]# groupadd mysql    
  2. [root@Wanghualang-A ~]# useradd -M mysql -s /sbin/nologin -g mysql    

安装依赖包

  1. [root@Wanghualang-A ~]# yum -y install gcc-c++ cmake bison ncurses-devel  

编译安装软件,在安装之前请确保A机已正常启动集群软件,或者说请确保A机已正常挂载共享存储。因为到了初始化数据库时会设置共享存储路径作为MySQL数据的存放路径,且安装WordPress时需要使用虚拟IP地址作为网站访问入口。

  1. [root@Wanghualang-A ~]# cd /usr/local/src/mysql-5.7.23/  
  2. [root@Wanghualang-A mysql-5.7.23]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/mnt/wanghualang/ -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_BOOST=boost   
  3. [root@Wanghualang-A mysql-5.7.23]# make  
  4. [root@Wanghualang-A mysql-5.7.23]# make install  

建议先删除系统默认创建的MySQL配置文件,再手动创建配置文件。

  1. [root@Wanghualang ~]# rm -rf /etc/my.cnf    
  2. [root@Wanghualang ~]# vim /etc/my.cnf  

  1. [client]    
  2. port = 3306    
  3. default-character-set=utf8    
  4. socket = /usr/local/mysql/mysql.sock    
  5.     
  6. [mysql]    
  7. port = 3306    
  8. default-character-set=utf8    
  9. socket = /usr/local/mysql/mysql.sock    
  10.     
  11. [mysqld]    
  12. user = mysql    
  13. basedir = /usr/local/mysql    
  14. datadir = /mnt/wanghualang  
  15. port = 3306    
  16. character_set_server=utf8    
  17. pid-file = /usr/local/mysql/mysqld.pid    
  18. socket = /usr/local/mysql/mysql.sock    
  19. server-id = 1    
  20.     
  21. sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES    

配置命令环境变量

  1. [root@Wanghualang-A ~]# echo "export PATH="/usr/local/mysql/bin:$PATH">> /etc/profile        
  2. [root@Wanghualang-A ~]# source /etc/profile  

更改数据库目录属主、属组

  1. [root@Wanghualang-A ~]# chown -R mysql:mysql /usr/local/mysql  

清空共享存储数据

  1. [root@Wanghualang-A ~]# rm -rf /mnt/wanghualang/*  

初始化数据库

  1. [root@Wanghualang-A ~]# /usr/local/mysql/bin/mysqld --initialize-insecure  --user=mysql  --basedir=/usr/local/mysql  --datadir=/mnt/wanghualang  

配置服务启动脚本,但不用设置开机启动,统一由集群软件来控制。

  1. [root@Wanghualang-A ~]# cp -rf /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld  
  2. [root@Wanghualang-A ~]# chmod 755 /etc/init.d/mysqld  
  3. [root@Wanghualang-A ~]# chkconfig --add mysqld  
  4. [root@Wanghualang-A ~]# chkconfig mysqld off  

安装PHP,安装依赖包。

  1. [root@Wanghualang-A ~]# yum -y install libjpeg-devel libpng-devel freetype-devel libxml2-devel zlib-devel curl-devel libicu-devel openssl-devel  

编译安装软件

  1. [root@Wanghualang-A ~]# cd /usr/local/src/php-7.2.8  
  2. [root@Wanghualang-A php-7.2.8]#  ./configure  --prefix=/usr/local/php  --with-apxs2=/usr/local/apache/bin/apxs  --with-mysql-sock=/usr/local/mysql/mysql.sock  --with-pdo-mysql  --with-mysqli  --with-zlib  --with-curl  --with-gd  --with-jpeg-dir  --with-png-dir  --with-freetype-dir  --with-openssl  --enable-mbstring  --enable-xml  --enable-session  --enable-ftp  --enable-pdo  --enable-tokenizer  --enable-zip  --enable-intl  
  3. [root@Wanghualang-A php-7.2.8]#  make  
  4. [root@Wanghualang-A php-7.2.8]#  make install  

创建PHP配置文件

  1. [root@Wanghualang-A ~]# cp -rf /usr/local/src/php-7.2.8/php.ini-development /usr/local/php/lib/php.ini  

配置数据库接口

  1. [root@Wanghualang-A ~]# sed -i 's/mysqli.default_socket =/mysqli.default_socket = \/usr\/local\/mysql\/mysql.sock/' /usr/local/php/lib/php.ini   

配置Apache启动用户和用户组

  1. [root@Wanghualang-A ~]# sed -i 's/User daemon/User apache/' /usr/local/apache/conf/httpd.conf  
  2. [root@Wanghualang-A ~]# sed -i 's/Group daemon/Group apache/' /usr/local/apache/conf/httpd.conf  

配置主机名称

  1. [root@Wanghualang-A ~]# sed -i 's/#ServerName www.example.com:80/ServerName localhost.localdomain/' /usr/local/apache/conf/httpd.conf  

配置解析PHP

  1. [root@Wanghualang-A ~]# vim /usr/local/apache/conf/httpd.conf  

大约在257行,找到:

  1. <IfModule dir_module>  
  2. DirectoryIndex index.html  
  3. </IfModule>  

在index.html后面新增index.php,注意之间有一个空格键,最终修改如下:

  1. <IfModule dir_module>      
  2. DirectoryIndex index.html index.php      
  3. </IfModule>  

大约在第394行,找到:

  1. AddType application/x-compress .Z  
  2. AddType application/x-gzip .gz .tgz  

在下面添加AddType application/x-httpd-php .php和AddType application/x-httpd-php-source .phps,最终修改如下:

  1. AddType application/x-compress .Z    
  2. AddType application/x-gzip .gz .tgz    
  3. AddType application/x-httpd-php .php    
  4. AddType application/x-httpd-php-source .phps   

启动Apache、MySQL

  1. [root@Wanghualang-A ~]# service httpd start  
  2. [root@Wanghualang-A ~]# service mysqld start  

创建WordPress网站的数据库、用户名、密码,并修改MySQL root管理员密码。教程中WordPress网站的数据库名为wordpress、用户名为wanghualang、密码为123456。

  1. [root@Wanghualang-A ~]# mysql  
  2. mysql>set password for 'root'@'localhost' = password('123456');  
  3. mysql>create database wordpress;  
  4. mysql>grant all on wordpress.* to 'wanghualang'@'localhost' identified by '123456';   
  5. mysql>flush privileges;  
  6. mysql>exit  

第八步 安装WordPress网站

拷贝WordPress网站源码

  1. [root@Wanghualang-A ~]# cd /usr/local/apache/htdocs/  
  2. [root@Wanghualang-A htdocs]# rm -rf *  
  3. [root@Wanghualang-A htdocs]# wget --no-check-certificate https://download.wanghualang.com/wordpress-4.9.4-zh_CN.tar.gz  
  4. [root@Wanghualang-A htdocs]# tar xzf wordpress-4.9.4-zh_CN.tar.gz && rm -rf wordpress-4.9.4-zh_CN.tar.gz && mv wordpress/* ./ && rm -rf wordpress  

更改网站目录属主、属组

  1. [root@Wanghualang-A ~]# chown -R apache:apache /usr/local/apache/htdocs/  

安装WordPress,打开网页浏览器访问:http://192.168.1.250,安装配置WordPress非常简单,初次接触WordPress的朋友可以参考流程截图。

安装Rsync,这是一款非常实用的数据同步工具,方便A机、B机进行WordPress网站静态资源同步,保证网站静态资源一致性。如果大家日后不需要频繁修改网站静态资源(如样式表、背景图片等等),这一步其实是可以跳过的,根据实际需要配置吧。若不配置Rsync,当A机上的网站静态资源发生变化后,自己想办法把修改后的内容同步到B机对应目录中去就可以了,比如说OpenSSH客户端自带的SCP命令。

  1. [root@Wanghualang-A ~]# yum -y install rsync  

配置A机上的Apache网站目录作为同步源

  1. [root@Wanghualang-A ~]# vim /etc/rsyncd.conf  

  1. motd file = /etc/rsyncd.motd  
  2. transfer logging = yes  
  3. log file = /var/log/rsync.log  
  4. pid file = /var/run/rsync.pid  
  5. lock file = /var/run/rsync.lock    
  6. port = 873    
  7. address = 192.168.1.201  
  8. uid = root    
  9. gid = root    
  10. user chroot = yes    
  11. read only = yes    
  12. max connections = 10    
  13.     
  14. [wordpress_rsync]    
  15. comment = WordPress Rsync    
  16. path = /usr/local/apache/htdocs/  
  17. ignore error  
  18. auth users = wordpress  
  19. secrets file = /etc/rsyncd.secrets  
  20. list = true  

创建密码文件,同步用户名为wordpress,同步密码为123456。

  1. [root@Wanghualang-A ~]# echo "wordpress:123456" >> /etc/rsyncd.secrets      
  2. [root@Wanghualang-A ~]# chmod 600 /etc/rsyncd.secrets    

启动服务并设置开机启动

  1. [root@Wanghualang-A ~]# rsync --daemon --config=/etc/rsyncd.conf      
  2. [root@Wanghualang-A ~]# echo "/usr/bin/rsync --daemon --config=/etc/rsyncd.conf" >> /etc/rc.local    

确保A机上的WordPress网站可以正常访问后,停止Apache、MySQL服务。进入MySQL的数据目录,将所有数据打包为一个压缩包,并把压缩包传送到B机的/tmp目录下,最后删除共享存储里的一切数据并卸载共享存储。这一步的目的是为接下来的B机篇做必要的准备,确保WordPress网站数据库一致性。

  1. [root@Wanghualang-A ~]# service httpd stop  
  2. [root@Wanghualang-A ~]# service mysqld stop  
  3. [root@Wanghualang-A ~]# cd /mnt/wanghualang/  
  4. [root@Wanghualang-A wanghualang]# tar czf /tmp/wp_data.tar.gz ./  
  5. [root@Wanghualang-A wanghualang]# scp /tmp/wp_data.tar.gz root@Wanghualang-B:/tmp  
  6. [root@Wanghualang-A wanghualang]# rm -rf /mnt/wanghualang/*  

停止集群软件,这一步的目的是为接下来的B机篇做必要的准备,确保B机可以正常接管虚拟IP地址以及挂载共享存储。

  1. [root@Wanghualang-A ~]# service heartbeat stop  

备用服务器操作篇 - Wanghualang-B

安装Apache,新建Apache用户和用户组。

  1. [root@Wanghualang-B ~]# groupadd apache  
  2. [root@Wanghualang-B ~]# useradd -M apache -s /sbin/nologin -g apache  

下载、解压源码包

  1. [root@Wanghualang-B ~]# cd /usr/local/src/  
  2. [root@Wanghualang-B src]# wget --no-check-certificate http://cn2.php.net/distributions/php-7.2.8.tar.gz  
  3. [root@Wanghualang-B src]# wget --no-check-certificate http://mirrors.hust.edu.cn/apache/apr/apr-1.6.3.tar.gz  
  4. [root@Wanghualang-B src]# wget --no-check-certificate http://mirrors.hust.edu.cn/apache/apr/apr-util-1.6.1.tar.gz  
  5. [root@Wanghualang-B src]# wget --no-check-certificate http://mirrors.shu.edu.cn/apache//httpd/httpd-2.4.34.tar.gz  
  6. [root@Wanghualang-B src]# wget --no-check-certificate https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-boost-8.0.12.tar.gz  
  7. [root@Wanghualang-B src]# tar xzf php-7.2.8.tar.gz   
  8. [root@Wanghualang-B src]# tar xzf apr-1.6.3.tar.gz   
  9. [root@Wanghualang-B src]# tar xzf apr-util-1.6.1.tar.gz   
  10. [root@Wanghualang-B src]# tar xzf httpd-2.4.34.tar.gz   
  11. [root@Wanghualang-B src]# tar xzf mysql-boost-5.7.23.tar.gz  

安装依赖包

  1. [root@Wanghualang-B ~]# yum -y install pcre-devel expat-devel  

编译安装软件

  1. [root@Wanghualang-B ~]# mv /usr/local/src/apr-1.6.3 /usr/local/src/httpd-2.4.34/srclib/apr/  
  2. [root@Wanghualang-B ~]# mv /usr/local/src/apr-util-1.6.1 /usr/local/src/httpd-2.4.34/srclib/apr-util/  
  3. [root@Wanghualang-B ~]# cd /usr/local/src/httpd-2.4.34  
  4. [root@Wanghualang-B httpd-2.4.34]# ./configure  --prefix=/usr/local/apache  --enable-charset-lite  --enable-rewrite  --enable-cgi  --enable-so  
  5. [root@Wanghualang-B httpd-2.4.34]# make  
  6. [root@Wanghualang-B httpd-2.4.34]# make install  

配置服务启动脚本,但不用设置开机启动,统一由集群软件来控制。

  1. [root@Wanghualang-B ~]# cp -rf /usr/local/apache/bin/apachectl /etc/init.d/httpd      
  2. [root@Wanghualang-B ~]# chmod 755 /etc/init.d/httpd      
  3. [root@Wanghualang-B ~]# sed -i '1i\#chkconfig: - 85 15' /etc/init.d/httpd      
  4. [root@Wanghualang-B ~]# chkconfig --add httpd  

安装MySQL,新建MySQL用户和用户组。

  1. [root@Wanghualang-B ~]# groupadd mysql    
  2. [root@Wanghualang-B ~]# useradd -M mysql -s /sbin/nologin -g mysql    

安装依赖包

  1. [root@Wanghualang-B ~]# yum -y install cmake gcc-c++ bison ncurses-devel  

编译安装软件

  1. [root@Wanghualang-B ~]# cd /usr/local/src/mysql-5.7.23  
  2. [root@Wanghualang-B mysql-5.7.23]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/mnt/wanghualang/ -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_BOOST=boost   
  3. [root@Wanghualang-B mysql-5.7.23]# make  
  4. [root@Wanghualang-B mysql-5.7.23]# make install  

建议先删除系统默认创建的MySQL配置文件,再手动创建配置文件。

  1. [root@Wanghualang ~]# rm -rf /etc/my.cnf  
  2. [root@Wanghualang ~]# vim /etc/my.cnf  

  1. [client]    
  2. port = 3306    
  3. default-character-set=utf8    
  4. socket = /usr/local/mysql/mysql.sock    
  5.     
  6. [mysql]    
  7. port = 3306    
  8. default-character-set=utf8    
  9. socket = /usr/local/mysql/mysql.sock    
  10.     
  11. [mysqld]    
  12. user = mysql    
  13. basedir = /usr/local/mysql    
  14. datadir = /mnt/wanghualang  
  15. port = 3306    
  16. character_set_server=utf8    
  17. pid-file = /usr/local/mysql/mysqld.pid    
  18. socket = /usr/local/mysql/mysql.sock    
  19. server-id = 1    
  20.     
  21. sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES    

配置命令环境变量

  1. [root@Wanghualang-B ~]# echo "export PATH="/usr/local/mysql/bin:$PATH">> /etc/profile        
  2. [root@Wanghualang-B ~]# source /etc/profile  

更改数据库目录属主、属组

  1. [root@Wanghualang-B ~]# chown -R mysql:mysql /usr/local/mysql   

初始化数据库

  1. [root@Wanghualang-B ~]# /usr/local/mysql/bin/mysqld --initialize-insecure  --user=mysql  --basedir=/usr/local/mysql  --datadir=/mnt/wanghualang  

配置服务启动脚本,但不用设置开机启动,统一由集群软件来控制。

  1. [root@Wanghualang-B ~]# cp -rf /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld  
  2. [root@Wanghualang-B ~]# chmod 755 /etc/init.d/mysqld  
  3. [root@Wanghualang-B ~]# chkconfig --add mysqld  
  4. [root@Wanghualang-B ~]# chkconfig mysqld off  

安装PHP,安装依赖包。

  1. [root@Wanghualang-B ~]# yum -y install libjpeg-devel libpng-devel freetype-devel libxml2-devel zlib-devel curl-devel libicu-devel openssl-devel  

编译安装软件

  1. [root@Wanghualang-B ~]# cd /usr/local/src/php-7.2.8  
  2. [root@Wanghualang-B php-7.2.8]#  ./configure  --prefix=/usr/local/php  --with-apxs2=/usr/local/apache/bin/apxs  --with-mysql-sock=/usr/local/mysql/mysql.sock  --with-pdo-mysql  --with-mysqli  --with-zlib  --with-curl  --with-gd  --with-jpeg-dir  --with-png-dir  --with-freetype-dir  --with-openssl  --enable-mbstring  --enable-xml  --enable-session  --enable-ftp  --enable-pdo  --enable-tokenizer  --enable-zip  --enable-intl  
  3. [root@Wanghualang-B php-7.2.8]#  make  
  4. [root@Wanghualang-B php-7.2.8]#  make install  

创建PHP配置文件

  1. [root@Wanghualang-B ~]# cp -rf /usr/local/src/php-7.2.8/php.ini-development /usr/local/php/lib/php.ini  

配置数据库接口

  1. [root@Wanghualang-B ~]# sed -i 's/mysqli.default_socket =/mysqli.default_socket = \/usr\/local\/mysql\/mysql.sock/' /usr/local/php/lib/php.ini   

配置Apache启动用户和用户组

  1. [root@Wanghualang-A ~]# sed -i 's/User daemon/User apache/' /usr/local/apache/conf/httpd.conf  
  2. [root@Wanghualang-A ~]# sed -i 's/Group daemon/Group apache/' /usr/local/apache/conf/httpd.conf  

配置主机名称

  1. [root@Wanghualang-A ~]# sed -i 's/#ServerName www.example.com:80/ServerName localhost.localdomain/' /usr/local/apache/conf/httpd.conf  

配置解析PHP

  1. [root@Wanghualang-B ~]# vim /usr/local/apache/conf/httpd.conf  

大约在257行,找到:

  1. <IfModule dir_module>  
  2. DirectoryIndex index.html  
  3. </IfModule>  

在index.html后面新增index.php,注意之间有一个空格键,最终修改如下。

  1. <IfModule dir_module>      
  2. DirectoryIndex index.html index.php      
  3. </IfModule>  

大约在第394行,找到:

  1. AddType application/x-compress .Z  
  2. AddType application/x-gzip .gz .tgz  

在下面添加AddType application/x-httpd-php .php和AddType application/x-httpd-php-source .phps,最终修改如下。

  1. AddType application/x-compress .Z    
  2. AddType application/x-gzip .gz .tgz    
  3. AddType application/x-httpd-php .php    
  4. AddType application/x-httpd-php-source .phps  

安装WordPress网站,因为A机安装了Rsync同步源,且早已搭建好WordPress网站,B机就可以直接同步A机上的WordPress网站静态数据。在B机上也安装Rsync,再新建一个同步时调用的密码文件,就可以正常进行数据同步了。

  1. [root@Wanghualang-B ~]# yum -y install rsync  
  2. [root@Wanghualang-B ~]# echo "123456" > /etc/rsyncd.password  
  3. [root@Wanghualang-B ~]# chmod 600 /etc/rsyncd.password  
  4. [root@Wanghualang-B ~]# rsync -av --delete --password-file=/etc/rsyncd.password wordpress@Wanghualang-A::wordpress_rsync /usr/local/apache/htdocs/  
  5. [root@Wanghualang-B ~]# ls /usr/local/apache/htdocs/  

更改网站目录属主、属组

  1. [root@Wanghualang-B ~]# chown -R apache:apache /usr/local/apache/htdocs/  

删除共享存储里所有数据

  1. [root@Wanghualang-B ~]# rm -rf /mnt/wanghualang/*  

解压之前A机传输过来的数据库备份压缩包到共享存储目录,并更改数据库数据目录属主、属组。

  1. [root@Wanghualang-B ~]# cd /mnt/wanghualang  
  2. [root@Wanghualang-B wanghualang]# tar xzf /tmp/wp_data.tar.gz ./  
  3. [root@Wanghualang-B wanghualang]# chown -R mysql:mysql ./  

启动Apache和MySQL启动服务后,打开网页浏览器访问:http://192.68.1.250,一切顺利的话,网站可以正常访问,管理后台也可以正常登陆。

  1. [root@Wanghualang-B ~]# service httpd start  
  2. [root@Wanghualang-B ~]# service mysqld start  

停止集群软件,这一步其实可做可不做,主要是出于习惯,每当配置好一切后,我都会故意重启一次虚拟机,再进行最终结果测试。所以重启之前先正常停用集群,防止共享存储中的数据出现异常。

  1. [root@Wanghualang-B ~]# service heartbeat stop  

第九步 再次配置集群资源文件

至此,应用已经部署完毕,接下来就要把MySQL、Apache应用服务添加到集群资源文件中去,只需要在原来内容的末尾新增mysqld、httpd即可。A机、B机均需要配置集群资源文件,内容必须完全相同。

扩展阅读展开

Wanghualang-A:网站主用服务器节点,因为之前已经修改过本机的Hosts文件,直接写Wanghualang-A来代替主用服务器的IP地址即可;
IPaddr::192.168.1.250/24/eth0/:集群服务虚拟IP地址/子网掩码/业务网络网卡设备;
Filesystem::/dev/sdb5::/mnt/wanghualang::ext4:挂载共享存储,硬盘设备、挂载节点、磁盘文件系统要根据实际情况修改;
mysqld:实质上这里是通过调用mysqld服务的启动脚本,调用路径为/etc/init.d,其实就是一个应用标识符而已;
httpd:实质上这里是通过调用httpd服务的启动脚本,调用路径为/etc/init.d,其实就是一个应用标识符而已。

  1. [root@Wanghualang-A ~]# vim /usr/local/heartbeat/etc/ha.d/haresources  

  1. Wanghualang-A IPaddr::192.168.1.250/24/eth0/ Filesystem::/dev/sdb5::/mnt/wanghualang::ext4 mysqld httpd  

集群测试篇

第十步 测试Web高可用

在进行实验最终测试之前,出于习惯我都会重启A机、B机,建议大家也那么做。

  1. [root@Wanghualang-A ~]# reboot  
  2. [root@Wanghualang-B ~]# reboot  

重启完毕后,先登陆A机,启动集群。

  1. [root@Wanghualang-A ~]# service heartbeat start  

确保A机已分配到虚拟IP地址、已正常挂载共享存储、WordPress网站可以正常访问,管理后台可以正常登陆后,再登陆B机启动集群。

  1. [root@Wanghualang-B ~]# service heartbeat start  

开始进行Web高可用测试,打开虚拟机主页,右键点击A机,依次点击电源-关闭客户机,模拟电源故障断电、内核崩溃宕机。当A机虚拟机宕机后,B机若能自动挂载共享存储磁盘,并接管虚拟服务IP地址192.168.1.250,WordPress网站可以访问,管理后台可以正常登陆,说明本次实验成功!

继续来测试吧,当A机恢复正常后启动集群,A机若能自动挂载共享存储磁盘,并接管虚拟服务IP地址192.168.1.250,WordPress网站可以访问,管理后台可以正常登陆,说明本次实验成功!

  1. [root@Wanghualang-A ~]# service heartbeat start  

第十一步 监控应用状态

实验成功后,大家或许会有一个疑问,貌似只有当集群服务停用,或者服务器宕机时,HeartBeat才能派上用场,那么如果是MySQL、Apache应用发生了故障,HeartBeat岂不是摆设?表面上至少初步的阶段里面来看,确实是那么回事,所以监控应用状态成为了新的课题!监控应用的方法有很多,我就分享一个最简单粗暴的监控方法,有兴趣的朋友可以参考。

监控脚本思路

在A机上新建一个Shell脚本,监控Apache、MySQL进程状态,发现Apache或者MySQL异常时,将自动停用集群,让B机接管一切。切换集群资源后再发送一封邮件到系统管理员的电子邮箱,简明扼要说明故障情况。至于B机则不必写脚本了,当A机的应用发生故障后,系统管理员收到通知一般也会尽快赶往现场,分析A机应用的故障原因。

申请电子邮箱

在写监控脚本之前,先确认一下将要使用哪家电子邮件服务商作为发信方,教程中选择的是网易邮箱。申请邮箱后登陆管理控制台,开通POP3/SMTP/IMAP相关服务,不会的朋友请自行百度。

安装邮件客户端

  1. [root@Wanghualang-A ~]# yum -y install mailx  

配置发信人信息

  1. [root@Wanghualang-A ~]# vim /etc/mail.rc  

根据实际邮箱密码信息,在配置文件末尾添加如下内容:

  1. set from=xxx@163.com    
  2. set smtpsmtp=smtp.163.com    
  3. set smtp-auth-user=xxx@163.com    
  4. set smtp-auth-password=授权码    
  5. set smtp-auth=login  

新建监控脚本,脚本内容大家可以自由发挥,我写的监控脚本比较简单粗暴,有兴趣的朋友可以再细化监控脚本,比如把人为排错的一些常用手段也整合进去,参考代码如下:

  1. [root@Wanghualang-A ~]# vim /usr/local/heartbeat/check.sh  

  1. #!/bin/bash  
  2.   
  3. host1="Wanghualang-A"  
  4. host2="Wanghualang-B"  
  5. apache_running_status=`ps aux | grep httpd | grep -v grep | wc -l`  
  6. mysql_running_status=`ps aux | grep mysqld | grep -v grep | wc -l`  
  7. apache_error_mail_msg="服务器$host1上的Apache出现故障,已切换集群应用到服务器$host2,请尽快排查故障原因。"  
  8. mysql_error_mail_msg="服务器$host1上的MySQL出现故障,已切换集群应用到服务器$host2,请尽快排查故障原因。"  
  9.   
  10. if [ $apache_running_status -eq 0 ];then  
  11. service heartbeat stop > /dev/null 2>&1  
  12. echo "$apache_error_mail_msg" | mail -s "Web集群服务器告警" Hwoarang@Wanghualang.com  
  13. fi  
  14.   
  15. if [ $mysql_running_status -eq 0 ];then  
  16. service heartbeat stop > /dev/null 2>&1  
  17. echo "$mysql_error_mail_msg" | mail -s "Web集群服务器告警" Hwoarang@Wanghualang.com  
  18. fi  

给监控脚本赋权

  1. [root@Wanghualang-A ~]# chmod +x  /usr/local/heartbeat/check.sh  

创建计划任务,把脚本添加到计划任务中去,每五分钟执行一次,时间可以按需调整。也就是说如果A机出现故障,系统管理员就会每五分钟后收到一封告警邮件,不想被频繁打扰就尽快处理故障吧!

  1. [root@Wanghualang-A ~]# crontab -e  

  1. */5 * * * *  /usr/local/heartbeat/check.sh  

测试监控效果,在A机上停用Apache模拟应用故障,五分钟左右就能在指定邮箱里收到告警邮件,如下图。

  1. [root@Wanghualang-A ~]# service httpd stop  

使用HeartBeat搭建WordPress网站高可用集群

资源简介 文件名称:Web集群软件包 文件版本:源代码 运行平台:Linux
下载地址
  • 微信赞助网站
  • weinxin
  • 支付宝赞助网站
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: