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组件 沿垂直方向布局的容器。 子组件 可以包含子组件。 接…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
