lvs+keepalived+nginx实现四层负载+七层负载
目录
一、lvs配置
二、nginx配置
三、测试
3.1 keepalived负载均衡
3.2 lvs+keepalived高可用
3.3 nginx高可用
| 主机 | IP |
| lvs01-33 | 11.0.1.33 |
| lvs02-34 | 11.0.1.34 |
| nginx01 | 11.0.1.31 |
| nginx02 | 11.0.1.32 |
| VIP | 11.0.1.30 |
4台主机主机添加host
[root@nginx01 sbin]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
11.0.1.31 nginx01
11.0.1.32 nginx02
11.0.1.33 lvs01-33
11.0.1.34 lvs02-34
一、lvs配置
以下两台lvs都要配置,除了配置文件不一样以外
lvs一定要搭配keepalived使用,配置上更简单,并且能实现主备高可用
yum install -y ipvsadm keepalivedmv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vi /etc/keepalived/keepalived.conf
主机master
lb_algo字段表示负载调度算法,采用权重算法,nginx01权重为5,nginx02权重为3
需要更改的字段router_id、ens33、priority 100、VIP+端口、真实IP+端口
global_defs { router_id lvs01-33 # 设置lvs的id,在一个网络内应该是唯一的,一般用主机名
}
vrrp_instance VI_1 { state MASTER #指定Keepalived的角色,MASTER为主,BACKUP为备 interface ens33 #指定Keepalived的角色,MASTER为主,BACKUP为备virtual_router_id 51 #虚拟路由编号,主备要一致priority 100 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR advert_int 1 #检查间隔,默认为1sauthentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 11.0.1.30 #定义虚拟IP(VIP)为11.0.1.30,可多设,每行一个}
}
# 定义对外提供服务的LVS的VIP以及port
virtual_server 11.0.1.30 80 { delay_loop 6 # 设置健康检查时间,单位是秒 lb_algo wlc # 设置负载调度的算法为wlc 基于权重的调度算法 lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式 nat_mask 255.255.255.0 #persistence_timeout 0 会话保持时间 protocol TCP real_server 11.0.1.31 80 { # 指定real server1的IP地址weight 5 # 配置节点权值,数字越大权重越高 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 11.0.1.32 80 { # 指定real server2的IP地址weight 3 # 配置节点权值,数字越大权重越高 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } }
}
备机backup
global_defs { router_id lvs01-34 # 设置lvs的id,在一个网络内应该是唯一的
}
vrrp_instance VI_1 { state BACKUP #指定Keepalived的角色,MASTER为主,BACKUP为备 interface ens33 #指定Keepalived的角色,MASTER为主,BACKUP为备virtual_router_id 51 #虚拟路由编号,主备要一致priority 90 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR advert_int 1 #检查间隔,默认为1sauthentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 11.0.1.30 #定义虚拟IP(VIP)为11.0.1.30,可多设,每行一个}
}
# 定义对外提供服务的LVS的VIP以及port
virtual_server 11.0.1.30 80 { delay_loop 6 # 设置健康检查时间,单位是秒 lb_algo wlc # 设置负载调度的算法为wlc 基于权重的调度算法 lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式 nat_mask 255.255.255.0 #persistence_timeout 0 会话保持时间 protocol TCP real_server 11.0.1.31 80 { # 指定real server1的IP地址weight 5 # 配置节点权值,数字越大权重越高 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 11.0.1.32 80 { # 指定real server2的IP地址weight 3 # 配置节点权值,数字越大权重越高 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } }
}
二、nginx配置
安装nginx,并更改html页面内容为当前IP
nginx安装:Nginx、keepalived安装详细步骤_keepalive 安装-CSDN博客
两台nginx都要配置
以下命令是临时的,重启后失效,命令内容:在lo网卡上虚拟出一个lo:0接口,添加路由,抑制两台nginx主机的ARP响应。注意掩码是32,目前没找到永久配置的方法,只能以自定义服务设置为开机自启动。
ifconfig lo:0 11.0.1.30 netmask 255.255.255.255 broadcast 11.0.1.30 route add -host 11.0.1.30 dev lo:0echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/all/arp_announce
检测虚拟网卡接口lo:0,且IP为VIP
[root@nginx01 init.d]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 11.0.1.31 netmask 255.255.255.0 broadcast 11.0.1.255inet6 fe80::4ae3:fc87:6344:7062 prefixlen 64 scopeid 0x20<link>ether 00:0c:29:60:05:0e txqueuelen 1000 (Ethernet)RX packets 35532 bytes 2276489 (2.1 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 22319 bytes 1530060 (1.4 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1000 (Local Loopback)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 11.0.1.30 netmask 255.255.255.255loop txqueuelen 1000 (Local Loopback)

三、测试
nginx01、nginx02访问正常

3.1 keepalived负载均衡
两台lvs开启keepalived,访问VIP,访问正常,由于我设定nginx01的权重高于nginx02,所以是nginx01返回页面,系统工具优先级选出最佳节点
[root@lvs01-33 ~]# systemctl start keepalived
[root@lvs01-34 ~]# systemctl start keepalived

如果你想知道当前是哪个lvs在工作,只需要通过查看VIP当前在哪台lvs即可

3.2 lvs+keepalived高可用
将lvs01的keepalived进程关闭
[root@lvs01-33 ~]# systemctl stop keepalived

VIP访问仍然正常,说明lvs工作正常

3.3 nginx高可用
将nginx01的nginx进程杀死
[root@nginx01 sbin]# ./nginx -s stop
再次访问

将nginx01的nginx进程重启,那么nginx01重新接管

参考文档:
https://www.cnblogs.com/tangyanbo/p/4305589.html
https://www.cnblogs.com/xiaocheche/p/7689432.html
lvs详细文档:(原理、模式(NAT、TUN、DR)、调度算法)
LVS负载均衡(LVS简介、三种工作模式、十种调度算法)-CSDN博客
https://www.cnblogs.com/anay/p/9260306.html#_label7
DR模式详细:
LVS | LVS 的三种工作方式(DR原理)(二)_lvs dr 为什么局域网-CSDN博客
ipvsadm常用命令:
ipvsadm命令 – 管理Linux虚拟服务器 – Linux命令大全(手册)
arp冲突解释:
【arp冲突】linux抑制arp通告-CSDN博客
相关文章:
lvs+keepalived+nginx实现四层负载+七层负载
目录 一、lvs配置 二、nginx配置 三、测试 3.1 keepalived负载均衡 3.2 lvskeepalived高可用 3.3 nginx高可用 主机IPlvs01-33 11.0.1.33 lvs02-3411.0.1.34nginx0111.0.1.31nginx0211.0.1.32VIP11.0.1.30 4台主机主机添加host [rootnginx01 sbin]# cat /etc/hosts 127.0.0.…...
独立看门狗与窗口看门狗
一、简介 STM32F10xxx内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产…...
【CTF杂项】常见文件文件头文件尾格式总结 各类文件头
常见文件文件头文件尾格式总结及各类文件头 以下是常见文件的文件头格式总结及各类文件头的描述: 图像文件: JPEG:文件头格式为FF D8 FF,文件尾格式为FF D9。PNG:文件头格式为89 50 4E 47 0D 0A 1A 0A,文件…...
深度学习-模型转换_所需算力相关
模型转换相关 tensflow转onnx python -m tf2onnx.convert \--graphdef /root/autodl-tmp/warren/text-detection-ctpn/data/ctpn.pb \--output ./model.onnx --inputs Placeholder:0 --outputs Reshape_2:0,rpn_bbox_pred/Reshape_1:0 pytorch转onnx #!/usr/…...
Koordinator 助力云原生应用性能提升:小红书混部技术实践
作者:宋泽辉(小红书)、张佐玮(阿里云) 编者按: Koordinator 是一个开源项目,是基于阿里巴巴内部多年容器调度、混部实践经验孵化诞生,是行业首个生产可用、面向大规模场景的开源混…...
java中如何使用elasticsearch—RestClient操作文档(CRUD)
目录 一、案例分析 二、Java代码中操作文档 2.1 初始化JavaRestClient 2.2 添加数据到索引库 2.3 根据id查询数据 2.4 根据id修改数据 2.4 删除操作 三、java代码对文档进行操作的基本步骤 一、案例分析 去数据库查询酒店数据,导入到hotel索引库࿰…...
MySQL自定义函数
MySQL自定义函数 函数与存储过程类似,也是一组预先编译好的SQL语句的集合,但是存储过程可以有0个或多个返回,函数就只能有一个返回 创建函数 #语法 参数列表包含两部分 参数名和参数类型 #函数体必须有return语句 且每个sql语句后要以;结尾 所…...
技术学习|CDA level I 数据库应用(数据操作语言DML)
数据操作语言(DML)是对表中记录进行添加、更新、删除等操作的语言。 一、添加数据 在数据表中填充数据有两种方法,第一种方法是使用insert into语句向数据表中直接录入每行数据信息,但并不常用,因为分析使用的数据很…...
关键字:instanceof关键字
在 Java 中,instanceof关键字用于检查一个对象是否是某个特定类或其子类的实例。它的语法如下: 其中,Object是要检查的对象,Class是要检查的类或接口。 instanceof关键字的返回值是一个布尔值,如果对象Object是类Cla…...
【LeetCode:34. 在排序数组中查找元素的第一个和最后一个位置 | 二分】
🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…...
年度征文|回顾2023我的CSDN
一年转眼而逝,回顾这一年在csdn的创作,学习,记录历程。回顾过去,才能展望未来,首先看图说话。 今年在csdn的访问量已由年初的2万到年末的50w。粉丝有年初的300个左右,增加到4000个左右。我年初的目标是粉丝…...
3.无重复字符的最长子串(滑动窗口,C解答)
题目描述: 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2: 输入: s "bbbbb&quo…...
什么是系统设计 – 学习系统设计
系统设计被定义为为系统的不同组件、接口和模块创建架构并提供有助于在系统中实现这些元素的相应数据的过程。系统设计是任何分布式系统设计背后的核心概念。 系统设计涉及识别数据源,它是描述、创建和规划框架以满足特定业务的必要性和先决条件的直觉。 为什么要…...
基于Python的城市热门美食数据可视化分析系统
温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本项目利用网络爬虫技术从XX点评APP采集北京市的餐饮商铺数据,利用数据挖掘技术对北京美食的分布、受欢迎程度、评价、评论、位置等情况进行了深入分析,方便了解城市美食店…...
万字长文谈自动驾驶occupancy感知
文章目录 prologue欢迎大家点赞收藏与我交流讨论paper listVision-based occupancy :1. [MonoScene: Monocular 3D Semantic Scene Completion [CVPR 2022]](https://arxiv.org/pdf/2112.00726.pdf)2. [Tri-Perspective View for Vision-Based 3D Semantic Occupancy Predictio…...
KBDNO1.DLL文件缺失,软件或游戏无法启动运行,怎样快速修复
不少小伙伴,求助电脑报错“KBDNO1.DLL文件缺失,软件或游戏无法启动或运行”,应该怎么办? 首先,我们先来了解“KBDNO1.DLL文件”是什么? KBDNO1.DLL是Windows操作系统中的一个动态链接库文件,主…...
计算机网络【EPOLL 源码详解】
IO多路复用 在以前,传统的网络编程是多线程模型,一个线程单独处理一个请求。 然而,线程是很昂贵的资源: 线程的创建和销毁成本很高,linux的线程实际上是特殊的进程;因此通常会使用线程池来减少线程创建和…...
第82讲:MySQL Binlog日志的滚动
MySQL Binlog日志的滚动 MySQL Binlog日志滚动指的就是产生一个新的Binlog日志,然后进行记录,因为如果都在一个Binlog中记录,查询是非常慢的,检索的效率也很低。 Binlog日志滚动有三种方法: 重启MySQL 数据库一般不重…...
2024.1.3C语言补录 宏函数
在C语言中,宏函数可以使用预处理器指令 #define 来定义。宏函数与常规函数类似,但它们在预处理阶段进行替换,而不是在运行时。 定义:#define 宏名称(参数列表) 宏体 其中: #define 是预处理器指令,用于定义宏。宏名…...
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之线性布局容器Column组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之线性布局容器Column组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Column组件 沿垂直方向布局的容器。 子组件 可以包含子组件。 接…...
AI绘画工作流自动化:从NovelAI到Pixiv的Semi-Auto工具实战
1. 项目概述:从手动到自动,解放AI绘画生产力的桌面利器如果你和我一样,是个深度沉迷于AI绘画的创作者,那你一定经历过这样的痛苦:在NovelAI的WebUI里,吭哧吭哧地调好一组参数,生成一张图&#x…...
5分钟告别百度网盘提取码烦恼:智能获取工具全解析
5分钟告别百度网盘提取码烦恼:智能获取工具全解析 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经因为一个简单的提取码,在浏览器标签页间反复切换,浪费了宝贵的十几分钟…...
CANN昇腾算子开发套件
SetSingleOutputShape 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://g…...
PIC18F4550微控制器实现USB大容量存储设备设计
1. USB大容量存储设备设计概述USB大容量存储设备(Mass Storage Device,MSD)已成为现代数字生活中不可或缺的组成部分。从U盘到移动硬盘,这类设备的核心都是基于USB Mass Storage Class协议实现的。本文将深入探讨如何利用PIC18F45…...
AI不是功能叠加,而是范式重铸:揭秘奇点大会首次披露的“AI原生产品熵减评估矩阵”及4类高危反模式
更多请点击: https://intelliparadigm.com 第一章:AI不是功能叠加,而是范式重铸:从工具思维到原生心智的跃迁 当开发者仍在用“给CMS加个AI摘要按钮”的方式理解大模型时,真正的变革早已发生在架构底层——AI正从可插…...
PyCharm直连Spark集群:一站式配置与避坑指南
1. 为什么需要PyCharm直连Spark集群? 作为数据工程师,我经常需要在本地开发Spark应用,然后部署到远程集群执行。传统方式是本地写完代码后,手动上传到服务器再用spark-submit提交,这个过程既繁琐又容易出错。直到发现P…...
B样条曲线入门:从‘节点向量’这个硬骨头啃起,理解平滑背后的数学
B样条曲线入门:从‘节点向量’这个硬骨头啃起,理解平滑背后的数学 当你第一次看到B样条曲线时,可能会被那些复杂的数学公式和术语吓到。但别担心,我们今天要聊的"节点向量"(Knot Vector)概念&…...
QQ音乐加密音频解密:qmcdump实用指南与完整教程
QQ音乐加密音频解密:qmcdump实用指南与完整教程 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否遇到过…...
DXVK 2.7.1深度解析:Linux游戏生态的Direct3D翻译层革命性突破
DXVK 2.7.1深度解析:Linux游戏生态的Direct3D翻译层革命性突破 【免费下载链接】dxvk Vulkan-based implementation of D3D8, 9, 10 and 11 for Linux / Wine 项目地址: https://gitcode.com/gh_mirrors/dx/dxvk 在Linux平台上运行Windows游戏和图形应用一直…...
终极指南:如何用WPS-Zotero插件将学术写作效率提升60%
终极指南:如何用WPS-Zotero插件将学术写作效率提升60% 【免费下载链接】WPS-Zotero An add-on for WPS Writer to integrate with Zotero. 项目地址: https://gitcode.com/gh_mirrors/wp/WPS-Zotero WPS-Zotero插件是一款革命性的学术写作工具,它…...
