1.heartbeat集群环境

heartbeat集群实现web服务器高可用,拓扑图如下所示:

2.集群环境主机资源准备

主服务器A:

主机名:heartbeat-1-114

eth0网卡地址:192.168.136.114(管理IP)

eth1网卡地址:10.0.10.4/255.255.255.0 (心跳IP)

从服务器B:

主机名:heartbeat-1-115

eth0网卡地址:192.168.136.115(管理IP)

eth1网卡地址:10.0.10.5/255.255.255.0(心跳IP)

虚拟VIP:

虚拟VIP在主服务器heartbeat-1-114上,VIP:192.168.136.116

仲裁主机:10.0.10.6

NFS服务器:主机名nfs_server eth0网卡地址:192.168.136.118

3.环境准备

主服务器A(web主)、从服务器B(web备)和NFS服务器之间能够互相解析,清空web服务器的防火墙,关闭selinux。

域名互相解析

[root@heartbeat-1-114 ~]# tail -3 /etc/hosts
 192.168.136.114 heartbeat-1-114
 192.168.136.115 heartbeat-1-115
 192.168.136.118 nfs_server
[root@heartbeat-1-115 ~]# tail -3 /etc/hosts
 192.168.136.115 heartbeat-1-115
 192.168.136.114 heartbeat-1-114
 192.168.136.118 nfs_server
[root@nfs_server ~]# tail -3 /etc/hosts
 192.168.136.114 heartbeat-1-114
 192.168.136.115 heartbeat-1-115
 192.168.136.118 nfs_server

关闭selinux

[root@heartbeat-1-114 ~]# getenforce
Disabled
[root@heartbeat-1-115 ~]# getenforce
Disabled
[root@nfs_server ~]# getenforce
Disabled

都关闭防火墙

[root@nfs_server ~]# iptables -F && /etc/init.d/iptables save

4.配置nfs服务器

(1)nfs_server服务器安装nfs

RPC主程序:rpcbind

NFS主程序:nfs-utils

用rpm或者yum安装

[root@nfs_server ~]# yum install nfs-utils rpcbind -y
[root@nfs_server ~]# rpm -qa|grep nfs
nfs-utils-lib-1.1.5-13.el6.x86_64
nfs-utils-1.2.3-78.el6_10.1.x86_64
[root@nfs_server ~]# rpm -qa|grep rpcbind
rpcbind-0.2.0-16.el6.x86_64

(2)创建共享目录和文件

[root@nfs_server ~]# mkdir /wwwdir
[root@nfs_server ~]# echo "Welcome to my homepage">/wwwdir/index.html

(3)配置nfs配置文件

[root@nfs_server ~]# cat /etc/exports
/wwwdir 192.168.136.0/24(rw,no_root_squash,sync)

(4)启动NFS服务器

[root@nfs_server ~]# /etc/init.d/rpcbind start
[root@nfs_server ~]# /etc/init.d/nfs start
Starting NFS services: [  OK  ]
Starting NFS quotas:   [  OK  ]
Starting NFS mountd:   [  OK  ]
Starting NFS daemon:   [  OK  ]
Starting RPC idmapd:   [  OK  ]
[root@nfs_server ~]# chkconfig rpcbind on
[root@nfs_server ~]# chkconfig nfs on
[root@nfs_server ~]# chkconfig nfslock on

(5)查看端口是否启动

[root@nfs_server ~]# netstat -anptu|grep -E "111|2049"
tcp0  0 0.0.0.0:20490.0.0.0:*   LISTEN  -   
tcp0  0 0.0.0.0:111 0.0.0.0:*   LISTEN  1382/rpcbind
tcp0  0 :::2049 :::*LISTEN  -   
tcp0  0 :::111  :::*LISTEN  1382/rpcbind
udp0  0 0.0.0.0:111 0.0.0.0:*   1382/rpcbind
udp0  0 0.0.0.0:20490.0.0.0:*   -   
udp0  0 :::111  :::*1382/rpcbind
udp0  0 :::2049 :::*-  
[root@nfs_server ~]# showmount -e localhost
Export list for localhost:
/wwwdir 192.168.136.0/24

5.主服务器的配置

heartbeat服务高可用这里就不配置,前面的文章已经搭建过了,这里只配置一下nfs和http。heartbeat高可用的搭建参考这篇:https://blog.51cto.com/10642812/2082749

5.1 安装并配置nfs

(1)安装nfs服务

[root@heartbeat-1-114 ~]# yum install nfs-utils rpcbind -y
[root@heartbeat-1-114 ~]# rpm -qa|grep nfs
nfs-utils-lib-1.1.5-13.el6.x86_64
nfs-utils-1.2.3-78.el6_10.1.x86_64
[root@heartbeat-1-114 ~]# rpm -qa|grep rpcbind
rpcbind-0.2.0-16.el6.x86_64

(2)启动必备的服务

[root@heartbeat-1-114 ~]# /etc/init.d/rpcbind start
[root@heartbeat-1-114 ~]# /etc/init.d/nfslock start
服务器端启动nfslock,客户端也要启动才能生效

(3)查询服务器有哪些可以使用的资源

[root@heartbeat-1-114 ~]# showmount -e nfs_server
Export list for nfs_server:
/wwwdir 192.168.136.0/24

5.2 安装httpd并配置

(1)安装httpd

[root@heartbeat-1-114 ~]# yum install httpd -y

(2)配置httpd的配置文件

需要对配置文件进行一下简单的配置,192.168.136.116为VIP(虚拟IP)

[root@heartbeat-1-114 ~]# grep "192.168.136.116" /etc/httpd/conf/httpd.conf
Listen 192.168.136.116:80
ServerName 192.168.136.116:80

(3)开启httpd验证一下刚才的配置是否正确

先在/var/www/html/下编辑一个html文件

[root@heartbeat-1-114 ~]# echo "welcome to my http" >/var/www/html/index.html
[root@heartbeat-1-114 ~]# /etc/init.d/httpd start
Starting httpd:    

验证配置是否正确,打开浏览器输入192.168.136.116

我们看配置成功了,删除index.html文件,后面要挂载文件系统。

5.3 挂载文件系统

[root@heartbeat-1-114 html]# mount -t nfs 192.168.136.118:/wwwdir /var/www/html/ 
[root@heartbeat-1-114 html]# ll /var/www/html/index.html 
-rw-r--r-- 1 root root 23 Nov  8 22:28 /var/www/html/index.html

再次打开浏览器,看是否挂载成功并且有权限访问

6.从服务器的配置

6.1 安装并配置NFS

(1)安装nfs

[root@heartbeat-1-115 ~]# yum install nfs-utils rpcbind -y
[root@heartbeat-1-115 ~]# rpm -qa|grep nfs
nfs-utils-lib-1.1.5-13.el6.x86_64
nfs-utils-1.2.3-78.el6_10.1.x86_64
[root@heartbeat-1-115 ~]# rpm -qa|grep rpcbind
rpcbind-0.2.0-16.el6.x86_64

(2)启动必备的服务

[root@heartbeat-1-115 ~]# /etc/init.d/rpcbind start
[root@heartbeat-1-115 ~]# /etc/init.d/nfslock start

(3)查询服务器有哪些可以使用的资源

[root@heartbeat-1-115 ~]# showmount -e nfs_server
Export list for nfs_server:
/wwwdir 192.168.136.0/24

6.2 安装httpd并配置

(1)安装httpd

[root@heartbeat-1-115 ~]# yum install httpd -y

(2)配置httpd的配置文件

需要对配置文件进行一下简单的配置,192.168.136.116为VIP(虚拟IP)

[root@heartbeat-1-115 ~]# grep "192.168.136.116" /etc/httpd/conf/httpd.conf
Listen 192.168.136.116:80
ServerName 192.168.136.116:80

注意:从服务器不要挂载文件系统,在切换主备的时候heartbeat会自动挂载

7.配置/etc/ha.d/haresources文件

主备服务器都要配置

[root@heartbeat-1-114 ~]# cat /etc/ha.d/haresources 
heartbeat-1-114 IPaddr::192.168.136.116/24/eth0:1 Filesystem::192.168.136.118:/wwwdir::/var/www/html::nfs httpd
[root@heartbeat-1-115 ~]# cat /etc/ha.d/haresources 
heartbeat-1-114 IPaddr::192.168.136.116/24/eth0:1 Filesystem::192.168.136.118:/wwwdir::/var/www/html::nfs httpd

8.启动heartbeat服务

[root@heartbeat-1-114 ~]# /etc/init.d/heartbeat start
Starting High-Availability services: INFO:  Resource is stopped
Done.
[root@heartbeat-1-115 ~]# /etc/init.d/heartbeat start
Starting High-Availability services: INFO:  Resource is stopped
Done.

9.测试

这时vip:192.168.136.116还在主服务器上

[root@heartbeat-1-114 ~]# ip addr|grep "192"
inet 192.168.136.114/24 brd 192.168.136.255 scope global eth0
inet 192.168.136.116/24 brd 192.168.136.255 scope global secondary eth0:1

打开浏览器访问192.168.136.116,可以访问

主服务器禁ping,禁ping之后vip就切换到从服务器了

[root@heartbeat-1-114 ~]# iptables -I INPUT -p icmp -j DROP
[root@heartbeat-1-114 ~]# ip addr|grep "192"
inet 192.168.136.114/24 brd 192.168.136.255 scope global eth0

查看一下从服务器的heartbeat是否在动挂载了nfs服务器的文件系统,我们开已经有文件了,证明已经挂载了文件系统

[root@heartbeat-1-115 html]# ll /var/www/html/  
total 4
 -rw-r--r-- 1 root root 23 Nov  8 22:28 index.html

打开浏览器输入192.168.136.116

至此heartbeat集群实现web服务器高可用搭建完成

10.有关heartbeat调用资源的生产场景应用

在工作中,有两种方法实现高可用问题:

(1)heartbeat可以仅控制vip资源的漂移,不负责服务资源的启动和停止。这种方式适合web服务。

(2)heartbeat即控制vip资源的漂移,同时又负责服务资源的启动及停止,及ip和服务要切换都切换,这种方式适合数据服务。VIP正常,httpd服务器宕了,这个时候不会做高可用切换。写一个脚本或守护进程判断httpd服务。如果有问题,则停止heartbeat主动使其上的业务切换到另一台。

11.heartbeat和keepalived的应用场景和区别

(1)对于一般的web、db、负载均衡(nginx,haproxy)等等,heartbeat和keepalived都可以实现。

(2)Lvs负载均衡和keepalived结合,虽然heartbeat也可以调用带有ipvsadm命令的脚本来启动和停止lvs负载均衡,但是heartbeat本身并没有rs的检查功能,这个缺陷可以通过Idircetord插件来弥补。

(3)需要数据同步(配合drbd)的高可用业务最好用heartbeat列如:mysql双主多从,NFS/MFS存储,他们的最大特点是需要数据同步,这样的业务最好用heartbeat,因为heartbeat自带了drbd的脚本。

12.Heartbeat服务生产环境下的恢复要点

每天可能都有一些需求,新项目上线或者VIP更改需求时,可能会进行添加修改服务VIP的操作。我们就以heartbeat+haproxy/nginx高可用负载均衡为例,来学习一下生产环境下的维护方法。
所有配置文件放到SVN,更改之后提交SVN对比,推送到正式环境。

(1)在修改配置文件前执行/etc/init.d/heartbeat stop或/usr/lib64/heartbeat/hb_standby(此命令最好)把本机命令推送到备节点工作,当确认备节点工作正常后,开始修改本地的配置,修改好后执行/etc/init.d/heartbeat start把资源服务接管回来。在把业务推送到备节点时及修改配置接管回服务器时都要立即服务是否正常,特别是所有的VIP(新的旧的)是否启动OK,URL地址是不是能够打开,这个检查过程可以写成脚本放在hearbeat服务启动脚本的参数里。

(2)先设置要添加的VIP,添加ip别名。设置成功了再修改haresources配置文件,修改新添加的VIP。在夜里或业务量比较低的情况下重新启动heartbeat当然要把以前的旧的VIP停掉。