Keepalived+nginx 集群解决单点故障
Keepalived+nginx 集群解决单点故障
nginx作为负载均衡器,所有请求都到了nginx服务器,可见nginx处于一个非常重要的位置,如果nginx服务器宕机,那么后台的服务器将无法提供服务,严重影响客户端的请求,为了防止nginx宕机导致整个服务无法使用的灾难性发生,我们可以考虑使用Keepalived+nginx集群实现高可用。
一、Keepalived简介和工作原理
Keepalived是一种高性能的服务器高可用或热备解决方案,Keepalived可以用来防止服务器单点故障的发生,通过配合nginx可以实现web前端服务的高可用。该项目的主要目标是为Linux系统和基于Linux的基础结构提供负载均衡和高可用性的简单而强大的功能。 负载平衡框架依赖于提供第4层负载平衡的著名且广泛使用的Linux虚拟服务器(IPVS)内核模块。
Keepalived实现了一组检查器,以根据其运行状况动态,自适应地维护和管理负载平衡的服务器池。另一方面,VRRP实现了高可用性 协议。VRRP是路由器故障转移的基础砖。此外,Keepalived还实现了一组VRRP有限状态机的挂钩,从而提供了低级和高速协议交互。为了提供最快的网络故障检测,Keepalived实施BFD协议。VRRP状态转换可以考虑BFD提示来驱动快速状态转换。Keepalived框架可以独立使用,也可以一起使用以提供弹性基础架构。keepalived高可用服务之间的故障转移,是通过VRRP来实现的。在keepalived服务工作时,主Master节点会不断地向备节点发送(多播的方式)心跳消息,用来告诉备Backup节点自己还活着。
当主节点发生故障时,无法给备节点发送心跳消息,如果备节点无法继续检测到来自主节点的心跳。就会调用自身的接管程序,接管主节点的IP资源和服务。当主节点恢复时,备节点又会释放主节点故障时自身接管的IP资源和服务,恢复到原来的备用角色。keepalived工作在IP/TCP协议栈的IP层,TCP层,及应用层,工作原理基于VRRP协议。
网络层(layer 3):Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包,(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除。
传输层(layer 4):Keepalived以TCP端口的状态来决定服务器工作正常与否,如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。
应用层(layer 5):只要针对应用上的一些探测方式,如URL的get请求,或者对nginx脚本检测等;可以根据用户自定义添加脚本针对特定的服务进行状态检测,当检测结果与用户设定不一致,则把这台服务器从服务器群中剔除。
Keepalived服务的三个重要功能:
1)管理LVS负载均衡软件ipvsadm
2)实现LVS集群节点的健康检查
3)作为系统网络服务的高可用性
二、VRRP协议与工作原理
- 在现实的网络环境中。主机之间的通信都是通过配置静态路由或者(默认网关)来完成的,而主机之间的路由器一旦发生故障,通信就会失效,因此这种通信模式当中,路由器就成了一个单点瓶颈,为了解决这个问题,就引入了VRRP协议。VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议。VRRP出现的目的就是为了解决静态路由单点故障问题,它能保证当个别节点宕机时,整个网络可以不间断地运行。
VRRP选举机制
- 虚拟IP拥有者,如果某台路由器的IP地址与虚拟路由器的VIP地址一致,那么这台就会被选为主用路由器。
- 优先级较高者,如果没有虚拟IP拥有者,优先级数值大的路由器会被选举出,优先级范围0~255。
- IP地址较大者,如果优先级一样高,IP地址数值大的路由器会被选举出。
三、 实现过程
3.1方案介绍
3.2 在143和119上安装nginx,安装过程可以参考之前的博客
3.3 安装keepalived
安装前准备:
yum -y install gcc gcc-c++ autoconf automake makeyum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel
3.4 正式安装:
方法一:
yum -y install keepalived
方法二:
进入官网下载源码包,然后传进服务器
下载二进制源码包
https://www.keepalived.org/software/keepalived-2.1.2.tar.gz
下载安装文件
wget https://www.keepalived.org/software/keepalived-2.1.2.tar.gz -C /usr/local
解压文件:
tar -zxvf keepalived-2.1.2.tar.gz #编译cd keepalived-2.1.2./#--prefix 指定安装地址#/usr/local/keepalived/ 安装的目录,不要和自己安装文件一个目录,不然报错./configure --prefix=/usr/local/keepalived/#编译并安装make && make install设置keepalived开机启动chkconfig keepalived on
配置使用说明
进入/etc/keepalived/keepalived.conf 编辑
[root@do8888 ~]# ll /etc/keepalived/ 总用量 12 -rw-r--r-- 1 root root 526 4月 29 00:47 keepalived.conf-rw-r--r-- 1 root root 3598 10月 1 2020 keepalived.conf.rpmnew -rwxr-xr-x 1 root root 237 4月 29 00:55 nginx_check.sh
修改master配置文件
vim keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id 192.168.8.143}vrrp_script chk_nginx {script "/etc/keepalived/nginx_check.sh" interval 2weight -20
}vrrp_instance VI_1 {state MASTERinterface ens32virtual_router_id 110mcast_src_ip 192.168.8.143priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}track_script {chk_nginx}virtual_ipaddress {192.168.8.100}
}
修改save配置文件
! Configuration File for keepalivedglobal_defs {router_id 192.168.8.143}vrrp_script chk_nginx {script "/etc/keepalived/nginx_check.sh" interval 3weight -20
}vrrp_instance VI_1 {state BACKUPinterface enp0s3virtual_router_id 110mcast_src_ip 192.168.8.119priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}track_script {chk_nginx}virtual_ipaddress {192.168.8.100}
}
编写 keepalived 监测 nginx 的脚本
我们在 keepalived.conf 中 vrrp_script chk_haproxy
配置的监测脚本路径和名称如下: /etc/keepalived/nginx_check.sh
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then/usr/local/nginx/sbin/nginxsleep 5if [ `ps -C nginx --no-header |wc -l` -eq 0 ];thenkillall keepalivedecho `date` > /root/timer.txtfi
fi
nginx 挂掉之后, keepalived 重新启动 nginx ,若不能启动 则关闭当前 keepalived
然后运行 chmod +x nginx_check.sh 命令为脚本文件添加可执行权限
- 分别启动两台服务器上的 nginx 和 keepalived
启动 nginx
./nginx
查看 nginx 是否成功启动
ps -ef | grep nginx
启动 keepalived
systemctl start keepalived.service
查看 keepalived 状态
systemctl status keepalived.service
- 测试
配置信息如下
主服务器: 192.168.8.119
从服务器: 192.168.8.143
虚拟 IP: 192.168.8.110
1、浏览器访问 192.168.8.110
2、关闭主机 192.168.141.119 上的 nginx 和 keepalived ,再次访问虚拟 IP ,发现可以正常访问,并且访问的是从机
Keepalived+nginx 集群解决单点故障相关推荐
- Tomcat学习总结(8)——Tomcat+Nginx集群解决均衡负载及生产环境热部署
近日,为解决生产环境热部署问题,决定在服务器中增加一个tomcat组成集群,利用集群解决热部署问题.
- Java架构师:单体部署 ->Nginx 集群 -> + Keepalived“高可用”组件 -> + LVS负载均衡
一.集群阶段开篇概述 1.单体部署 1.1 单台服务器(节点)部署 1.2.多台服务器(节点)部署 集群.分布式.微服务中的各个服务器节点必须互通,必须在同一个局域网(内网要通) 1.3.单体架构的优 ...
- 基于LVS高可用架构实现Nginx集群分流
Nginx实用插件_踩踩踩从踩的博客-CSDN博客 前言 前面文章介绍Nginx的核心及扩展插件必要的性能优化,以及在nginx中如何实用用https:本篇文章会继续讲解重要的概念 lvs高可用框架, ...
- Nginx 集群安装以及常用配置详解开机自启动
Nginx 配置文件详解 main: 全局配置 event: 配置工作模式以及连接数 http: http 模块相关配置 server 虚拟主机配置,可以有多个 location 路由规则,表达式 u ...
- Redis + Tomcat + Nginx 集群实现 Session 共享
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者 | 蕃薯耀 链接 | www.cnblogs.com/fan ...
- Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享
转载自 Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享 一.Session共享使用tomcat-cluster-redis-session-mana ...
- C#session共享+redis_Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享
作者:蕃薯耀 链接:www.cnblogs.com/fanshuyao 一.Session共享使用tomcat-cluster-redis-session-manager插件实现 插件地址见: htt ...
- Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建六(Kylin篇)
Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建六(kylin篇) 八.Kylin搭建 1.安装 2.配置环境变量 3.配置kylin 4.启动使用 5.问题 全 ...
- Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建
Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建 一.虚拟机安装Centos7 1.准备工作 2.centos7安装过程 3.关闭防火墙(关键) 二.安装jdk ...
最新文章
- push代码到github时,每次都要输入用户名和密码的问题
- CTime COleDateTime的常用操作和比较
- 【转】ABAP的坑1
- 问题 F: 积木大赛(模拟)
- 新0-Day漏洞或将给Linux桌面发行版带来浩劫
- 网页技术革命:精美绝伦的 HTML5 个人作品集网站
- Spring自学教程-AOP学习(五)
- Python基础学习(二)
- Lotus Traveler 8.5.1的安装及配置
- 如何写php大马,带你走进php大马的结构模块编写之路
- 《Python语言程序设计基础》嵩天著-第4章程序部分练习题答案
- matlab读取多张图片数据
- 英国外交部翻译教你实用口语课,让你飚出一口地道、流利英语
- php隐藏notice错误,php屏蔽notice错误
- 应用泛函分析—距离空间
- 蓝色理想的flex教材不能在flex Development做不能使用,我整理一下供初学者参考
- Web代理(HTTP代理)
- 树莓派和主机相互PING
- 【漫步计算机系统】:发展概览Ⅲ
- 多多自走棋改动_《多多自走棋》9月底最新平衡性改了什么 最新平衡性改动介绍...