如何保障nginx的高可用性(keepalived)(五)

简介: 如何保障nginx的高可用性(keepalived)

了解keepalived



不仅可以做Nginx的高可用,也可以做其他的例如Mysql高可用。


一个机器可以绑定多个IP,可以在Nginx上使用keepalived绑定一个虚拟IP,当某一台Nginx出现问题,这个虚拟IP就会自动转移到另一台。


高可用故障切换转移原理


Keepalived高可用故障切换,是通过VRRP虚拟路由器冗余协议来实现的。


在Keepalived服务正常工作时,主Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活着,当主Master节点发生故障时,就无法发送心跳消息,备节点无法检测到来自主Master节点心跳了,于是调用自身的接管程序,接管主Master节点的IP资源及服务。而当主Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。


VRRP协议


虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由/网关为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。


keepalived主要有三个模块


分别是core、check和vrrp。 core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。 check负责健康检查,包括常见的各种检查方式。 vrrp模块是来实现VRRP协议的。


传统的高可用思路


tomcat的高可用的思路,是在tomcat集群前面加一层负载服务nginx。如下图



image



这种做法,解决了tomcat的高可用问题。但是引入了前面的负载机器的高可用问题(Nginx如果挂了,玩完)


如果nginx沿用此思路,总会有一个最前端是单机的,存在宕机玩完的风险(鸡生蛋蛋生鸡无穷尽)


15.2. lvs 思想解决高可用问题



image



如上图,由服务器集群虚拟出来一台 虚拟网关vip(不真实存在,自然不存在宕机问题),


此vip由两台机器共同协商生成。当有一台机器宕机时,另一台机器一样能维持vip。这保证了,只要两台机器不同时宕机,vip就存在


15.3. keepalived配置LVS过程


前提


1.关闭selinux,打开/etc/sysconfig/selinux设置其中值 à SELINUX=disabled



image



2.安装必须的依赖包


yum -y install libnl libnl-devel libnfnetlink-devel


keepalived安装


下载源码包--不能使用yum方式安装(有bug) --wget https://www.keepalived.org/software/keepalived-1.3.4.tar.gz


配置(指定安装目录和配置目录,否则文件太散乱) --./configure --prefix=/usr/local/keepalived --sysconf=/etc


make && make install


keepalived主机配置


打开/etc/keepalived/keepalived.conf,只需要配置如下一段。(其它是多余配置,删除)



image


​启动keepalived,查看机器ip地址,可发现多出一个244.200的ip
image



此时,使用原ip地址244.253能打开的页面,使用244.200也能打开



image



keepalived从机配置


从机配置与主机过程完全一样,配置文件内以下标识id与优先级稍作变化即可



image



启动从机的keepalived后,可发现其ip地址无变化


keepalived校验LVS效果


1、此时,杀掉主机上的keepalived,244.200的ip将从主机上消失。而出现的从机的ip中


2、再次启动主机的keepalived,244.200的ip将被主机重新夺回


3、此效果是单主单备方式。备机资源有一定的浪费。可以重复前面的动作,虚拟出第二个ip,将主从机优先级颠倒,从而利用起备机服务


keepalived监控服务软件


以上操作中,keepalived很好的实现了LVS功能,即集群机器共同虚拟一个vip,并实现在集群中自动漂移。


但假如物理机状况良好,并不能保障其上运行的服务软件ok,因此需要借助keepalived来监控服务软件。


a、使用keepalived来监控nginx


编辑一个sh监控脚本,sh脚本:


#!/bin/bash

A=`ps -C nginx --no-header |wc -l` #统计nginx进程是否存在

if [ $A -eq 0 ];then #为0,表明nginx停止了

  /usr/local/nginx/sbin/nginx                #尝试重启nginx

  if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重启失败,则keepalived自杀,进行VIP转移

          killall keepalived    #杀掉,vip就漫游到另一台机器 

  fi

fi


b、在配置文件中加入以下两处配置:


image


c、重启keepalived,测试监控效果,如下图操作:


image


nginx已变成不死鸟


云服务器ECS地址:阿里云·云小站

相关文章
|
6月前
|
网络协议 算法 Java
nginx与keepalived的那些事
nginx与keepalived的那些事
102 0
|
6月前
|
应用服务中间件 nginx
服务搭建篇(四) 搭建基于Nginx + keepalived的高可用服务
比如我这里虚拟IP+nginx端口是 : 192.168.154.10:80 , 我直接访问 , 出来的是192.168.154.134服务器上的nginx , 因为我刚刚做了区分 , 所以这个时候就可以知道访问的是哪个机器的Nginx , 然后我们把134的Nginx停掉 , 然后再次访问 , 仍然可以使用 , 此时 ,出现的135的页面 , 也就是访问的是192.168.154.135的Nginx
92 0
|
5月前
|
负载均衡 应用服务中间件 Linux
Nginx系列教程(14) - LVS+KeepAlived+Nginx实现高性能负载均衡集群
Nginx系列教程(14) - LVS+KeepAlived+Nginx实现高性能负载均衡集群
183 0
|
6月前
|
负载均衡 算法 应用服务中间件
百度搜索:蓝易云【Linux系统如何使用 HAProxy、Nginx 和 Keepalived 进行负载均衡?】
通过上述步骤,你可以在Linux系统中使用HAProxy、Nginx和Keepalived来实现负载均衡。这些工具可以帮助你将流量分配到多个后端服务器上,提高系统的性能、可靠性和可扩展性。
90 0
|
8月前
|
tengine 负载均衡 应用服务中间件
Nginx+Keepalived高可用集群部署详细文档
Nginx+Keepalived高可用集群部署详细文档
|
4月前
|
负载均衡 前端开发 应用服务中间件
NGINX高可用之keepalived+nginx主从模式+主主模式配置实践
NGINX高可用之keepalived+nginx主从模式+主主模式配置实践
132 1
|
5月前
|
应用服务中间件 Shell nginx
Nginx + keepalived 实现高可用 + 防盗链 + 动静分离(二)
Nginx + keepalived 实现高可用 + 防盗链 + 动静分离
|
5月前
|
负载均衡 NoSQL 应用服务中间件
Nginx + keepalived 实现高可用 + 防盗链 + 动静分离(一)
Nginx + keepalived 实现高可用 + 防盗链 + 动静分离
|
5月前
|
Kubernetes 应用服务中间件 Linux
suse 12 编译部署Keepalived + nginx 为 kube-apiserver 提供高可用
suse 12 编译部署Keepalived + nginx 为 kube-apiserver 提供高可用
58 0
|
6月前
|
Ubuntu
nginx+keepalived实现高可用
如果通过keepalived实现高可用
66 0