现在的位置: 首页 > 教程分享 > 正文

高可用集群初体验 – Heartbeat-Nginx

2016年11月08日 教程分享 ⁄ 共 4339字 ⁄ 字号 暂无评论

Heartbeat-nginx

集群、高可用、热备双机等等名词,任谁听到,估计第一感觉都会认为这是很有逼格的东西!花郎之前也没接触过这些,一时兴起便折腾起Heartbeat,翻查理论、分析文档、虚拟实验、各种排错,现已成功实现nginx高可用,随手记录下操作过程分享给大家吧!

实验最终目的

实现Nginx服务的高可用集群,即A机在运行一个网站,B机待命,A机意外断电后,B机自动接管A机的业务,当A机加电后,B机把业务交还给A机。

实验环境说明

花郎是使用VMware虚拟机做实验,一台是主机A(wanghualang-A),另一台是备机B(wanghualang-B),每台主机都有两张网卡,且各主机上的eth0均用于网络通信,eth1均用于检测心跳!特别说明,花郎建议两台主机的eth1都使用桥接模式,千万不要使用NAT模式!当然,如果是第一次用虚拟机做HA实验想怎么搞都行,遇到问题再思考,这样折腾才有意思,详细信息如下:

  1. VMware:12.5.0  
  2. Linux:CentOS6.5-x86  
  3. Heartbeat:3.0.4  
  4. Nginx:1.6.2  
  5. 主机A(eth0):192.168.172.128  
  6. 备机B(eth0):192.168.172.129  
  7. 主机A心跳线(eth1):192.168.1.100  
  8. 备机B心跳线(eth1):192.168.1.101  
  9. 虚拟IP(eth0:0):192.168.172.200  
  10. 裁判IP(Ping):192.168.1.1  

第一步 配置基础环境

配置主机A、备机B,以下操作需要在两台主机上都进行配置。

安装Nginx,并搭建一个简易的网站,直接Yum在线安装即可。

  1. [root@wanghualang-A ~]# yum -y install nginx  

喜欢折腾的朋友也可以使用纯手工编译安装:纯手工搭建LNMP环境

禁用系统防火墙、Selinux。

  1. [root@wanghualang-A ~]# service iptables stop  
  2. [root@wanghualang-A ~]# setenforce 0  

编辑hosts,格式为:“IP 主机名”,IP和主机名之间有一个空格。

  1. [root@wanghualang-A ~]# vim /etc/hosts  

主机名如果不知道,输入hostname查看即可。

  1. 192.168.172.128 wanghualang-A  
  2. 192.168.172.129 wanghualang-B  

安装epel扩展源,再安装heartbeat软件包,openssh-clients其实可装可不装,花郎只是为了接下来要使用scp命令罢了。

  1. [root@wanghualang-A ~]# yum -y install epel-release  
  2. [root@wanghualang-A ~]# yum -y install heartbeat*  
  3. [root@wanghualang-A ~]# yum -y install openssh-clients  

至此,基本的实验环境就准备好了,为方便演示,主机A的网站主页我使用的是石器时代注册网站(中文版),备机B使用的是石器时代注册网站(英文版),如图:

石器时代注册网站(中文版)      石器时代注册网站(英文版)

第二步 配置主机A

先拷贝三份heartbeat配置文件模版到指定路径。

  1. [root@wanghualang-A ~]# cd /usr/share/doc/heartbeat-3.0.4/  
  2. [root@wanghualang-A heartbeat-3.0.4]# cp -rf authkeys ha.cf haresources /etc/ha.d/  

配置authkeys加密文件,按Shift+G到文件末尾,按需修改加密方式,花郎是使用MD5的加密,修改完毕后,再设置文件权限为600。注意,如果主机A是使用MD5加密,那么备机B也必须保持一致!

  1. [root@wanghualang-A heartbeat-3.0.4]# cd /etc/ha.d  
  2. [root@wanghualang-A ha.d]# chmod 600 authkeys  
  3. [root@wanghualang-A ha.d]# vim authkeys  

内容如下:

  1. auth 3  
  2. #1 crc  
  3. #2 sha1 HI!  
  4. 3 md5 Hello!  

接下来要设置一个虚拟IP,花郎设置为192.168.172.200,端口为eth0:0,对应启动的服务为Nginx。

  1. [root@wanghualang-A ha.d]# vim haresources  

主机A的主机名、虚拟IP、网口、监控的服务,不要写错!

  1. wanghualang-A 192.168.172.200/24/eth0:0 nginx  

重头戏来了,开始配置主机A的heartbeat主配置文件。

  1. [root@wanghualang-A ha.d]# vim ha.cf  

以下内容并非是凑在一起的,得自己逐行慢慢找!每一行选项参数的意义,可以稍后自己谷歌搜索了解,不懂也可以在文章评论,建议先参考花郎的笔记把实验做成功,再慢慢剖析知识点,也是不错的学习方法。

  1. debugfile /var/log/ha-debug  
  2. logfile /var/log/ha-log  
  3. logfacility     local0  
  4. keepalive 2  
  5. deadtime 30  
  6. warntime 10  
  7. initdead 60  
  8. udpport 694  
  9. ucast eth1 192.168.1.101  
  10. auto_failback on  
  11. node    wanghualang-A  
  12. node    wanghualang-B  
  13. ping 192.168.1.1  
  14. respawn hacluster /usr/lib/heartbeat/ipfail  

因为主机A和备机B的三份heartbeat配置文件在内容上是差不多的,所以配置备机B的时候,可以直接把主机A的三份配置文件直接拷贝到备机B上,一会再稍作修改即可!注意,要使用scp命令,主机A、备机B必须安装openssh-clients。

  1. [root@wanghualang-A ha.d]# scp authkeys ha.cf haresources root@wanghualang-B:/etc/ha.d/  

第三步 配置备机B

刚才已经从主机A拷贝了三份配置文件过来,需要对ha.cf文件进行修改,另外两个则不需要。

  1. [root@wanghualang-B ~]# cd /etc/ha.d/  
  2. [root@wanghualang-B ha.d]# vim ha.cf  

唯一需要修改的参数就是ucast,修改侦听的心跳线接口和对应的对端接口的IP地址,所以在配置备机B时,ucast必须填写主机A的心跳线IP地址,即192.168.1.100。

  1. debugfile /var/log/ha-debug  
  2. logfile /var/log/ha-log  
  3. logfacility     local0  
  4. keepalive 2  
  5. deadtime 30  
  6. warntime 10  
  7. initdead 60  
  8. udpport 694  
  9. ucast eth1 192.168.1.100  
  10. auto_failback off  
  11. node    wanghualang-A  
  12. node    wanghualang-B  
  13. ping 192.168.1.1  
  14. respawn hacluster /usr/lib/heartbeat/ipfail  

第四步 启动测试

两台主机可以同时启动Nginx,然后先打开浏览器访问两个网站,确保Nginx服务是正常的。

  1. [root@wanghualang-A ~]# service nginx start  
  2. [root@wanghualang-B ~]# service nginx start  

主机A,即石器时代注册网站(中文版):http://192.168.172.128
备机B,即石器时代注册网站(英文版):http://192.168.172.129

能正常访问网页后,再停用两台主机的Nginx。

  1. [root@wanghualang-A ~]# service nginx stop  
  2. [root@wanghualang-B ~]# service nginx stop   

先启动主机A上的Heartbeat。

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

大约一分钟后,再看eth0:0虚拟IP是否启动。

  1. [root@wanghualang-A ~]# ip a  

主机A虚拟IP

如上图,虚拟IP已经成功启动,浏览器访问192.168.172.128或192.168.172.200,都会显示同一个网站,即石器时代注册网站(中文版),如下图:

主机A虚拟IP-网站

再启动备机B上的Heartbeat,备机B就会自动进入待命模式,即主机A一旦故障,备机B就会接手。

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


扩展阅读

启动备机B之后,要特别注意观察,当主机A运行正常时,不论等多久,备机B上是不会启动虚拟IP的,一旦启用,就表示两台机子都在互抢资源,都误判对方机子故障,自己将成为主导,俗称脑裂(split-brain)!详情可以查看日志,进行故障分析。

  1. [root@wanghualang-A ~]# cat /var/log/ha-debug   
  2. [root@wanghualang-A ~]# cat /var/log/ha-log  

备机B虚拟IP


接下来,直接把主机A断电关机,玩的就是简单,要的就是粗暴!彻底断电后,立即清空浏览器所有缓存,再次访问192.168.172.128或192.168.172.200时,应该就无法打开石器时代注册网站(中文版),即主机A已彻底故障,等待备机B接手!等大约一分钟,再用浏览器访问192.168.172.200,如果出现的是石器时代注册网站(英文版),说明备机B已接手,并正常提供服务,如下图。

备机B虚拟IP-网站

B机毕竟是作为备机而存在的,当主机A修理好之后,便会自动接管回来!开始做最终测试,依旧先清空浏览器所有缓存,虚拟机打开主机A的电源,并启动Heartbeat,等一分钟左右,再次访问192.168.172.200,如果出现的是石器时代注册网站(中文版),说明主机A已自动做回主导,实验成功!

给我留言

留言无头像?

×