简介:
在网站架构中,为了分散客户端对服务器的访问压力,可以使用nginx作为反向代理。但是使用一个nginx作为代理服务器必定会面对单点故障的情况,所以一般使用多台nginx反代服务器,而使用多台nginx服务器还要面对如何协调调度的问题。在此,我给大家介绍使用keepalive协调调度nginx反代服务器的方法。
keepalive简介
说到keepalive就要说到他的实现核心——VRRP协议。VRRP即虚拟路由器冗余协议,最初是为了解决多个路由器热备份而制定的。它是通过主路由器定时在网络中发送主路由器信息,通知各个备路由器,当备路由器接收不到信息就会通过优先级竞选成为主路由器。
VRRP的优先级范围是0-255,可配置范围1-254,其中0给路由器放弃MASTER位置时候使用,255保留给IP地址的拥有者使用。如果路由器的IP地址为虚拟IP地址时,只要其工作正常,则为MASTER路由器。
VRRP提供了三种认证方式:
1 无认证;
2 简单字符认证:不能超过8个字符;
3 MD5认证。
实验器材
lvs1 Centos7.3 172.18.55.74
lvs2 Centos7.3 172.18.55.75
web1 Centos6.8 172.18.55.61
web2 Centos7.3 172.18.55.71
实验步骤:
1 安装nginx反向代理服务
2 安装keepalive服务
实验过程:
1 安装nginx反向代理服务
为了简便,这里分别在web1和web2上使用yum源安装的方式
#yum install –y nginx
修改nginx的配置文件
# vim /etc/nginx/nginx.conf
增加服务器组
upstream websvrs { server 172.18.55.61:80; server 172.18.55.71:80; server 127.0.0.1:8080 backup; #sorry Server }
增加sorry server配置
server { listen 8080; root /etc/nginx/html; index sorry.html; location / { } }
增加sorry server页面文件
vim /etc/nginx/html/sorry.html <h1> Sorry !!! <h1>
2 安装keepalive服务
使用yum安装
# yum install –y keepalived
修改配置文件
# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived 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_MASTER #备服务器LVS_BACKUP vrrp_mcast_group4 224.0.109.55 #组播地址,一个虚拟路由器组设置相同 } vrrp_instance VI_1 { state MASTER #备服务器BACKUP interface ens33 #网卡名 virtual_router_id 155 #虚拟路由器ID,主备设置相同 priority 100 #优先级1-254,备服务器98 advert_int 1 #网络通知时间间隔 authentication { auth_type PASS #认证方式为密码 auth_pass GOOD #密码为GOOD,最多8位 } virtual_ipaddress { 172.18.55.100/16 dev ens33 #指定虚拟IP地址和接口网卡 } track_script { ngxstatus #调用nginx状态监测脚本 } notify_backup "/etc/keepalived/notify.sh backup" #如果nginx的状态改为了BACKUP,则执行此脚本 } vrrp_script ngxstatus { #nginx状态监测脚本 script "killall -0 nginx && exit 0 || exit 1" interval 1 weight -5 }
增加配置nginx重启脚本,省略了非必要步骤
vim /etc/ keepalived/notify.sh #!/bin/bash myservice='nginx.service' case $1 in backup) systemctl restart $myservice;; esac
原创文章,作者:realmaster,如若转载,请注明出处:http://www.178linux.com/75869