100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > keepalived实现nginx负载均衡

keepalived实现nginx负载均衡

时间:2020-10-01 17:40:19

相关推荐

keepalived实现nginx负载均衡

keepalived 实现nginx 负载均衡+主备高可用

概述

nginx作为负载均衡器,所有请求都到nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机,后端web服务将无法提供服务,影响严重。

所以在架构设计中,可以利用nginx的反向代理和负载均衡实现后端应用的负载均衡和高可用性,同时我们还需要考虑Nginx的单点故障。真正做到架构高可用性。

主要考虑以下几点:

1、Nginx服务因为意外现象挂掉

2、服务器宕机导致nginx不可用

目前主流的解决方案就是keepalived+nginx 实现nginx的故障转移,同时做好监控报警。在自动故障转移的同时能通知到相关的应用负责人检查相关应用,排查隐患,彻底解决问题。

keepalived的HA分为抢占模式和非抢占模式,抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP。

使用阿里云epel镜像

两台虚拟机都安装

[root@nginx01 ~]# wget -O /etc/yum.repos.d/epel.repo /repo/epel-7.repo

[root@nginx01 ~]# yum -y install nginx

启动服务和开机自启

[root@nginx01 ~]# systemctl start nginx

[root@nginx01 ~]# systemctl enable nginx

安装keepalived

用刚才实验的俩台虚拟机,暂时不用安装,没有的话按之前安装下

修改keepalived.conf配置文件

nginx-01主机上的keepalived.conf文件的修改

[root@nginx01 ~]# vim /etc/keepalived/keepalived.conf

keepalived.conf配置文件完整内容如下所示:

! Configuration File for keepalivedglobal_defs {router_id nginx01}vrrp_script chk_nginx{script "/etc/keepalived/nginx_check.sh"interval 2weight -20}vrrp_instance nginx {state MASTERinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.100}track_script{chk_nginx}}

重启服务

[root@nginx01 ~]# systemctl restart nginx

把配置文件传给nginx02

[root@nginx01 ~]# scp /etc/keepalived/keepalived.conf 192.168.10.7:/etc/keepalived/

[root@nginx02 ~]#vim /etc/keepalived/keepalived.conf

! Configuration File for keepalivedglobal_defs {router_id nginx02}vrrp_script chk_nginx{script "/etc/keepalived/nginx_check.sh"interval 2weight -20}vrrp_instance nginx {state MASTERinterface ens33virtual_router_id 51priority 99advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.100}track_script{chk_nginx}}

重启服务

[root@nginx02 ~]# systemctl restart nginx

创建nginx服务检测脚本

分别在nginx-01和nginx-02服务器的/etc/keepalived目录下创建nginx_check.sh脚本,并为其添加执行权限。用于keepalived定时检测nginx的服务状态,如果nginx停止了,会尝试重新启动nginx,如果启动失败,会将keepalived进程杀死,将vip漂移到备用机器上。

[root@nginx01~]# vim /etc/keepalived/nginx_check.sh

#!/bin/bashnum=$(ps -C nginx --no-header | wc -l)if [ $num -eq 0 ];thensystemctl start nginx #尝试重新启动nginxsleep 1 #睡眠1秒if [ $(ps -C nginx --no-header | wc -l) -eq 0 ];thenkillall keepalived #若nginx启动失败,将keepalived服务杀死。将vip漂移到其它备份节点fifi

说明:

ps -C nginx --no-header | wc -l一般用于shell脚步编写用

-C <指令名称> 选项用来指定程序的名称

--no-header选项去掉头部

killall命令由软件包psmisc提供,确保两台主机要安装psmisc

[root@nginx-01 ~]# chmod +x /etc/keepalived/nginx_check.sh

[root@nginx01 ~]# scp /etc/keepalived/nginx_check.sh 192.168.10.7:/etc/keepalived/

[root@nginx02~]#chmod +x /etc/keepalived/nginx_check.sh

查看进程

[root@nginx01]#ps -ef | grep keepalived

查看进程

[root@nginx02]#ps -ef | grep keepalived

看到如上进程信息,表示keepalived已经启动成功。下面用ip addr命令查看vip绑定的情况,如下所示:

[root@nginx01 ~]# ip addr show dev ens33

[root@nginx02 ~]# ip addr show dev ens33

vip地址192.168.10.100绑定在nginx01的ens33网卡上。

测试

抢占模式

将nginx-01的keepalived服务和nginx服务停掉,查看vip是否漂移到nginx-02

[root@nginx01 ~]# systemctl stop keepalived

[root@nginx01 ~]# nginx -s stop

下面用ip addr命令查看vip绑定的情况,如下所示:

[root@nginx01 ~]# ip addr show dev ens33

[root@nginx02 ~]# ip addr show dev ens33

从上面显示可以看出,vip已经成功从nginx-01漂移到了nginx-02。

将nginx-01的nginx服务和keepalived服务启动,查看抢占模式的效果。

[root@nginx01 ~]# nginx

[root@nginx01 ~]# systemctl start keepalived

[root@nginx01 ~]# ip addr show dev ens33

此时再将nginx-01的nginx服务和keepalived服务启动后,由于nginx-01是MASTER且优先级高,所以会将nginx-02的VIP抢占过来。从上面的显示结果可以看到,VIP又漂移到了nginx-01主机。

非抢占模式

和抢占模式的配置相比,只改了两个地方:

在vrrp_instance块下,两个节点各增加了nopreempt指令,表示不争抢vip。

两个节点的state都为BACKUP。

在非抢占模式下,两个keepalived节点都启动后,默认都是BACKUP状态,双方在发送组播信息后,会根据优先级来选举一个MASTER出来。由于两者都配置了nopreempt,所以MASTER从故障中恢复后,不会抢占vip。这样会避免VIP切换可能造成的服务延迟。

改nginx-01和nginx-02的keepalived.conf内容(标红色部分):

重启keepalived systemctl restart keepalived

[root@nginx01 ~]# ip addr show dev ens33

[root@nginx02 ~]# ip addr show dev ens33

停掉nginx01上服务后在查看

[root@nginx01 ~]# ip addr show dev ens33

[root@nginx02 ~]# ip addr show dev ens33

VIP地址漂移到了nginx-02上

再将nginx-01的keepalived服务启动,查看是否抢占VIP

[root@nginx01 ~]# ip addr show dev ens33

[root@nginx02 ~]# ip addr show dev ens33

VIP还在nginx02上面说明没抢占VIP

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。