nginx作负载均衡,能达到分发请求的目的,可是不能很好的避免单点故障。html
Keepalived的做用是检测服务器的状态,若是有一台web服务器宕机,或工做出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使 其余服务器代替该服务器的工做,当服务器工做正常后Keepalived自动将服务器加入到服务器群中,这些工做所有自动完成,不须要人工干涉,须要人工作的只是修复故障的服务器。
总结来讲:Keepalived软件是一个监控+自愈的软件。
运行协议是VRRP,主分发器的keepalived会向网络中发组播,宣告本身还活着,组播地址:224.0.0.18。linux
$ tcpdump -nn -vvv -i ens33 vrrp #查看组播的包 192.168.31.40 > 224.0.0.18: vrrp 192.168.31.40 > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20, addrs: 192.168.31.213 auth "1111^¥##" 输出解析:192.168.31.40是master,目标地址是224.0.0.18,使用的协议是VRRPv2版本,虚拟id是51,优先级是100,简单验证类型,一秒发一次,长度20字节,虚Ip是192.168.31.213, 验证的密码是111#$Z%#
keepalived官网下载地址
linux下载keepalived软件:nginx
$ wget http://www.keepalived.org/software/keepalived-2.0.8.tar.gz
使用以下shell脚本keepalived_instll.sh安装keepalived软件。web
$ sh keepalived_install.sh #keepalived安装脚本 #!/bin/bash pkg=keepalived-2.0.8.tar.gz tar xf $pkg yum -y install kernel-devel ln -s /usr/src/kernels/3.10.0-862.14.4.el7.x86_64/ /usr/src/linux cd keepalived-2.0.8/ yum install openssl-* -y ./configure --prefix=/usr/local/keepalived make make install mkdir -pv /etc/keepalived cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ ln -s /usr/local/keepalived/sbin/keepalived /sbin/
$ systemctl start keepalived
主机名 | IP | 角色 | 系统 | 配置 | 软件 |
---|---|---|---|---|---|
Master.ayitula.com | 192.168.31.40 | 主分发器 | centos7.5 | 2核4G | Nginx+keepalived |
Backup.ayitula.com | 192.168.31.41 | 备分发器 | centos7.5 | 2核4G | Nginx+keepalived |
Web01.ayitula.com | 192.168.31.42 | 数据服务器1 | centos7.5 | 2核4G | Nginx |
Web02.ayitula.com | 192.168.31.43 | 数据服务器2 | centos7.5 | 2核4G | Nginx |
1)分发器:nginx+keepalived
2)数据服务器:Nginx
3)配置Nginx分发器
4)配置数据服务器页面(web01 web02)
5)配置keepalived.conf
6)测试shell
upstream web { server 192.168.31.42 max_fails=2 fail_timeout=3; # 超时时间3秒内失败2次认为服务器死了 server 192.168.31.43 max_fails=2 fail_timeout=3; } server { listen 80; server_name localhost; location / { proxy_pass http://web; } }
! Configuration File for keepalived global_defs { router_id NGINX_DEVEL } vrrp_script check_nginx { # 定义一个脚本 script "/etc/keepalived/nginx_pid.sh" # 脚本路径 interval 2 # 探针,此处是每两秒执行一次脚本 fall 1 # 失败次数 1 } vrrp_instance nginx { # 定义名为nginx实例 state MASTER # 主机状态 interface ens33 # 网卡 mcast_src_ip 192.168.31.40 # 发组播 virtual_router_id 51 # 虚拟id priority 100 # 优先级 advert_int 1 # 探针,一秒发一次组播 authentication { auth_type PASS auth_pass 1111 # 密码 } track_script { check_nginx } virtual_ipaddress { # 虚ip 192.168.31.213/24 } }
#cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id NGINX_DEVEL } vrrp_script check_nginx { script "/etc/keepalived/nginx_pid.sh" interval 2 fall 1 } vrrp_instance nginx { state BACKUP interface ens33 mcast_src_ip 192.168.31.41 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { check_nginx } virtual_ipaddress { 192.168.31.213/24 } }
#!/bin/bash nginx_kp_check () { nginxpid=`ps -C nginx --no-header |wc -l` if [ $nginxpid -eq 0 ];then /usr/local/nginx/sbin/nginx sleep 1 nginxpid=`ps -C nginx --no-header |wc -l` if [ $nginxpid -eq 0 ];then systemctl stop keepalived fi fi } nginx_kp_check
脚本原理:该脚本检查nginx进程是否存在,若是进程没了,说明分发器挂了,尝试启动分发器,1秒后检查分发器启动没有,若是没有启动直接关闭keepalived,中止发组播,备就自动开始工做了。centos
分发器由keepalived来管理bash
$ watch -n1 killall nginx # 每隔一秒杀死一次全部nginx
数据服务器则由nginx来管理。使用以下两个参数就可实现对数据服务器管理:服务器
upstream web { server 192.168.31.42 max_fails=2 fail_timeout=3; # 超时时间3秒内失败2次认为服务器死了 server 192.168.31.43 max_fails=2 fail_timeout=3; }