Web+Keepalived–HA
在LVS+keepalived中,我们通过检测网卡的存活状态来判断KVS是否可用,也就是说,keepalived认为,网卡活着,则LVS活着(能够正常工作),因为LVS是集成在Linux的内核中的,只有Linux系统崩了,LVS才会挂掉,同时网卡也就不能正常使用了,所以说,LVS中探测网卡是完全没有问题的。但是在Web服务的高可用中则不然,因为Web服务远远没有Linux系统稳定,所以检测网卡的话是不能进行Web服务的存活状态进行有效探测的,因此在生产中,往往在eepalived中使用脚本来探测Web服务是否还活着,如果挂掉,就会启动备用节点。
环境准备
这里使用的是Apache,用的是抢占模式
192.168.4.116(master)
192.168.4.115(backup)
安装Apache
两台安装完全一样
yum install -y httpd
service httpd start
echo "192.168.4.115" > /var/www.html/index.html #方便区分两台机器
安装Keepalived
master节点和backup节点一样
1.安装依赖
yum -y install kernel-devel openssl-devel popt-devel gcc*
2.安装keepalived
tar xf keepalived-1.2.2.tar.gz
cd keepalived-1.2.2
./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-642.el6.x86_64/
make && make install
修改配置文件
master节点
vim /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_1
}
vrrp_script check_server {
script "/usr/local/script/http_check.sh" # 监测脚本
interval 2 # 每2s监测一次
weight -20 # 监测失败,则相应的vrrp_instance的优先级会减少20个点
fall 2 # 脚本检测失败2次才算检测失败
rise 2 # 脚本检测成功2次才算检测成功
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.4.55
}
track_script { # 添加在运行这个区域的时候需要运行的脚本
check_server # vrrp_script配置的脚本
}
notify_master /usr/local/script/notify_master.sh # 当成为master的时候实现的脚本
notify_stop /usr/local/script/notify_stop.sh # 当停止VRRP时执行的脚本
}
#下边的都删除,因为那个是LVS探测真实服务器的存活状态的区域,我们这里本身就是真实服务器
脚本
http_check.sh
vim /usr/local/script/http_check.sh
#!/bin/bash
URL="http://192.168.4.116/index.html"
HTTP_CODE=`curl -o /dev/null -s -w "%{http_code}" "${URL}"`
if [ $HTTP_CODE != 200 ]
then
/etc/init.d/keepalived stop
fi
notify_master.sh
vim /usr/local/script/notify_master.sh
#!/bin/bash
echo "change mstart" >> /root/change.master.log
echo `date` >> /root/change.master.log
notify_stop.sh
vim /usr/local/script/notify_stop.sh
#!/bin/bash
echo "关闭keepalived" >> /root/stop.log
echo `date` >> /root/stop.log
backup节点
vim /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_2 # id号需要修改
}
vrrp_script check_server {
script "/usr/local/script/http_check.sh" # 监测脚本
interval 2 # 每2s监测一次
weight -20 # 监测失败,则相应的vrrp_instance的优先级会减少20个点
fall 2 # 脚本检测失败2次才算检测失败
rise 2 # 脚本检测成功2次才算检测成功
}
vrrp_instance VI_1 {
state BACKUP # 状态为BACKUP
interface eth0 # 心跳检测的网卡
virtual_router_id 51
priority 90 # 优先级
advert_int 1 # 检测间隔
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.4.55 # VIP
}
track_script { # 添加在运行这个区域的时候需要运行的脚本
check_server # vrrp_script配置的脚本
}
notify_master /usr/local/script/notify_master.sh # 当成为master的时候实现的脚本
notify_stop /usr/local/script/notify_stop.sh # 当停止VRRP时执行的脚本
notify_backup xxx # 当成为backup时执行的脚本
notify_fault xxx # 发生故障时执行的脚本
notify xxx # 任何时候都会执行的脚本,这个脚本会在notify_*脚本后执行
#这里的脚本根据自己的实际情况写即可
}