centos系统高HA部署

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

实验最终目的 

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

实验环境说明 

花郎是使用VMware虚拟机做实验,一台是主机A(host-A),另一台是备机B(host-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.  yum -y install nginx  

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

禁用系统防火墙、Selinux。

1. service iptables stop  

2. ]# setenforce 0  

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

1.  vim /etc/hosts  

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

1. 192.168.172.128 host-A  

2. 192.168.172.129 host-B  

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

1.  yum -y install epel-release  

2.  yum -y install heartbeat*  

3.  yum -y install openssh-clients  

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

       

第二步 配置主机A 

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

1.  cd /usr/share/doc/heartbeat-3.0.4/  

2.  heartbeat-3.0.4]# cp -rf authkeys ha.cf haresources /etc/ha.d/  

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

1. [root@ heartbeat-3.0.4]# cd /etc/ha.d  

2. [root@ ha.d]# chmod 600 authkeys  

3. [root@ 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@host-A ha.d]# vi haresources  

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

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

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

1. [root@host-A ha.d]# vi 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   host-A  

12. node   host-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@host-A ha.d]# scp authkeys ha.cf haresources root@host-B:/etc/ha.d/  

第三步 配置备机B 

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

1. [root@host-B ~]# cd /etc/ha.d/  

2. [root@host-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    host-A  

12. node    host-B  

13. ping 192.168.1.1  

14. respawn hacluster /usr/lib/heartbeat/ipfail  

第四步 启动测试 

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

1. [root@host-A ~]# service nginx start  

2. [root@host-B ~]# service nginx start  

主机A,即网站(中文版):http://192.168.172.128
备机B,即网站(英文版):http://192.168.172.129

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

1. [root@host-A ~]# service nginx stop  

2. [root@host-B ~]# service nginx stop   

先启动主机A上的Heartbeat。

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

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

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

 

如上图,虚拟IP已经成功启动,浏览器访问192.168.172.128或192.168.172.200,都会显示同一个网站

 

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

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

 

扩展阅读 

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

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

2. [root@host-A ~]# cat /var/log/ha-log  

 

 

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

 

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

 


你可能感兴趣的:(命令,Linux,集群)