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 http://mirrors.aliyun.com/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

keepalived实现nginx负载均衡相关推荐

  1. keepalived介绍和keepalived实现nginx负载均衡机高可用

    1. keepalived简介 1.1 keepalived是什么? Keepalived 软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实 ...

  2. Keepalived+LVS+Nginx负载均衡之高可用

    2019独角兽企业重金招聘Python工程师标准>>> 上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致 ...

  3. 解决nginx负载均衡高可用keepalived只针对物理机的问题

    在高可用keepalived软件,在默认的情况下仅仅在对方机器宕机或keepalived停掉的时候才会接管业务. 但是在实际工作过程中,例如在nginx负载均衡工作实例中,nginx服务已停止,而ke ...

  4. nginx+keepalived搭建主从负载均衡并迅速切换

    大家都听说过主从服务器或者负载均衡之类的专业术语,作为衡量一个中高级运维工程师的标准,集群和负载是运维工程师必须掌握的技术,然而在一家小公司是根本不会体会到运维的重要性的.首先从理论上讲一下,当用户量 ...

  5. keepalived高可用+nginx负载均衡

    keepalived高可用+nginx负载均衡 1.IP地址规划 hostname ip 说明 KN01 10.4.7.30 keepalived MASTER节点 nginx负载均衡器 KN02 1 ...

  6. nginx负载均衡(四)----keepalived原理及实现双vip

    keepalived原理及实现双vip 一.什么是keepalived? 二.VRRP协议 1.vrrp协议格式 2.相关术语 3.vrrp协议工作原理 4.master选举 4.1备份组中路由器的优 ...

  7. 企业级Nginx负载均衡与keepalived高可用实战课-老男孩-专题视频课程

    企业级Nginx负载均衡与keepalived高可用实战课-2678人已学习 课程介绍         企业级Nginx负载均衡与keepalived高可用实战分享 课程收益     互联网环境最常用 ...

  8. Nginx负载均衡的详细配置及使用案例

    Nginx负载均衡的详细配置及使用案例详解 感谢看过这一些列博文和评论的小伙伴, 我把自己所看到的学到的拿到这里来分享是想和大家一起学习进步, 想听听园友给出的意见, 也是对自己学习过程的一个总结.  ...

  9. Nginx负载均衡集群介绍

    第1章 集群介绍 1.1 集群简介 1.1.1 什么是集群 简单说,集群就是一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行 ...

最新文章

  1. 安装Python第三方库的三个方法
  2. 推荐一个.NET下转Json的利器,FastJson
  3. kafka 监控(eagle)
  4. html自动获取用户位置,HTML5 - 使用Geolocation(地理定位)获取用户的位置
  5. php的declare命令
  6. js 原型prototype继承模式
  7. go语言调用python_Golang中调用Python3
  8. Ubuntu 下配置 NFS
  9. CakePHP Pagination (分頁功能) 加入自己的參數
  10. 在Ajax程序中实现无刷新换肤功能(asp.net2.0)
  11. 参加双车项目的一些感触
  12. 英特尔显示器音频_英特尔也玩马甲?有关USB TypeC的冷知识你了解多少
  13. java throw throws try-catch-finally异常处理
  14. mysql 根据子查询的结果查询朱标_Python - MySQL数据库操作
  15. 【转】Linux内存管理(最透彻的一篇)
  16. 如何监控防火墙后的流量?
  17. 魔兽争霸3 the oracle,疯狂SQL之魔兽争霸
  18. 极速office(Word)如何在表格里面插入行或者列
  19. 用机器学习自制二手房估价模型(附完整过程)
  20. IDEA导出jar包后运行报错 找不到或无法加载主类

热门文章

  1. AutoCAD.net首尾相连的线分组连接
  2. 在凭证保存时 计算机程序能够对,湖北2015会计从业《会计电算化》全真预测卷三...
  3. 湖大计算机网络复试,湖南大学信息科学与工程学院复试情况
  4. 分不清ARM和X86架构,来看看服务器的产品形态
  5. 【阅读笔记】《TDN: Temporal Difference Networks for Efficient Action Recognition》阅读笔记
  6. 2020美菜网产品经理春招面经
  7. maven打包报错-There are test failures
  8. 在字节跳动实习后,程序员是这样写简历的
  9. 【工具】vue 图片上传(单张/多张)
  10. afaca 分析报告