nginx+keepalived实现七层负载

目录

一、部署nginx01、nginx02

二、keepalived配置(抢占模式、master- backup模式)

三、测试

四、非抢占模式(backup-backup模式)


nginx01 

11.0.1.31
nginx0211.0.1.32
虚拟IP(VIP)11.0.1.30

一、部署nginx01、nginx02

部署nginx:Nginx、keepalived安装详细步骤_keepalive 安装-CSDN博客

先部署一台,另一台直接克隆改ip就可以

二、keepalived配置(抢占模式、master- backup模式)

keepalived配置文件路径 /etc/keepalived/keepalived.conf

主机 11.0.1.31 

需要更改的参数:router_id、interface ens33、真实IP mcast_src_ip 、虚拟IP11.0.1.30、优先级priority(master需要比backup高)

global_defs {
   router_id nginx-01  #标识本节点的名称,通常为hostname
}

## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0,
##并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
vrrp_script chk_nginx {
       script "/etc/keepalived/nginx_check.sh"
       interval 2  #每2秒检测一次nginx的运行状态
       weight -20  #失败一次,将自己的优先级-20
}

vrrp_instance VI_1 {
    state MASTER                  # 状态,主节点为MASTER,备份节点为BACKUP
    interface ens33              # 绑定VIP的网络接口,通过ifconfig查看自己的网络接口
    virtual_router_id 51          # 虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
    mcast_src_ip 11.0.1.31    # 本机IP地址    
    priority 100                  # 节点优先级,值范围0~254,MASTER要比BACKUP高
    advert_int 1                  # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
    # 设置验证信息,两个节点必须一致
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个
    virtual_ipaddress {
        11.0.1.30
    }

    track_script {
       chk_nginx  # nginx存活状态检测脚本
    }
}

备机 11.0.1.32

global_defs {
   router_id nginx-02
}

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

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    mcast_src_ip 11.0.1.32
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        11.0.1.30
    }

    track_script {
       chk_nginx
    }
}

检测nginx存活脚本,如果nginx进程不存在,尝试启动,如果nginx启动失败(服务器宕机),杀死主机的keepalived程序。主机的keepalived被杀死后VIP将转移到备机11.0.1.32。

主备机都要有检测脚本

vi /etc/keepalived/nginx_check.sh
chmod +x /etc/keepalived/nginx_check.sh

注意许多教程的脚本是centos6的,需要注意“systemctl stop keepalived” 命令是否可以正常关闭keepalived进程。

#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
    /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    sleep 2
    counter=$(ps -C nginx --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
        systemctl stop keepalived
    fi
fi

 主机IP,此时VIP在主机上

备机IP

三、测试

VIP可以正常访问,主机正常

 

关闭主机nginx进程 

[root@nginx01 sbin]# ./nginx -s stop

访问正常

将主机11.0.1.31直接关机,再次测试 

VIP成功漂移到备机11.0.1.32 

查看备机IP,VIP漂移到备机上

重启主机后VIP重新漂移回到主机11.0.1.31 

不需要给nginx设置开机自启动,keepalived开机自启动即可,keepalived发现nginx没启动,会自动执行脚本启动nginx。

四、非抢占模式(backup-backup模式)

两台主机均为backup,谁先启动谁就是临时master

11.0.1.31 backup

global_defs {
   router_id nginx-01  #标识本节点的名称,通常为hostname
}

## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0,
##并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
vrrp_script chk_nginx {
       script "/etc/keepalived/nginx_check.sh"
       interval 2  #每2秒检测一次nginx的运行状态
       weight -20  #失败一次,将自己的优先级-20
}

vrrp_instance VI_1 {
    state BACKUP                  # 状态,主节点为MASTER,备份节点为BACKUP
    interface ens33              # 绑定VIP的网络接口,通过ifconfig查看自己的网络接口
    virtual_router_id 51          # 虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
    mcast_src_ip 11.0.1.31    # 本机IP地址
    priority 100                  # 节点优先级,值范围0~254,MASTER要比BACKUP高
    advert_int 1                  # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
    nopreempt
    # 设置验证信息,两个节点必须一致
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个
    virtual_ipaddress {
        11.0.1.30
    }

    track_script {
       chk_nginx  # nginx存活状态检测脚本
    }
}

11.0.1.32 backup

global_defs {
   router_id nginx-02
}

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

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    mcast_src_ip 11.0.1.32
    priority 90
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        11.0.1.30
    }

    track_script {
       chk_nginx
    }
}

非抢占模式backup-backup模式,在此模式下,即使重启了主机11.0.1.31,VIP仍然保留在备机11.0.1.32。

在非抢占模式下,也有优先级的高低,谁先启动谁就被选举为master,不看优先级(两台抖配配置nopreempt情况下),并且不会被抢走VIP,除非master宕机,VIP漂移到backup(注意此时backup已经升级为master,而原先的master重启后已经变为backup)。

现在将11.0.1.32关机,VIP回到11.0.1.31

重新将11.0.1.32开机,发现VIP不会回到11.0.1.32,因为11.0.1.32配置了nopreempt参数,所以“不会抢11.0.1.31的VIP”

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

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

2> 节点的state都为BACKUP

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

两台服务器都启用nopreempt后,必须修改角色状态统一为BACKUP,唯一的区分就是优先级。

官方对nopreempt参数解释:高优先级VRRP实例通常会抢占低优先级VRRP实例,
"nopreempt"参数将停止优先级更高的机器在抢占vip,并允许较低优先级的机器保持为master。
注意:要使nopreempt参数起作用,初始状态不能是MASTER。

https://www.cnblogs.com/lichunyang321/p/8889326.html

非抢占模式与优先级关系:

keepalived配置非抢占模式_keepalived非抢占模式-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android实验:contentprovider 实验+SQLite 数据库的实现

目录 SQLite实验目的实验内容实验要求项目结构代码实现结果展示 SQLite SQLite 是一个开源的嵌入式关系数据库,实现了自给自足的、无服务器的、配置无需的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库系统不同,…

虚拟化技术和云计算的关系

1、云计算底层就是虚拟化技术。 (1)常见的虚拟化技术:VMware(闭源的,需要收费)、XEN、KVM (2)大部分公司用的虚拟化方案:XEN、KVM 2、虚拟化的历史 (1&am…

鸿蒙 Window 环境的搭建

鸿蒙操作系统是国内自研的新一代的智能终端操作系统,支持多种终端设备部署,能够适配不同类别的硬件资源和功能需求。是一款面向万物互联的全场景分布式操作系统。 下载、安装与配置 DevEco Studio支持Windows系统和macOS系统 Windows系统配置华为官方推…

LSTM中文新闻分类源码详解

LSTM中文新闻分类 一、导包二、读取数据三、数据预处理1.分词、去掉停用词和数字、字母转换成小写等2.新闻文本标签数值化 三、创建词汇表/词典1.data.Field()2.空格切分等3.构建词汇表/词典使用训练集构建单词表,vectorsNone:没有使用预训练好的词向量,而是使用的是…

AI人工智能大模型讲师叶梓《基于人工智能的内容生成(AIGC)理论与实践》培训提纲

【课程简介】 本课程介绍了chatGPT相关模型的具体案例实践,通过实操更好的掌握chatGPT的概念与应用场景,可以作为chatGPT领域学习者的入门到进阶级课程。 【课程时长】 1天(6小时/天) 【课程对象】 理工科本科及以上&#xff0…

亚信安慧AntDB数据库引领数字时代通信创新

在数字经济与实体经济深度融合的时代,通信行业正迎来前所未有的新机遇。特别是在中国信通院的预测中,2027年5G专网市场规模预计将达到802亿元,呈现出显著的增长态势,年复合增长率高达42%。 亚信安慧AntDB数据库一直致力于紧跟科技…

【JVM】一篇通关JMM内存模型

JMM内存模型 1. 原子性1-1. 问题分析1-2. 问题解决 2. 可见性2-1. 问题分析2-2. 问题解决 3. 有序性3-1. 问题分析3-2. 问题解决 4. CAS与原子性5. synchronized 优化 1. 原子性 很多人将【java 内存结构】与【java 内存模型】傻傻分不清,【java 内存模型】是 Java…

【模拟电路】常见电学定律 戴维宁定理、诺顿定理、基尔霍夫定律

一、戴维宁定理 二、诺顿定理 三、基尔霍夫定律 一、戴维宁定理 任何复杂电路可以等效为一个电压源和一个电阻器组成 德维宁定理(Thevenin’s Theorem)是电路理论中的一个基本定理,它提供了一种简化复杂线性电路的方法。德维宁定理的主要思…

【网络安全】网络隔离设备

一、网络和终端隔离产品 网络和终端隔离产品分为终端隔离产品和网络隔离产品两大类。终端隔离产品一般指隔离卡或者隔离计算机。网络隔离产品根据产品形态和功能上的不同,该类产品可以分为协议转换产品、网闸和网络单向导入产品三种。 图1为终端隔离产品的一个典型…

机器学习系列13:通过随机森林获取特征重要性

我们已经知道通过 L1 正则化和 SBS 算法可以用来做特征选择。 我们还可以通过随机森林从数据集中选择相关的特征。随机森林里面包含了多棵决策树,我们可以通过计算特征在每棵决策树决策过程中所产生的的信息增益平均值来衡量该特征的重要性。 你可能需要参考&…

用IDEA创建/同步到gitee(码云)远程仓库(保姆级详细)

前言: 笔者最近在学习java,最开始在用很笨的方法:先克隆远程仓库到本地,再把自己练习的代码从本地仓库上传到远程仓库,很是繁琐。后发现可以IDEA只需要做些操作可以直接把代码上传到远程仓库,也在网上搜了些…

2023年03月22日_腾讯2022年财报解读

文章目录 1 - 腾讯营收增长停滞2 - 腾讯游戏业务低迷3 - 小程序和视频号拉动广告增长4 - 腾讯云和金融科技表现不佳5 - 营销费用减半6 - 裁员但福利上涨 2023年03月22日 今天晚上呢 腾讯披露了2022年第四季度和全年的财报 看过之后呢不禁要说 腾讯在2022年真的是过得不容易啊…

简单vlan划分和dhcp中继(Cisco Packet Tracer模拟)

文章目录 1. 前言2. 功能实现2.1. dhcp服务器接入2.2. 学校web服务器2.3. 设置学校dns服务器2.4. 设置线路冗余2.5. 配置ac。 1. 前言 在这里我们的计网作业是使用思科的Cisco Packet Tracer进行对校园网的简单规划,这里我对校园网进行了简单的规划,功能…

IDEA JAVA Spring Boot运行Hello World(1.8)

参考资料: Spring Boot运行Hello World - 知乎https://blog.csdn.net/weixin_44005516/article/details/108293228(解决bug)SpringBoot入门第一章:Hello World-java教程-PHP中文网 (仅参考如何运行程序)java 8安装教程 java 8安装教程_java8安装-CSDN博…

数据结构(五)——初识线性表

🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉 在csdn获奖荣誉: 🏆csdn城市之星2名 ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ …

C#语言发展历程(1-7)

一、类型发展 C#1中是没有泛型的 在C#2中在逐渐推出泛型。C#2还引入了可空类型。 示例:C#泛型(详解)-CSDN博客 1 C#3:引入了匿名类型、和隐式的局部变量(var) 匿名类型:我们主要是使用在LIN…

宠物救助上门喂养系统宠物领养宠物寄养寻宠小程序宠物社区系统宠物托运宠物殡葬源码

后端php 前端uniapp mysql数据库 主要功能介绍: 1.根据当前位置 支持多城市切换 2.支持首页公告实时显示 3.支持 宠物救助,上门喂养,宠物领养,宠物寄养,寻宠,宠物社区,宠物托运&#xff…

SpringAMQP的使用方式

MQ介绍 MQ,中文是消息队列(MessageQueue),字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。 比较常见的MQ实现: ActiveMQ RabbitMQ RocketMQ Kafka 几种常见MQ的对比: RabbitMQActiveM…

django基础学习

django基础学习 文章目录 django基础学习django框架urls.py将请求发送到正确的视图views.py处理请求models.py定义数据模型根据models查询数据HTML模板呈现数据 Django项目结构创建虚拟环境下载django创建站点创建应用settings.py项目设置 通用类别视图会话框架身份验证视图使用…

探索 Pinia:简化 Vue 状态管理的新选择(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…