Nginx + LVS + KeepAlived实现高可用集群

news2024/10/7 5:43:03

文章目录

      • 一、名词解释
        • 1、高可用集群
        • 2、LVS
        • 3、Keepalived
      • 二、搭建流程
        • 1、安装Docker
        • 2、安装Nginx
        • 3、安装Keepalived
        • 4、编写nginx_check.sh脚本

一、名词解释

1、高可用集群

对于中小型互联网公司,产品所承受的请求量还是比较低的,所以一般使用单节点Nginx + 多服务集群,这种方式就能够满足需求。

但是有些公司产品请求量是非常大的,此时单台Nginx可能没办法满足需求(如果单节点宕机,整个系统崩溃),此时就会考虑搭建Nginx高可用集群,通过LVS提供统一的访问入口,将请求负载均衡到我们的Nginx集群。

当某个Nginx节点宕机,Keepalived会进行监控,备用节点也会继续向外提供服务,确保程序还是正常运行,这就是高可用集群的魅力

2、LVS

LVS(Linux Vritual Server),大白话翻译过来就是一种负载均衡调度器,可以虚拟出来一个IP地址(公网IP),这样可以为我们的Nginx集群生成一个唯一的访问IP地址,该IP一般称之为VIP(Vriutal IP,虚拟IP),用户访问虚拟IP就可以实现Nginx集群的负载均衡功能
在这里插入图片描述

3、Keepalived

LVS只提供负载均衡功能,但是不能监控Nginx节点状态。如果某Nginx节点宕机,就没办法处理客户端发送过来的请求,造成服务不可用!

Keepalived 基于 VRRP 协议实现的保证集群高可用,主要功能是实现真机的故障隔离和负载均衡器间的失败切换,防止单点故障

VRRP协议保证当主机的下一路由器出现故障时,由另外一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性。
在这里插入图片描述

二、搭建流程

我使用的是两台阿里云ESC(2核2G服务器),IP地址分别为:
47.94.210.20:22(Master)
8.218.185.242:22(Backup)
大家可以在Windows本地安装虚拟机来代替。

1、安装Docker

两台ESC分别安装好Docker,参考该博客第1小节,即可顺利安装:https://blog.csdn.net/weixin_46594796/article/details/122750009

2、安装Nginx

两台ESC安装好Nginx,流程参考该博客第5小节(跳过配置证书流程):
https://blog.csdn.net/weixin_46594796/article/details/130446464

按照第5小节执行完毕后,两台服务器执行下方命令,此时Nginx容器启动成功:

# 进入 /usr/local/nginx/html 
cd /usr/local/nginx/html

# 创建nginx首页(两台服务器首页内容要区分,第二台服务内容可以为"Backup Nginx")
echo "Master Nginx" > index.html

# 启动容器
docker run \
--name nginx \
-p 443:443 -p 80:80 \
-v /usr/local/nginx/logs:/var/log/nginx \
-v /usr/local/nginx/html:/usr/share/nginx/html \
-v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/nginx/conf.d:/etc/nginx/conf.d \
-v /usr/local/nginx/ssl:/etc/nginx/ssl/  \
--privileged=true -d --restart=always nginx

3、安装Keepalived

两台ESC分别安装Keepalived:

# 通过yum工具安装Keepalived
yum install -y keepalived
  1. 操作主节点keepalived配置文件
# 编辑配置文件
vim /etc/keepalived/keepalived.conf

配置内容如下:

! Configuration File for keepalived

# Keepalived 检测脚本
vrrp_script chk_nginx {
        script "/etc/keepalived/nginx_check.sh" # nginx宕机以后,自动开启shell
        interval 2                              # 检测时间间隔
        weight -20                              # 如果条件成立,权重为-20
}

vrrp_instance VI_1 {
    state MASTER              # 主、备标识
    interface eth0            # 网卡
    virtual_router_id 51      # 主、备需要相同
    mcast_src_ip 47.94.210.20 # 本机IP
    priority 100              # 优先级(主节点大)
    advert_int 1              # 心跳检测间隔
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    # 将 chk_nginx 加入instance 配置块
    track_script {
        chk_nginx
    }

    # 虚拟IP
    virtual_ipaddress {
        192.168.200.16
    }
}
  1. 操作备节点keepalived配置文件
# 编辑配置文件
vim /etc/keepalived/keepalived.conf

配置内容如下:

! Configuration File for keepalived

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight -20
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    mcast_src_ip 8.218.185.242
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    track_script {
        chk_nginx
    }

    virtual_ipaddress {
        192.168.200.16
    }
}

4、编写nginx_check.sh脚本

两台ESC分别执行:

# 编辑脚本
vim /etc/keepalived/nginx_check.sh

内容如下:

counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
    	docker restart nginx
    sleep 2
    counter=$(ps -C nginx --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
        systemctl stop keepalived
    fi
fi
# 脚本文件授权
chmod 777 /etc/keepalived/nginx_check.sh

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/483005.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

碳中和专题:智慧城市建设能否提高碳生产率?—基于中国智慧城市试点的准自然实验

一.研究内容 目前,中国面临着如何在保证经济增长的前提下实现减排目标的困境。智能城市建设作为一种新型的城市发展模式,有可能成为解决这一问题的关键。本文使用多周期双重差分DID模型进行实证分析,旨在评估智能城市试点政策对碳生产率的影响…

论文笔记:Model-Contrastive Federated Learning

0 简介 论文:Model-Contrastive Federated Learning 代码:https://github.com/QinbinLi/MOON 相关链接:本文主要是将SimCLR对比学习的思想迁移到联邦学习中,关于SimCLR的介绍见https://blog.csdn.net/search_129_hr/article/deta…

最好的物联网教程:软硬结合——从零打造物联网

在大学里不同专业有着不同的追求:机械类与强电类专业学生追求的是 “机电合一” ,既懂机械又懂电气,整个电气机械自动化便能打通。弱电类专业学生追求的是 “软硬结合” ,既懂硬件又懂软件,整个电子产品便能打通。我作…

唱作音乐人朱卫明新歌全网首发,当初恋遇到《龙仙街》

今年唱作音乐人朱卫明正式出道25周年了!为纪念这个生涯里程碑,朱卫明近日在酷狗音乐首发全新单曲《龙仙街》,上酷狗搜索“朱卫明”,即可抢先收听。 这首歌是继《酒吧情歌》《不爱她》《只要陪着你》《有缘无分》《断了吧》《疯狂爱…

Linux——基础IO

目录 C语言文件操作 fprintf​编辑 Linux下的文件操作(文件的系统调用接口) open open的第三个参数 open的第二个参数 write read 文件描述符fd 进程与被打开文件的关系(理解的关键) 见见猪跑 fd文件描述符的分配规则 结论 重定向 输入重定向原理 输出重…

Linux线程:互斥锁mutex的使用

1. 同步 & 互斥 (1)同步 多个进程或线程按照一定的执行顺序完成某一任务;如B任务依赖A任务产生的数据。 (2)互斥 临界资源同一时刻只能被一个进程或线程使用。 2. 临界资源 和 临界区 (1&#xff…

feign远程调用原理

目录 一、简介 二、调用流程分析 2.1 添加注解 2.2 Import(FeignClientsRegistrar.class), 2.3 代理创建流程 2.4 代理调用 一、简介 feign是springCloud全家桶中的远程调用组件,其底层主要依赖于Java的动态代理机制,然后基于http client…

【软件测试】全网火爆,实战Web项目前后台的bug定位(超详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 系统整体架构 Se…

【Java入门合集】第二章Java语言基础(三)

【Java入门合集】第二章Java语言基础(三) 博主:命运之光 专栏:JAVA入门 学习目标 掌握变量、常量、表达式的概念,数据类型及变量的定义方法; 掌握常用运算符的使用; 掌握程序的顺序结构、选择结…

【微信小程序开发】微信小程序集成腾讯位置项目配置

第一步 进入官网 按照Hello World流程走 腾讯位置服务官网 1、申请密钥 当然没账号的要先注册一个账号 在我的应用里创建一个新的应用,印象中需要小程序ID,去微信开发者工具里面找到自己的小程序ID填入即可 添加key中勾选勾选WebServiceAPI 2、下载S…

锐龙7000PBO温度墙设置

AMD的锐龙7000处理器首发评测大家也都看过了,很多人关心的都是它的性能是否可以超越12代酷睿甚至即将发布的13代酷睿,这方面的测试结果差不多了,但是很多人不知道的是散热问题更需要关注。 在评测中,锐龙9 7950X在拷机时温度达到…

【PCIE体系结构七】数据链路层介绍

👉个人主页:highman110 👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 参考书籍:PCI_Express体系结构导读 目录 前言 数据链路层概述 数据链路层…

命名ACL配置

命名ACL配置 【实验目的】 掌握命名ACL的配置。验证配置。 【实验拓扑】 实验拓扑如图1所示。 图1 实验拓扑 设备参数如表所示。 表1 设备参数表 设备 接口 IP地址 子网掩码 默认网关 R1 S0/3/0 192.168.1.1 255.255.255.252 N/A Fa0/0 192.168.2.1 255.255.…

05_Uboot源码目录分析

目录 Uboot 源码目录分析 arch 文件夹 board 文件夹 configs 文件夹 .u-boot.xxx_cmd 文件 Makefile 文件 u-boot.xxx文件 .config文件 README Uboot 源码目录分析 学会uboot使用以后就可以尝试移uboot到自己的开发板上了,但是在移植之前需要我们得先分析一遍uboot的…

什么是Spring FactoryBean?有什么作用?

1、什么是Spring Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IOC和AOP为内核。含有七大核心模块 2、Spring的七大模块 (1)Spring Core:核心容器提供了Spring的基本功能。核心容器的核心功能是用IOC 容器来管理类的依赖关系&#xff…

卷积神经网络详解

(一)网络结构 一个卷积神经网络里包括5部分——输入层、若干个卷积操作和池化层结合的部分、全局平均池化层、输出层: ● 输入层:将每个像素代表一个特征节点输入进来。 ● 卷积操作部分:由多个滤波器组合的卷积层。 …

788. 逆序对的数量(C++和Python3)——2023.5.2打卡

文章目录 QuestionIdeasCode Question 给定一个长度为 n 的整数数列&#xff0c;请你计算数列中的逆序对的数量。 逆序对的定义如下&#xff1a;对于数列的第 i 个和第 j 个元素&#xff0c;如果满足 i<j 且 a[i]>a[j] &#xff0c;则其为一个逆序对&#xff1b;否则不…

14-6-进程间通信-信号量

前面学习了pipe,fifo,共享内存&#xff0c;信号。 本章将讲述信号量。 一、什么是信号量/信号量集&#xff1f; 1.什么是信号量 信号量是一个计数器。信号量用于实现进程间的同步和互斥。而可以取多个正整数的信号量被称为通用信号量。 对信号量的使用场景的解读 房间&#…

MyBatis学习记录

文章目录 MyBatis介绍JDBC缺点MyBatis简化MyBatis快速入门之查询user表中的所有数据1、创建user表&#xff0c;添加数据2、创建模块&#xff0c;导入坐标3、编写MyBatis核心配置文件 --> 替换连接信息&#xff0c;解决硬编码问题4、编写SQL映射文件 --> 同一管理sql语句&…

计算机网络:DNS域名解析过程

基本概念 DNS是域名系统&#xff08;Domain Name System&#xff09;的缩写&#xff0c;也是TCP/IP网络中的一个协议。在Internet上域名与IP地址之间是一一对应的&#xff0c;域名虽然便于人们记忆&#xff0c;但计算机之间只能互相认识IP地址&#xff0c;域名和IP地址之间的转…