摘 要
Keepalived是由C语言编写,目标是基于Linux为应用提供简单而又强大的负载均衡和高可用的服务。
随着互联网井喷式发展,单节点服务已经不能满足并发需求,通常利用nginx反向代理来实现集群部署以此解决并发需求(nginx负载均衡实现)。此时虽然保证了应用的集群化和高容灾性,但nginx却单节点运行,这极大的为系统宕机埋下伏笔。为此我们必须来采用一主一备或一主N备的方式来保证nginx的运行,高可用(HA- High Availability)的解决方案很多,本文以Keepalived来进行讲解。
Keepalived是由C语言编写,目标是基于Linux为应用提供简单而又强大的负载均衡和高可用的服务。负载均衡是依赖于广泛使用的Linux虚拟服务器(IPVS)内核模块提供的第四层负载均衡。而高可用是通过VRRP协议实现。注:本文暂只针对高可用来讲解。
#下载keepalived
wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
#解压keepalived
ar zxvf keepalived-1.2.7.tar.gz
#进入keepalived目录
cd keepalived-1.2.7
#配置并检查源码
./configure --prefix=/
#编译
make
#安装
make install
配置中的state MASTER决定了节点为主节点 priority决定了优先级,比如在有多个备用节点的时候,主节点故障后优先级值大的接管。 主节点的配置如下:
#校验脚本
vrrp_script chk_nginx {
# script "killall -0 nginx"
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -5
fall 3
rise 2
}
#添加需要设置的ip
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
#自身机器所在ip
mcast_src_ip 192.168.155.1
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟ip,对外公开
virtual_ipaddress {
192.168.155.12
}
#执行校验函数
track_script {
chk_nginx
}
}
校验脚本如下,意思是判断nginx进程是否存在,如果不存在则尝试启动。如果不能启动将退出keepalived服务,由其他服务器接管。接管的依据依靠priority 的值来决定,哪个节点值最大,则有哪个来接管。
#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
/opt/nginx/sbin/nginx
sleep 2
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
/etc/init.d/keepalived stop
fi
fi
配置完成后,将两个文件copy到其他keepalived节点。并将priority设置合理。这样我们的nginx高可用就已经完成啦... ...