★什么时HA?
HA(high available)高可用,又被叫做双机热备,用于关键性业务。通俗理解就是,有两台机器A和B,正常是A提供服务,B待命闲置,当A宕机或服务宕掉,会切换至B机器继续提供服务。
★使用heartbeat来做HA集群,并且把nginx服务作为HA对应的服务。
只要在/etc/init.d/下可以找到的web服务都可以使用
试验环境:
开启两台虚拟机, 系统都是centos6.5,网卡、ip信息如下:
yue 192.168.182.100 eth1
test 192.168.182.105 eth0
为了防止实验过程中出现不必要的错误,我们先在主上关闭防火墙和selinux服务
关闭防火墙: iptables -F
关闭selinux: setenforce 0
在主上编辑配置文件 vim /etc/hosts
并加入以下信息
192.168.182.100 yue
192.168.182.105 test
两台机器上均需要安装epel扩展源,因为接下来在安装heartbeat时会用到epel扩展源
可以先wget到本地,再使用rpm安装
两台机器上都安装heartbeat、libnet、nginx
yum install -y heartbeat*
yum install -y libnet
yum install -y nginx
cd /usr/local/doc/heartbeat-3.0.4/
cp authkeys ha.cf haresources /etc/ha.d/ <== 复制三个文件到/etc/ha.d/目录下
cd /etc/ha.d/
vim authkeys <== 编辑authkeys文件
将文本最后内容改为以下形式
auth 3 <== 必须有此行的内容并将数字改为3,否则报错
#1 crc
#2 sha1 HI!
3 md5 Hello!
修改authkeys权限为600
chmod 600 authkeys
vim haresources 并加入以下内容
yue 192.168.182.10/24/eth1:0 nginx
① ② ③ ④ ⑤
① hostname主机名
② 虚拟网卡的虚拟ip
③ 24网段
④ 虚拟网卡名
⑤ 我们搭建HA所使用的线上服务(这里使用的是nginx服务)
[root@yue ~]# ifconfig
eth1 Link encap:Ethernet HWaddr 00:0C:29:16:83:95
inet addr:192.168.182.100 Bcast:192.168.182.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe16:8395/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:96 errors:0 dropped:0 overruns:0 frame:0
TX packets:228 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:9684 (9.4 KiB) TX bytes:23194 (22.6 KiB)
Interrupt:19 Base address:0x2000
eth1:0 Link encap:Ethernet HWaddr 00:0C:29:16:83:95
inet addr:192.168.182.10 Bcast:192.168.182.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:19 Base address:0x2000
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:61 errors:0 dropped:0 overruns:0 frame:0
TX packets:61 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:15375 (15.0 KiB) TX bytes:15375 (15.0 KiB)
==> 这也是一块网卡配置多个ip的原理
vim ha.cf 清空文本并加入以下内容
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
ucast eth1 192.168.182.105 <== 从ip
auto_failback on
node yue
node test
ping 192.168.182.1 <== 一个测试ip,主要用来测试能否ping通
respawn hacluster /usr/lib/heartbeat/ipfail
把主(yue)上编辑的三个配置文件拷贝到从(test)上
cd /etc/ha.d/
scp authkeys ha.cf haresources 192.168.182.105:/etc/ha.d/
到从上编辑ha.cf文件
vim /etc/ha.d/ha.cf 只需改动一个地方即可
ucast eth1 192.168.11.105(从ip)==> ucast eth1 192.168.11.100 (主ip)
因为我主从网卡名不一样,所以从上还需把haresources 文件中的网卡名改成从的
要不然无法启动heartbeat提示
启动nginx服务
nginx服务监听的是80端口,因为我之前配置apache的时候曾将其监听端口改为了80,所以启动nginx服务时出现了端口冲突,需要先kill掉已经在运行的监听80的服务
启动heartbeat服务
启动顺序要严格,先主后从
/etc/init.d/heartbeat start
可能由于我使用的是虚拟机,所以启动的很缓慢,虚拟网卡生成的也很慢~~
[root@yue ha.d]# /etc/init.d/heartbeat start
Starting High-Availability services: INFO: Resource is stopped
Done.
启动heartbeat的提示,但是通过测试虽然提示这个但heartbeat确实启动了
配置检查
ifconfig 查看是否生成了虚拟网卡 eth1:0
ps aux |grep nginx 查看是否有nginx进程
[root@yue ha.d]# ps aux |grep nginx
root 2123 0.0 0.1 15628 1496 ? Ss 14:01 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 2124 0.0 0.1 15784 1944 ? S 14:01 0:00 nginx: worker process
root 2298 0.0 0.0 5976 748 pts/0 S+ 14:45 0:00 grep nginx
ps aux |grep heart 查看是否有heartbeat进程
[root@yue ha.d]# ps aux |grep heart
root 1397 0.1 0.6 6712 6708 ? SLs 14:00 0:04 heartbeat: master control process
root 1406 0.0 0.6 6416 6412 ? SL 14:00 0:00 heartbeat: FIFO reader
root 1407 0.0 0.6 6412 6408 ? SL 14:00 0:00 heartbeat: write: ucast eth1
root 1408 0.0 0.6 6412 6408 ? SL 14:00 0:00 heartbeat: read: ucast eth1
root 1409 0.0 0.6 6412 6408 ? SL 14:00 0:02 heartbeat: write: ping 192.168.182.1
root 1410 0.0 0.6 6412 6408 ? SL 14:00 0:00 heartbeat: read: ping 192.168.182.1
498 1623 0.0 0.1 5308 1500 ? S 14:01 0:00 /usr/lib/heartbeat/ipfail
root 2300 0.0 0.0 5980 756 pts/0 S+ 14:46 0:00 grep heart
★服务测试
在主上设置禁止ping
iptables -I INPUT -p icmp -j DROP
iptables -D INPUT -p icmp -j DROP <== 恢复
主上停止heartbeat服务
主上停止后虚拟网卡被释放掉
我们切换到从上,ifconfig,发现从上立马生成了虚拟网卡继续提供服务
有问题养成查看日志的习惯 /var/log/ha-log
实验是使用两台机器,如果是很多台还想使用heartbeat的话就需要分组了
原文地址:http://caoyue.blog.51cto.com/9876038/1612667