一、下载
二、上传和解压
tar -zxvf keepalived-2.2.7.tar.gz
三、在keepalived中输入如下命令进行配置
./configure --prefix=/usr/local/tool/keepalived-2.2.7 --sysconfdir=/etc
prefix= 指向安装目录(编译安装)
sysconfdir =配置文件路径
报以下错误
安装libnl
#yum -y install libnl libnl-devel
yum -y install libnl*
安装
make && make install
主备配置
文件路径
/etc/keepalived/
一个功能比较完整的常用的 keepalived 配置文件,主要包含以下三块:
! Configuration File for keepalived
#全局定义块
global_defs {
...
}
#VRRP 实例定义块
vrrp_instance VI_1 {
...
}
#虚拟服务器定义块
virtual_server 10.10.10.2 1358 {
...
}
1、全局定义块
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
参数说明:
notification_email :email通知,用于服务有故障时发送邮件报警。可选项,不建议用。需系统开启sendmail服务,建议用第三方独立监控服务,如使用nagios监控代替。
notification_email_from :指定发件人,可选配置。
smtp_server: 指定发送邮件的smtp服务器地址,可选配置。
smtp_connect_timeout:指定连接smtp的超时时间,可选配置。
router_id :用户标识本节点的名称,通常为 hostname
2、VRRP 实例定义块
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.200.16
192.168.200.17
192.168.200.18
}
}
参数说明:
vrrp_instance :定义一个vrrp_install实例,名称为VI_1
state :表示该实例的角色状态,有MASTER和BACKUP两种主备状态。
interface :对外提供服务的网络接口,如eth0,ens33
查看网络接口命令: ip addr
virtual_router_id :虚拟路由ID标识,主备服务器配置中相同实例的ID必须一致,否则将出现脑裂问题。
priority :priority表示实例优先级。数字越大,优先级越高。
advert_int :advert_int为同步通知间隔。主备之间通信检查的时间间隔,默认为1秒。
authentication :权限认证配置。
virtual_ipaddress :虚拟IP地址;可以配置多个IP,每个IP占一行。注意,这里的IP就是在工作中需要和域名绑定的ip,即可配置的高可用服务监听的ip保持一致。
3、虚拟服务器定义块
virtual_server 192.168.200.100 443 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.201.100 443 {
weight 1
SSL_GET {
url {
path /
digest ff20ad2481f97b1754ef3e12ecd3a9cc
}
url {
path /mrtg/
digest 9b3a0c85a887a256d6939da88aabd8cd
}
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
参数说明:
virtual_server:定义一个虚拟服务器,这个ip是virtual_address中定义的其中一个。语法格式:ip+空格+服务端口
delay_loop 6:健康检查时间间隔,单位:秒
lb_algo rr:负载均衡调度算法,互联网应用常用方式为 wlc或rr
lb_kind NAT:负载均衡转发规则。包括DR、NAT、TUN 3种,一般使用路由(DR)转发规则。
persistence_timeout 50:http服务会话保持时间,单位:秒
protocol TCP:转发协议,分为TCP和UDP两种
real_server:真实服务器IP和端口,可以定义多个
weight 1:负载权重,值越大,转发的优先级越高
connect_timeout 3:服务连接超时时长,单位:秒
nb_get_retry 3:服务连接失败重试次数
delay_before_retry 3 :重试连接间隔,单位:秒
4、检查Nginx服务的脚本
如果Nginx挂掉的话,keepalived无法获知,所有需要在配置文件中添加检查的脚本
vrrp_script check_nginx {
script "/etc/keepalived/scripts/check_nginx.sh"
interval 3
weight 2
}
参数说明:
script :执行的脚本
interval 3:每个3秒执行以下脚本
weight 2:如果脚本运行成功,权重就会加2 (vrrp_instance 中priority 的权重加2)
weight -2:如果脚本运行失败,权重就会减2 (vrrp_instance 中priority 的权重减2)
在VRRP 实例定义块中加入以下
track_script {
check_nginx
}
检查Nginx进程是否运行
(1)、方法一
#!/bin/sh
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
#尝试重启Nginx服务
/usr/local/tool/nginx-1.22.0/sbin/nginx
#等一会再重新检查,如果Nginx服务没有启动,则停止keepalived,让备用机工作
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
(2)、方法二
在Nginx配置目录下增加health.conf的配置文件,该配置文件用于配置Nginx health的接口。
server {
listen 80 default_server;
server_name localhost;
default_type text/html;
return 200 'Health';
}
脚本:
#!/bin/sh
set -x
timeout=30 #指定默认30秒没返回200则为非健康,该值可根据实际调整
if [ -n ${timeout} ];then
httpcode=`curl -sL -w %{http_code} -m ${timeout} http://localhost -o /dev/null`
else
httpcode=`curl -sL -w %{http_code} http://localhost -o /dev/null`
fi
if [ ${httpcode} -ne 200 ];then
killall keepalived
exit 1
else
exit 0
fi