阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

基于Heartbeat V1实现Web服务双机热备

136次阅读
没有评论

共计 16140 个字符,预计需要花费 41 分钟才能阅读完成。

– 本文大纲

  • 简介

  • 什么是高可用集群

  • Heartbeat 工作原理

  • 基于 heartbeat v1 实现双机热备

一、简介

Heartbeat 是 Linux-HA 工程的一个组件,自 1999 年开始到现在,发布了众多版本,是目前开源 Linux-HA 项目最成功的一个例子,在行业内得到了广泛的应用, 随着 Linux 在关键行业应用的逐渐增多,它必将提供一些原来由 IBM 和 SUN 这样的大型商业公司所提供的服务,这些商业公司所提供的服务都有一个关键特性,就是高可用集群。
 

推荐阅读

Linux 高可用(HA)集群之 heartbeat 基于 crm 进行资源管理详解 http://www.linuxidc.com/Linux/2013-08/89167.htm

Heartbeat+httpd+NFS 实现高可用的 Web 服务器 http://www.linuxidc.com/Linux/2013-08/88520.htm

Linux 高可用(HA)集群之 Heartbeat 详解 http://www.linuxidc.com/Linux/2013-08/88521.htm

Linux 高可用性方案之 Heartbeat 的 CRM 配置 http://www.linuxidc.com/Linux/2012-05/60838.htm

高可用集群 Heartbeat v1 实例 http://www.linuxidc.com/Linux/2013-09/90757.htm

LVS+heartbeat+ldirectord 高可用负载均衡集群解决方案 http://www.linuxidc.com/Linux/2011-09/42911.htm

二、什么是高可用集群

高可用集群,英文原文为 High Availability Cluster,简称 HA Cluster,是指以减少服务中断(如因服务器宕机等引起的服 务中断)时间为目的的服务器集群技术。简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统 就是集群的节点(node)。
高可用集群的出现是为了使集群的整体服务尽可能可用,从而减少由计算机硬件和软件易错性所带来的损 失。它通过保护用户的业务程序对外不间断提供的服务,把因软件 / 硬件 / 人为造成的故障对业务的影响降低到最小程度。如果某个节点失效,它的备援节点将在几 秒钟的时间内接管它的职责。因此,对于用户而言,集群永远不会停机。高可用集群软件的主要作用就是实现故障检查和业务切换的自动化。
只有两个节点的高可用集群又称为双机热备,即使用两台服务器互相备份。当一台服务器出现故障时,可由另一台服务器承担服务任务,从而在不需要人工干预的 情况下,自动保证系统能持续对外提供服务。双机热备只是高可用集群的一种,高可用集群系统更可以支持两个以上的节点,提供比双机热备更多、更高级的功能,更能满足用户不断出现的需求变化。

三、Heartbeat 工作原理

heartbeat(Linux-HA)的工作原理:heartbeat 最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗 余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运 行在对方主机上的资源或者服务

四、基于 heartbeat v1 实现双机热备

注:

配置高可用的前提:

  • 所有节点的主机名一定要与 uname - n 的结果一致
  • 所有节点的时间必须一致
  • 各节点间能基于 ssh 密钥认证通信
1、配置过程:
规划:
node1 essun.node1.com 192.168.1.109
node2 essun.node2.com 192.168.1.123

nfs 服务器 www.directory.com 192.168.1.118(同时也是集群节点的 ping 状态检测)

2、node1 配置部分

⑴、主机信息部分

vim /ect/hosts

基于 Heartbeat V1 实现 Web 服务双机热备

1
#uname -n

基于 Heartbeat V1 实现 Web 服务双机热备

1
#vim /etc/sysconfig/network

基于 Heartbeat V1 实现 Web 服务双机热备

每一个节点都要这类似这样的设置

 

⑵、时间同步
在每一个节点上执行:
ntpdate cn.pool.ntp.org(要可以上网才可以)
⑶、ssh 密钥认证
在第一个节点上执行
1
2
#ssh-keygen -t rsa -P ''
#ssh-copy-id -i .ssh/id_rsa.pub root@essun.node2.com

将公钥送达到每一个节点上,(每一个节点都要如此做)

2、安装软件包
yum install perl-TimeDate net-snmp-libs libnet PyXML
注:libnet 是在 epel 源中,所以要下载EPEL源安装包即可

 

http://download.Fedoraproject.org/pub/epel/6/i386/repoview/epel-release.html
下载对应的版本就可以的。
rpm -ivh epel-release-6-8.noarch.rpm

之后就可以使用 yum 安装 EPEL 中的包了

基于 Heartbeat V1 实现 Web 服务双机热备

1
#rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm heartbeat-pils-2.1.4-12.el6.x86_64.rpm

 

两个节点都要如此安装。
3、配置 heartbeat
  • 信息层

  • 资源管理器

  • 资源代理

第一步: 配置 HMAC 所使用的密码串算法(使用的是单向加密)
heartbeart 心跳信号信息监听于 UDP694 端口, 心跳信息传输方式: 可以是单播,多播和组播,还可以基于串行线缆传输心跳信号
配置文件所在的位置 /etc/ha.d

基于 Heartbeat V1 实现 Web 服务双机热备

其实这里并没有配置文件,它仅提供一个配置模板,存放于

 

1
2
[root@essun ha.d]# rpm -ql heartbeat |grep ha.cf
/usr/share/doc/heartbeat-2.1.4/ha.cf

在这个目录中我们将用到三个文件

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@essun heartbeat-2.1.4]#pwd
/usr/share/doc/heartbeat-2.1.4
[root@essun heartbeat-2.1.4]# ls
apphbd.cf HardwareGuide.txt
authkeys haresources
AUTHORS hb_report.html
ChangeLog hb_report.txt
COPYING heartbeat_api.html
COPYING.LGPL heartbeat_api.txt
DirectoryMap.txt logd.cf
faqntips.html README
faqntips.txt Requirements.html
GettingStarted.html Requirements.txt
GettingStarted.txt rsync.html
ha.cf rsync.txt
HardwareGuide.html startstop

 

authkeys:用于 HMAC 信息加密的认证机制与认证密码(此文件的权限必须为 600,否则 heartbeat 无法启动)
haresources:此文件用于定义资源
将此目录中的三个文件复制到 /etc/ha.d 目录下
1
#cp /usr/share/doc/heartbeat-2.1.4/{authkeys,haresources,ha.cf} /etc/ha.d/ -a

 

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-04/100635p2.htm

配置信号算法认证所使用的密钥

 

1
2
3
4
5
#vim /etc/ha.d/authkeys
auth 2 # 认证算法
#1 crc
2 sha1 HI! # 认证所使用的算法
#3 md5 Hello!

或使用 openssl 生成随机数

1
2
[root@essun ha.d]# openssl rand -hex 8
7d4d4401f3d151dc

改变此文件的权限:

1
2
3
[root@essun ha.d]# chmod 600 authkeys
[root@essun ha.d]# ll authkeys
-rw------- 1 root root 643 Apr 18 00:01 authkeys
第二步,设置核心配置文件 ha.cf
注:此文件中的如果 #号后面有个空格或一个制表符,表示其行是注释信息,如果在#号后直接接的是字符表示是参数,将# 号删除开启对应的参数功能。
1、heartbeat 记录日志的方式有两种,可以指定文件,也可以借助于 rsyslog.conf 日志配置文件来记录日志,默认是借助于 rsyslog 来记录日志的

配置属性信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@essun ha.d]# grep -v "#" /etc/ha.d/ha.cf |grep -v "^$"
logfile /var/log/ha-log
keepalive 1000ms
deadtime 8
warntime 3
udpport 694
mcast eth0 225.0.32.1 694 1 0
auto_failback on
node essun.node1.com
node essun.node2.com
ping 192.168.1.118
compression bz2
compression_threshold 2
[root@essun ha.d]#
以上参数注解:
logfile /var/log/ha-log
指明 heartbaet 的日志存放位置
keepalive 1000ms
指定心跳使用间隔时间为 1 秒(即每两秒钟在 eth0 上发送一次广播)
deadtime 8
指定备用节点在 8 秒内没有收到主节点的心跳信号后,则立即接管主节点的服务资源
warntime 3
指定心跳延迟的时间为 3 秒。当 3 秒钟内备份节点不能接收到主节点的心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务
udpport 694
设置广播通信使用的端口,694 为默认使用的端口号。
auto_failback on
用来定义当主节点恢复后,是否将服务自动切回,heartbeat 的两台主机分别为主节点和备份节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给备份节点并由备份节点运行服务。在该选项设为 on 的情况下,一旦主节点恢复运行,则自动获取资源并取代备份节点,如果该选项设置为 off,那么当主节点恢复后,将变为备份节点,而原来的备份节点成为主节点
mcast eth0 225.0.32.1 694 1 0
采用网卡 eth0 的 Udp 多播来组织心跳,一般在备用节点不止一台时使用。Bcast、ucast 和 mcast 分别代表广播、单播和多播,是组织心跳的三种方式,任选其一即可。
essun.node1.com
主节点主机名,可以通过命令“uanme –n”查看。
essun.node2.com
备用节点主机名
ping 192.168.1.118
选择 ping 的节点,ping
节点选择的越好,HA 集群就越强壮,可以选择固定的路由器作为 ping 节点,但是最好不要选择集群中的成员作为 ping 节点,ping 节点仅仅用来测试网络连接
compression bz2
对传输的数据进行压缩,是可选项
compression_threshold 2
表示小于 2k 将不予以压缩

在 node1 和 node2 中安装 http 服务并对其进行访问测试

node1

1
2
3
4
5
[root@essun download]# echo "192.168.1.109" > /var/www/html/index.html
[root@essun download]# service httpd start
Starting httpd: [OK]
[root@essun download]# curl http://192.168.1.123
192.168.1.123

node2

 

1
2
3
4
5
[root@essun ha.d]# echo "192.168.1.123"> /var/www/html/index.html
[root@essun ha.d]# service httpd start
Starting httpd: [OK]
[root@essun ha.d]# curl http://192.168.1.109
192.168.1.109

 

如果测试没有问题将两节点的服务停止,并开机一定不能自动启动(做高可用集群,各节点上的服务要统一由集群资源管理器来调度)
node1

 

 

1
2
3
[root@essun download]# service httpd stop
Stopping httpd: [OK]
[root@essun download]# chkconfig httpd off

node2

1
2
3
[root@essun ha.d]# service httpd stop
Stopping httpd: [OK]
[root@essun ha.d]# chkconfig httpd off

 

第三步,定义集群资源管理器
注:

 

1
2
3
4
5
6
7
8
9
10
[root@essun ha.d]# cd resource.d/
[root@essun resource.d]# ls
apache ICP LinuxSCSI Raid1
AudibleAlarm ids LVM SendArp
db2 IPaddr LVSSyncDaemonSwap ServeRAID
Delay IPaddr2 MailTo WAS
Filesystem IPsrcaddr OCF WinPopup
hto-mapfuncs IPv6addr portblock Xinetd
[root@essun resource.d]# pwd
/etc/ha.d/resource.d

 

这里定义资源所调用脚本(RA: 资源代理)
RA 有四种类型
heartbeat legacy: heartbeat 的传统类型
LSB:/etc/rc.d/init.d/*
OCF: Open Cluster Framework
provider: pacemaker
linbit
STONITH

而在 /etc/ha.d/resource.d 中定义的就是传统类型的,如果在此目录没有对应的资源代理则将查找 LSB 类型的 RA(其目录为 /etc/rc.d/init.d/*)

1
2
#vim /etc/ha.d/haresources
essun.node1.com 192.168.1.110/24/eth0 httpd

 

第一段表示集群更倾向那一个节点;
第二段表示一个集群资源 ip 地址,掩码,网卡
第三段表示定义有服务资源为 http
此条记录真正的意义为:
通过集群 ip192.168.1.110 优先访问 essun.node1.com 的节点上的 http 服务。如果此节点宕机,则转移到第二个节点上(在 ha.cf 中定义的节点),如果后来 essun.node1.com 从新上线,则还在将集群资源夺回来(也是在 ha.cf 中定义的)

将三个配置文件同步到所有节点上(我这里只有 node1 和 node2)

1
2
3
4
[root@essun ha.d]# scp -p ha.cf authkeys haresources node1:/etc/ha.d/
ha.cf 100% 10KB 10.4KB/s00:00
authkeys 100% 643 0.6KB/s00:00
haresources 100% 5905 5.8KB/s00:00

到 node1 上查看一下

 

1
2
3
[root@essun ha.d]# ls
authkeys harc rc.d resource.d
ha.cf haresources README.config shellfuncs

 

所有文件都同步过来了

在两个节点上启动集群管理器

1
2
3
4
5
6
7
8
9
[root@essun ha.d]# service heartbeat start
Starting High-Availability services:
2014/04/18_01:25:32 INFO: Resource is stopped
Done.
[root@essun ha.d]# ssh essun.node2.com 'service heartbeat start'
Starting High-Availability services:
2014/04/18_01:26:45 INFO: Resource is stopped
Done.
[root@essun ha.d]#

 

注:最好是在同一个节点上启动 heartbeat 服务
查看一下日志

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#tail -40 /var/log/ha-log
heartbeat[3647]: 2014/04/18_01:25:32 info: Configuration validated. Starting heartbeat 2.1.4
heartbeat[3648]: 2014/04/18_01:25:32 info: heartbeat: version 2.1.4
heartbeat[3648]: 2014/04/18_01:25:32 info: Heartbeat generation: 1397754809
heartbeat[3648]: 2014/04/18_01:25:32 info: glib: UDP multicast heartbeat started for group 225.0.32.1 port 694 interface eth0 (ttl=1 loop=0)
heartbeat[3648]: 2014/04/18_01:25:32 info: glib: ping heartbeat started.
heartbeat[3648]: 2014/04/18_01:25:32 info: G_main_add_TriggerHandler: Added signal manual handler
heartbeat[3648]: 2014/04/18_01:25:32 info: G_main_add_TriggerHandler: Added signal manual handler
heartbeat[3648]: 2014/04/18_01:25:32 info: G_main_add_SignalHandler: Added signal handler for signal 17
heartbeat[3648]: 2014/04/18_01:25:32 info: Local status now set to: 'up'
heartbeat[3648]: 2014/04/18_01:25:33 info: Link 192.168.1.118:192.168.1.118 up.
heartbeat[3648]: 2014/04/18_01:25:33 info: Status update for node 192.168.1.118: status ping
heartbeat[3648]: 2014/04/18_01:25:39 info: Link essun.node2.com:eth0 up.
heartbeat[3648]: 2014/04/18_01:25:39 info: Status update for node essun.node2.com: status up
harc[3660]: 2014/04/18_01:25:39 info: Running /etc/ha.d/rc.d/status status
heartbeat[3648]: 2014/04/18_01:25:39 info: Comm_now_up(): updating status to active
heartbeat[3648]: 2014/04/18_01:25:39 info: Local status now set to: 'active'
heartbeat[3648]: 2014/04/18_01:25:40 info: Status update for node essun.node2.com: status active
harc[3678]: 2014/04/18_01:25:40 info: Running /etc/ha.d/rc.d/status status
heartbeat[3648]: 2014/04/18_01:25:50 info: remote resource transition completed.
heartbeat[3648]: 2014/04/18_01:25:50 info: remote resource transition completed.
heartbeat[3648]: 2014/04/18_01:25:50 info: Initial resource acquisition complete (T_RESOURCES(us))
IPaddr[3729]: 2014/04/18_01:25:50 INFO: Resource is stopped
heartbeat[3693]: 2014/04/18_01:25:50 info: Local Resource acquisition completed.
harc[3779]: 2014/04/18_01:25:50 info: Running /etc/ha.d/rc.d/ip-request-resp ip-request-resp
ip-request-resp[3779]: 2014/04/18_01:25:50 received ip-request-resp 192.168.1.100/24/eth0 OK yes
ResourceManager[3798]: 2014/04/18_01:25:50 info: Acquiring resource group: essun.node1.com 192.168.1.100/24/eth0 httpd
IPaddr[3824]: 2014/04/18_01:25:50 INFO: Resource is stopped
ResourceManager[3798]: 2014/04/18_01:25:50 info: Running /etc/ha.d/resource.d/IPaddr 192.168.1.100/24/eth0 start
IPaddr[3921]: 2014/04/18_01:25:50 INFO: Using calculated netmask for 192.168.1.100: 255.255.255.0
IPaddr[3921]: 2014/04/18_01:25:50 INFO: eval ifconfig eth0:0 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
IPaddr[3892]: 2014/04/18_01:25:50 INFO: Success
ResourceManager[3798]: 2014/04/18_01:25:51 info: Running /etc/init.d/httpdstart

– 本文大纲

  • 简介

  • 什么是高可用集群

  • Heartbeat 工作原理

  • 基于 heartbeat v1 实现双机热备

一、简介

Heartbeat 是 Linux-HA 工程的一个组件,自 1999 年开始到现在,发布了众多版本,是目前开源 Linux-HA 项目最成功的一个例子,在行业内得到了广泛的应用, 随着 Linux 在关键行业应用的逐渐增多,它必将提供一些原来由 IBM 和 SUN 这样的大型商业公司所提供的服务,这些商业公司所提供的服务都有一个关键特性,就是高可用集群。
 

推荐阅读

Linux 高可用(HA)集群之 heartbeat 基于 crm 进行资源管理详解 http://www.linuxidc.com/Linux/2013-08/89167.htm

Heartbeat+httpd+NFS 实现高可用的 Web 服务器 http://www.linuxidc.com/Linux/2013-08/88520.htm

Linux 高可用(HA)集群之 Heartbeat 详解 http://www.linuxidc.com/Linux/2013-08/88521.htm

Linux 高可用性方案之 Heartbeat 的 CRM 配置 http://www.linuxidc.com/Linux/2012-05/60838.htm

高可用集群 Heartbeat v1 实例 http://www.linuxidc.com/Linux/2013-09/90757.htm

LVS+heartbeat+ldirectord 高可用负载均衡集群解决方案 http://www.linuxidc.com/Linux/2011-09/42911.htm

二、什么是高可用集群

高可用集群,英文原文为 High Availability Cluster,简称 HA Cluster,是指以减少服务中断(如因服务器宕机等引起的服 务中断)时间为目的的服务器集群技术。简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统 就是集群的节点(node)。
高可用集群的出现是为了使集群的整体服务尽可能可用,从而减少由计算机硬件和软件易错性所带来的损 失。它通过保护用户的业务程序对外不间断提供的服务,把因软件 / 硬件 / 人为造成的故障对业务的影响降低到最小程度。如果某个节点失效,它的备援节点将在几 秒钟的时间内接管它的职责。因此,对于用户而言,集群永远不会停机。高可用集群软件的主要作用就是实现故障检查和业务切换的自动化。
只有两个节点的高可用集群又称为双机热备,即使用两台服务器互相备份。当一台服务器出现故障时,可由另一台服务器承担服务任务,从而在不需要人工干预的 情况下,自动保证系统能持续对外提供服务。双机热备只是高可用集群的一种,高可用集群系统更可以支持两个以上的节点,提供比双机热备更多、更高级的功能,更能满足用户不断出现的需求变化。

三、Heartbeat 工作原理

heartbeat(Linux-HA)的工作原理:heartbeat 最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗 余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运 行在对方主机上的资源或者服务

四、基于 heartbeat v1 实现双机热备

注:

配置高可用的前提:

  • 所有节点的主机名一定要与 uname - n 的结果一致
  • 所有节点的时间必须一致
  • 各节点间能基于 ssh 密钥认证通信
1、配置过程:
规划:
node1 essun.node1.com 192.168.1.109
node2 essun.node2.com 192.168.1.123

nfs 服务器 www.directory.com 192.168.1.118(同时也是集群节点的 ping 状态检测)

2、node1 配置部分

⑴、主机信息部分

vim /ect/hosts

基于 Heartbeat V1 实现 Web 服务双机热备

1
#uname -n

基于 Heartbeat V1 实现 Web 服务双机热备

1
#vim /etc/sysconfig/network

基于 Heartbeat V1 实现 Web 服务双机热备

每一个节点都要这类似这样的设置

 

⑵、时间同步
在每一个节点上执行:
ntpdate cn.pool.ntp.org(要可以上网才可以)
⑶、ssh 密钥认证
在第一个节点上执行
1
2
#ssh-keygen -t rsa -P ''
#ssh-copy-id -i .ssh/id_rsa.pub root@essun.node2.com

将公钥送达到每一个节点上,(每一个节点都要如此做)

2、安装软件包
yum install perl-TimeDate net-snmp-libs libnet PyXML
注:libnet 是在 epel 源中,所以要下载EPEL源安装包即可

 

http://download.Fedoraproject.org/pub/epel/6/i386/repoview/epel-release.html
下载对应的版本就可以的。
rpm -ivh epel-release-6-8.noarch.rpm

之后就可以使用 yum 安装 EPEL 中的包了

基于 Heartbeat V1 实现 Web 服务双机热备

1
#rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm heartbeat-pils-2.1.4-12.el6.x86_64.rpm

 

两个节点都要如此安装。
3、配置 heartbeat
  • 信息层

  • 资源管理器

  • 资源代理

第一步: 配置 HMAC 所使用的密码串算法(使用的是单向加密)
heartbeart 心跳信号信息监听于 UDP694 端口, 心跳信息传输方式: 可以是单播,多播和组播,还可以基于串行线缆传输心跳信号
配置文件所在的位置 /etc/ha.d

基于 Heartbeat V1 实现 Web 服务双机热备

其实这里并没有配置文件,它仅提供一个配置模板,存放于

 

1
2
[root@essun ha.d]# rpm -ql heartbeat |grep ha.cf
/usr/share/doc/heartbeat-2.1.4/ha.cf

在这个目录中我们将用到三个文件

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@essun heartbeat-2.1.4]#pwd
/usr/share/doc/heartbeat-2.1.4
[root@essun heartbeat-2.1.4]# ls
apphbd.cf HardwareGuide.txt
authkeys haresources
AUTHORS hb_report.html
ChangeLog hb_report.txt
COPYING heartbeat_api.html
COPYING.LGPL heartbeat_api.txt
DirectoryMap.txt logd.cf
faqntips.html README
faqntips.txt Requirements.html
GettingStarted.html Requirements.txt
GettingStarted.txt rsync.html
ha.cf rsync.txt
HardwareGuide.html startstop

 

authkeys:用于 HMAC 信息加密的认证机制与认证密码(此文件的权限必须为 600,否则 heartbeat 无法启动)
haresources:此文件用于定义资源
将此目录中的三个文件复制到 /etc/ha.d 目录下
1
#cp /usr/share/doc/heartbeat-2.1.4/{authkeys,haresources,ha.cf} /etc/ha.d/ -a

 

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-04/100635p2.htm

查看一下 node1 是否添加网卡正常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@essun heartbeat2]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:1E:F8:F9
inet addr:192.168.1.109 Bcast:255.255.255.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe1e:f8f9/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:52073 errors:0 dropped:0 overruns:0 frame:0
TX packets:25502 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:35207636 (33.5 MiB) TX bytes:8188830 (7.8 MiB)
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:1E:F8:F9
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:708 errors:0 dropped:0 overruns:0 frame:0
TX packets:708 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:62304 (60.8 KiB) TX bytes:62304 (60.8 KiB)

访问一下集群 IP 地址看一下是不是 node1 的 ip 地址

基于 Heartbeat V1 实现 Web 服务双机热备

从此处看是没有问题,看一下是否能够完成切换。

在 node2 上将 heartbeat 服务停止,(在一个正常的节点上停止另一个节点,模拟故障)再次访问一下会出现什么情况?

1
2
3
4
[root@essun ha.d]# ssh node1 'service heartbeat stop'
Stopping High-Availability services:
Done.
[root@essun ha.d]#

刷新一下页面,看一下效果

基于 Heartbeat V1 实现 Web 服务双机热备

顺利的切换到 node2 上了。如果 node1 从新上线,会不会将集群资源夺回去呢,来看一下效果

在节点 node1 重新启动 heartbeat 服务,模拟主机重新上线

1
2
3
4
5
[root@essun heartbeat2]# service heartbeat start
Starting High-Availability services:
2014/04/18_01:41:17 INFO: Resource is stopped
Done.
[root@essun heartbeat2]#

重新刷新一下页面,看一下效果

基于 Heartbeat V1 实现 Web 服务双机热备

node1 重新上线后,所有的集群资源又都夺回来了

第四步、在 directory 创建共享,给两了集群节点提供文件共享

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@www /]# yum install -y nfs*
[root@www /]# mkdir -pv /www/share
mkdir: created directory `/www`
mkdir: created directory `/www/share`
[root@www /]# echo -e "/www/share\t192.168.0.0(rw)" > /etc/exports
[root@www /]# cat /etc/exports
/www/share192.168.0.0(rw)
[root@www /]# setfacl -m u:apache:rwx /www/share/
[root@www /]# echo "<h1> 此站点来自于 NFS</h1>"> /www/share/index.html
[root@www /]# cat /www/share/index.html
<h1> 此站点来自于 NFS</h1>
[root@www /]# service nfs start
Starting NFS services: [OK]
Starting NFS quotas: [OK]
Starting NFS mountd: [OK]
Starting NFS daemon: [OK]
Starting RPC idmapd: [OK]
[root@www /]#

停止前端所有的集群节点

1
2
3
4
5
6
7
8
9
[root@essun heartbeat2]# uname -n
essun.node1.com
[root@essun heartbeat2]# service heartbeat stop
Stopping High-Availability services:
Done.
[root@essun heartbeat2]# ssh node2 'service heartbeat stop'
Stopping High-Availability services:
Done.
[root@essun heartbeat2]#
在集群资源管理器中添加上 nfs 资源

在 node1 上修改 /etc/ha.d/haresources

1
2
#vim /etc/ha.d/haresources
essun.node1.com 192.168.1.100/24/eth0 Filesystem::192.168.1.118:/www/share::/var/www/html::nfs httpd
注:
多个资源间是有先后顺序的,必须要按其顺序来引用资源代理,比如此处:
如果 httpd 要使用 nfs 文件系统,就必须先挂载后使用
Filesystem::192.168.1.118:/www/share::/var/www/html::nfs
参数传递间隔符是:: 资源代理的名字必须要与资源代理(脚本)名相同,区分大小写
第一段表示资源代理的类型
第二段表示为运端的 NFS 文件共享的目录
第三段表示要挂载的位置
第四段为文件系统的类型
启动 node1 测试下
1
2
3
4
[root@essun heartbeat2]# service heartbeat start
Starting High-Availability services:
2014/04/18_02:44:50 INFO: Resource is stopped
Done.

刷新页面试试

基于 Heartbeat V1 实现 Web 服务双机热备

停止 node1 节点,将 node2 启动后,它的页面应该还是其 IP 地址所在的页面

1
2
3
4
5
6
7
8
[root@essun heartbeat2]# ssh node2 'service heartbeat start'
Starting High-Availability services:
2014/04/18_02:50:42 INFO: Resource is stopped
Done.
[root@essun heartbeat2]# service heartbeat stop
Stopping High-Availability services:
Done.
[root@essun heartbeat2]#

结果如下,如果我将 node1 上的 haresources 同步到 node2 上,那么结果将与 node1 相同。

基于 Heartbeat V1 实现 Web 服务双机热备

同步一下试试。

 

1
2
3
4
5
6
7
8
9
10
[root@essun heartbeat2]# ssh node2 'service heartbeat stop'
Stopping High-Availability services:
Done.
[root@essun heartbeat2]# scp /etc/ha.d/haresources node2:/etc/ha.d/
haresources 100% 6006 5.9KB/s00:00
[root@essun heartbeat2]# ssh node2 'service heartbeat start'
Starting High-Availability services:
2014/04/18_02:54:00 INFO: Resource is stopped
Done.
[root@essun heartbeat2]#

刷新一下试试

基于 Heartbeat V1 实现 Web 服务双机热备

注:
此时我的 node1 并没有启动。
如果想要模拟故障也并不是非要停止 heartbeat 服务,只要使用 /usr/share/heartbeat/ 下的 hb_standby 脚本同样也可以做到(hb_takeover 可以实现重新启动)。

以上操作实际上是对同组资源顺序引用说明,既然属于同组,就可以实现同进同退,达到无障碍切换。

==================== 基于 heartbeat v1 双机集群演示完毕 =====================================

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计16140字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中