前言:
对于大型web项目来说,必不可少的就是高可用。
那随着公司业务的发展,虽然用nginx做负载均衡仍可以支撑日均百万PV的访问,且运行两年之久未出现单点故障,但仍要考虑避免单点故障导致的业务中断。
keepalived 简介:
keepalived 项目主要的目标是为linux系统和linux基础设施提供负责均衡和高可用。
负载均衡架构依赖于IPVS内核模块提供四层负载均衡,keepalived实现了动态检查和基于负载池的管理服务。另一方面,高可用性是通过VRRP协议实现。简单的框架可以单独或一起提供弹性基础设施。
keepalived配置文件:
keepalived.conf文件由三个配置部分组成:
Globals configurations 全局配置
VRRP configuration VRRP配置
LVS configuration LVS配置
约定:
此文不做nginx安装介绍,有关nginx安装可参考前面的文章
系统:采用centos 6.8 最小化
源文件目录:/usr/local/src
master_ip:192.168.1.10
backup_ip:192.168.1.11
vip:192.168.1.20
keepalived官网http://www.keepalived.org/
keepalived master列出的配置项相对要多,可根据情况选择使用。
分别在主备nginx安装配置keepalived
准备:
下载keepalived源码包:
wget http://www.keepalived.org/software/keepalived-1.3.2.tar.gz
安装开发工具:
yum install gcc-c++ openssl-devel
iptables 配置:
关闭iptables,或允许主备互通
iptables -I INPUT -i eth1 -s 192.168.1.11 -j ACCEPT
iptables -I INPUT -i eth1 -s 192.168.1.10 -j ACCEPT
安装keepalived:
解压:
tar zxf keepalived-1.3.2.tar.gz
配置编译安装:
cd keepalived-1.3.2 ./configure make make install
创建配置文件和服务:
cp -r keepalived/etc/keepalived/ /etc/ cp keepalived/etc/init.d/keepalived.rh.init /etc/init.d/keepalived cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/
配置keepalived:
master keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc #接收通知的邮件地址
}
notification_email_from Alexandre.Cassen@firewall.loc #发送邮件通知的地址
smtp_server 192.168.200.1 #发送邮件的SMTP服务地址,可是ip或域名.可选端口号 (默认25)
smtp_connect_timeout 30 #smtp连接超时时间秒
router_id LVS_DEVEL #主机标识,用于邮件通知
vrrp_skip_check_adv_addr
#vrrp_strict #严格执行VRRP协议规范,此模式不支持节点单播
vrrp_garp_interval 0
vrrp_gna_interval 0
script_user keepalived_script # 指定运行脚本的用户名和组。默认使用用户的默认组。
# 如未指定,默认为keepalived_script 用户,如无此用户,则使用root
enable_script_security #如过路径为非root可写,不要配置脚本为root用户执行。
}
vrrp_script chk_nginx_service { #VRRP 脚本声明
script "/usr/local/keepalived/nginx-ha-check" #周期性执行的脚本
interval 3 #运行脚本的间隔时间,秒
weight -50 #权重,调整优先级(-255-255)。priority值减去此值要小于备服务的priority值
#否则备服务选举为主服务时会失败。
fall 3 # 检测几次失败才为失败,整数
rise 2 # 检测几次状态为正常的,才确认正常,整数
user keepalived_script # 执行脚本的用户或组
}
vrrp_instance VI_1 { #VRRP 实例声明
state MASTER #实例默认状态,MASTER|BACKUP
interface eth0 #绑定的接口
#mcast_src_ip 192.168.1.10 # VRRP 报文使用的源ip地址
unicast_src_ip 192.168.1.10 # VRRP 报文使用的源ip地址 (alias to mcast_src_ip)
unicast_peer { # 不使用VRRP多播,既用单播
192.168.1.11 # 备节点ip,可以是多个
virtual_router_id 51 #VRRP 路由标识(-1-255),主备相同
priority 100 #优先数,-1-255,主服务要大于备服务
advert_int 1 #VRRP 广告间隔
authentication { #主备认证
auth_type PASS #认证方式
auth_pass 1111 #主备需统一
}
virtual_ipaddress { #VRRP 地址,可有多个
192.168.1.20
}
track_script { #脚本监控状态
chk_nginx_service #可加权重,但会覆盖声明的脚本权重值。chk_nginx_service weight -20
}
}
backup keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@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
}
vrrp_script chk_nginx_service {
script "/usr/local/keepalived/nginx-ha-check"
interval 3
weight -10
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.20
}
track_script {
chk_nginx_service
}
}
nginx-ha-check 脚本
chmod +x nginx-ha-check
#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin
STATEFILE=/var/run/nginx-ha-keepalived.state
if [ -s "$STATEFILE" ]; then
. "$STATEFILE"
case "$STATE" in
"BACKUP"|"MASTER"|"FAULT")
service nginx status
exit $?
;;
*|"")
logger -t nginx-ha-keepalived "Unknown state: '$STATE'"
exit 1
;;
esac
fi
service nginx status
exit $?
启动服务:
service keepalived start
验证:
主备服务安装配置完成后,可通过浏览器方位192.168.1.20地址,同时停掉主nginx服务,再次访问192.168.1.20查看页面
nginx主备服务需要能够确认唯一标识的页面,如在index.html中分别表明主备服务。
同时可观察/var/log/messages 日志信息
转载于:https://blog.51cto.com/morrowind/1879447