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,备份节点为BACKUPinterface 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 PASSauth_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 2weight -20
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51mcast_src_ip 11.0.1.32priority 90advert_int 1authentication {auth_type PASSauth_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.confsleep 2counter=$(ps -C nginx --no-heading|wc -l)if [ "${counter}" = "0" ]; thensystemctl stop keepalivedfi
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,备份节点为BACKUPinterface 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 PASSauth_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 2weight -20
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51mcast_src_ip 11.0.1.32priority 90advert_int 1nopreemptauthentication {auth_type PASSauth_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博客

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot+MyBatis+MySQL增删改查(一)(IDEA创建SpringBoot项目)

使用IDEA创建SpringBootMyBatisMySQL进行项目搭建 1.创建项目 文件 --> 新建 --> 项目 填写项目基本信息 项目名称、存放位置、项目语言、项目类型、JDK版本、打包 Web选项选择Spring Web SQL选项中勾选JDBC API、MyBatis Framework、MySQl Driver选项 至此一个空项目…

SpringBoot用JDK1.8的依赖设置pom.xml

pom.xml的修改主要是两个地方: 1.修改springframework的版本为2.5.0,版本太高可能和其他插件搭配有冲突; 2.Java的版本修改成8,也就是对应JDK1.8。

【编程语言】协程比较

一、比较五种编程语言(Python、C、Go、C、Java)的协程实现和特点。 Python Python从3.5版本开始通过async 和 await 关键字提供了原生协程支持,主要用于简化异步I/O操作。在Python中,协程是由事件循环(event loop&am…

【Spring实战】14 Web表单校验

文章目录 1. 依赖2. 实体类3. 控制器4. 页面5. 启动6. 验证1)访问页面2)后台校验 7. 优点8. 代码详细总结 在 Web 应用中,表单是用户与后端交互的主要界面之一。为了确保数据的有效性和一致性,我们经常需要对提交的表单数据进行验…

学生管理系统(vue + springboot)

学生管理系统(vuespringboot)资源-CSDN文库 项目介绍 这是一个采用前后端分离开发的项目,前端采用 Vue 开发、后端采用 Spring boot Mybatis 开发。 项目部署 ⭐️如果你有 docker 的话,直接 docker compose up 即可启动&#…

计算机基础面试题 |01.精选计算机基础面试题

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

第4课 FFmpeg读取本地mp4文件并显示

在上节课,我们使用FFmpeg实现了一个最简单的rtmp播放器,它看起来工作正常。这节课,我们尝试让它来播放本地的mp4文件试试。 1.压缩备份上节课工程文件夹为demo3.rar,并修改工程文件夹demo3为demo4,重要的事情再说一遍…

使用anaconda创建notebook工程

1.由于每个工程使用的环境都可能不一样,因此一个好的习惯就是不同的工程都创建属于自己的环境,在anaconda中默认的环境是base: //括号中名字,代表当前的环境 (base)dragonmachine: $ conda create --nameexample2.激活环境 // 环…

Kubernetes网络-VXLAN

一. 网络基础 1. 计算机网络的分层 如今连接方式也越来也丰富,网线、WiFi、蓝牙、光纤,甚至我们普通的电线、照明所用的灯光,都可以作为接入网络的介质。如此庞大的网络,丰富多样的设备,计算机网络技术能把它们统一起…

回味2023

2023年的元旦假期我是在南京度过的,1月2日,我特别前往南京博物院,为了看一个特展——《墨田》。 时代发展,有些东西变了,但是有些东西没有变。 比如书写的方式变了,我们这一代,不再耕耘在真的“…

ubuntu22.04安装anacoda遇到的坑

这几天把用了3年的windows10换成了ubuntu22.04 各种环境都得配置,本文记录下遇到的坑。 1、anacoda在ubuntu上也可以用官方也提供了安装包,但是没有图形界面,需要以命令行的方式安装和运行配置 1.1 安装:官网下载后,…

Django 学习教程-介绍与安装

系列 Django 学习教程-第一个 Django 应用-CSDN博客 介绍 Django 是一个高级 Python Web 框架,它鼓励快速开发和干净、实用的设计。 它由经验丰富的开发人员构建,解决了 Web 开发的大部分麻烦,因此您可以专注于在编写应用程序时无需重新发…