两台nginx服务器通过keepalived做主从高可用,通过虚拟IP,若主Nginx宕机,则自动切换到备用服务器上。
环境
1 2 3 4 5 | VIP(虚拟IP):192.168 需同网段IP 主nginx: 192.168 从nginx:192.168 web服务器:192.168 :8080 web服务器192.168 :8080 |
步骤
安装nginx
主从服务器都安装nginx。
安装keepalived
1
| yum -y install keepalived 默认安装在 /etc/keepalived/
|
配置文件
先清空默认配置文件
1 2 | cd /etc/keepalived > keepalived.conf |
主配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | vrrp_script check_nginx_alive { script "/etc/keepalived/check_nginx_alive.sh" interval 3 weight -10 } global_defs { router_id LVS_DEVEL # 设置路由标识信息,在一个网络应该是唯一的 } vrrp_instance VI_1 { state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备 interface eth0 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) virtual_router_id 51 # 虚拟路由编号,主从要一直 priority 100 # 优先级,数值越大,获取处理请求的优先级越高 advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数) authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.20 # 定义虚拟ip(VIP),可多设,每行一个 } } 注:check_nginx_alive:监视nginx,若nginx挂了,切断keepalived.如下。 |
从配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | vrrp_script check_nginx_alive { script "/etc/keepalived/check_nginx_alive.sh" interval 3 weight -10 } global_defs { router_id LVS_BACKUP # 设置路由标识信息,在一个网络应该是唯一的 } vrrp_instance VI_1 { state BACKUP # 指定keepalived的角色,MASTER为主,BACKUP为备 interface eth0 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) virtual_router_id 51 # 虚拟路由编号,主从要一直 priority 99 # 优先级,数值越大,获取处理请求的优先级越高 advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数) authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.20 # 定义虚拟ip(VIP),可多设,每行一个 } } |
检测nginx
在/etc/keepalived/下新建check_nginx_alive.sh,用来监视nginx状态
1 2 3 4 5 6 7 8 9 10 11 | PATH=/bin:/sbin:/usr/bin:/usr/sbin A=`ps -C nginx --no-header |wc -l` if [ $A -eq 0 ] then echo 'nginx server is died' killall keepalived fi |
日志
keepalived默认日志存放在系统日志:/var/log/messages下。
1,要把日志单独存放,需要修改/etc/sysconfig/keepalived:
1
| 把KEEPALIVED_OPTIONS="-D" 修改为:KEEPALIVED_OPTIONS="-D -d -S 0"
|
2,在/etc/rsyslog.conf 末尾添加
1
| local0.* /var/log/keepalived.log
|
3,重启日志记录服务
1
| systemctl restart rsyslog
|
4,重启keepalived
1
| systemctl restart keepalived
|
5,查看日志
1
| tail -f /var/log/keepalived.log
|
成功
可以在主服务器上通过 ip a 来查看。会发现网卡 eth0已经绑定了你的虚拟IP。