LVS+Keepalived+Nginx具体配置步骤

news2025/1/19 20:33:43

视频链接:4-6 搭建LVS-DR模式- 为两台RS配置虚拟IP_哔哩哔哩_bilibili

视频笔记链接:笔记


一、服务器与Ip约定

LVS

  • DIP: 192.168.1.151

  • VIP: 192.168.1.150

Nginx1

  • RIP: 192.168.1.171

  • VIP: 192.168.1.150

Nginx2

  • RIP: 192.168.1.172

  • VIP: 192.168.1.150

二、CentOS配置——配置网络

1 关闭 NetworkManager

注意:三台机器都需要配置

systemctl stop NetworkManager
systemctl disable NetworkManager

三、配置LVS

1 配置LVS网络

cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:1
vim ifcfg-ens33:1

新cp出来的网络配置文件 ifcfg-ens33:1 内容:

2 重启网络 并 查看

重启才生效

service network restart(或者 systemctl restart network )

查看,发现eth33 网卡中有两个ip

ip addr(或 ip address)

3 安装LVS——集群管理工具ipvsadm

yum install -y ipvsadm

4 查看 ipvs 信息

ipvsadm -Ln

四、配置RS

1 配置两台RS的虚拟IP——两台Nginx

目的:配置后,服务器通过网络虚拟IP(vip)返回数据报文,而不会被用户看到真实服务器IP

构建 网络配置文件 ifcfg-lo 的子接口:

cp ifcfg-lo ifcfg-lo:1

ifcfg-lo:1文件内容:

重启刷新一下网络:

service network restart

查看,发现lo 网卡中有两个ip

ip addr(或 ip address)

另一台RS同理,略。

以上为Nginx的虚拟ip的配置。

2 配置两台RS的网卡行为——禁止arp通信——arp-ignore 和 arp-announce

本小节额外参考博客:ARP在LVS中的应用 | Linbo的博客 (备用:ARP 在 LVS 中的应用 - 开发者头条,已摘录到我的博客:ARP在LVS中的应用_HD243608836的博客-CSDN博客)

--问题:

DR模式下,由于三台机器(LVS+两台RS)都绑定的VIP,当client发过来一个请求(vip : port)时,就不一定发给谁了。

解释:
在同一局域网内,当 Client 与 Server 通信,如果 Client 不知道 Server 的 MAC 地址,Client 就会发送 ARP 广播请求,Server 响应 ARP 广播请求,发送自己的 MAC 地址给 Client。
通过网关先arp广播,看谁arp返回的响应包快,也就缓存对应的IP-MAC关系,10分钟生命周期内也就固定发送给谁了。

所以要想办法禁止 RS 的 VIP 直接去接收 Client 的请求,而只允许LVS的VIP去接收。

--采取办法:

禁用两台RS的网卡的arp功能,即达到了针对该VIP 的 ARP 广播请求就不会响应。这样,”VIP“与“RS的MAC“地址也就不会绑定了。完美~ (如果arp_ignore/arp_announce没有配置,就可能出现请求直接到达 RS 上)

所以需要对两台RS(两个Nginx)都做如下参数配置:

① vim /etc/sysctl.conf
② 复制以上图片内容,粘贴进去
③ sysctl -p #刷新到内存,立即生效
④ 在另一台Nginx上重复以上内容

解释一下:(假如默认网卡是eth0)

  • arp-ignore: ARP 响应级别(处理请求)

    • 0 —— 响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡lo上的地址),而不管该目的IP是否在接收网卡上(eth0)。 表示目标 IP 是本机的,则响应 ARP 请求。(不管是不是lo上配置的虚拟IP,只要网卡配置文件中有配置对应的IP就响应)

    对于默认值0,当192.168.2.101的 eth0 收到 192.168.2.200的 ARP 请求,发现192.168.2.200在本机上,所以回应了这个 ARP 请求。

    • 1 —— "只"响应目的IP地址为接收网卡(eth0)上的本地地址的arp请求。 如果接收 ARP 请求的网卡 IP(一般是eth0) 和目标 IP(VIP) 相同,则响应 ARP 请求。

    对于默认值1,当192.168.2.101的 eth0 收到 192.168.2.200的 ARP 请求,发现这个 IP 虽然是本机的,但不是 eth0 的IP地址(eth0 是接收这个 ARP 请求的网卡), 所以不会响应这个 ARP 请求

  • arp-announce: ARP通告行为(返回响应)

    • 0——允许使用任意网卡上的IP地址作为arp请求的源IP,通常就是使用数据包a的源IP。

    • 1——尽量避免使用不属于该发送网卡子网的本地地址作为发送arp请求的源IP地址。

    • 2——忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。 sysctl.conf中包含all和eth/lo(具体网卡)的arp_ignore参数,取其中较大的值生效。

更具体的图文解说参看——(强烈建议参看一下)
链接:https://www.cnblogs.com/lipengxiang2009/p/7451050.html
(备用链接:https://blog.csdn.net/HD243608836/article/details/128619166)

3 配置两台RS的网卡行为——配置静态路由Router——隐藏RS真实IP

  1. 命令:

route add -host 192.168.1.150 dev lo:1

由于到达RS的Request是LVS(vip为150)发过来的,所以响应的“目的网段/IP”一定是150(可以指定“目标网段”也可以指定“目标IP”)。 在RS服务器中,执行上述命令配置“静态路由”后,即“目的IP为150”的Response都必须通过lo:1虚拟网卡发送,而lo:1配置的IP(即VIP)也为150,这样就成功的把数据包的“源IP地址”置为150了,而不是RS的“真实IP”,达到了隐藏RS真实IP的目的

解释:
ip route add [目的网段] via [网关] dev [接口] [table <table_number>]

# e.g. 目标网段为 10.15.150.0/24 的数据包通过接口 enp0s3 转发到网关 192.168.150.253。
# ip route add 10.15.150.0/24 via 192.168.150.253 dev enp0s3
  1. 但是重启后失效,所以建议如下方式(开机自启动):

vim /etc/rc.local

echo "route add -host 192.168.1.150 dev lo:1" >> /etc/rc.local

  1. 还有一种方式

    在/etc/sysconfig/network里添加到末尾

查看路由表:

route -n

另一台同理,略。

五、配置LVS集群

1 配置LVS集群

查看帮助文档:

ipvsadm -h

配置集群:

ipvsadm -A -t 192.168.150:80 -s rr

解释:

-A:创建一个虚拟服务集群(add virtual service with options)

-t:即tcp-service,后面接service-address,如host[:port] ,(-u:udp)

-s:scheduler, 负载均衡规则设置,rr表示轮询

查看集群配置:

ipvsadm -Ln

添加真实服务器节点:

ipvsadm -a -t 192.168.150:80 -r 192.168.171:80 -g

ipvsadm -a -t 192.168.150:80 -r 192.168.172:80 -g

解释:

-a:添加一台真实服务器RS到集群中

-g:即使用DR模式,gatwaying(direct routing)

-r:真实服务器地址 real server

查看集群配置:

ipvsadm -Ln

2 验证DR模式

ipvsadm -Ln --stats

其中outBytes为零,则表示数据没有经过171和172两台RS机器对应的eth33出去(因为数据是经过两台RS各自的lo网卡出去),这样也就验证了DR模式生效了。

LVS持久化设置

进一步验证rr是否生效,参看视频,略

六、Keepalived + LVS + Nginx 高可用

1 keepalived+LVS整体架构

LVS分为master、backup两台机器

  • master宕机后,slaver会顶上,master恢复恢复后,backup会让出,把vip“权力”还给原master。

  • 可以对所有的RS真实服务器进行健康检查,宕机则自动踢出集群,恢复则自动加入回集群。

keepalived原生就是为LVS设计的。

2 安装keepalived

  1. 上传keepalived

  2. ./configure

  3. make

  4. make install(安装好后,核心配置文件位于 /etc/keepalived)

  5. 把keepalived注册到系统服务(具体步骤参看视频,略)

3 配置keepalived核心配置文件keepalived.conf

LVS集群“MASTER”配置(建议先备份原配置文件bak)

全局的配置(注意:master的router_id为LVS_151, backup的router_id为LVS_152)

继续(注意:①master的state为MASTER, backup的state为BACKUP。②master与backup的virtual_router_id保持相同。③backup的priority轮询权重改为50(因为是备份,所以低一些,官方建议相差50))

继续:

接上图,配置需要健康监测的两台RS(171、172):

注意,配置每行的结尾没有分号“ ; ”。

4 使 keepalived.conf 配置生效

"清除"所有LVS规则:

ipvsadm -C

查看ipvsadm -Ln,会发现规则全部没有了:

"重启",使刚才配置的keepalived配置文件生效:

systemctl restart keepalived

注意,其中persistent(持久化)为5秒,即5秒内不会rr切换(参看“验证DR模式”部分的视频,有相关讲解)。

刷新浏览器网页后,立即通过命令ipvsadm -Lnc查看:(可以看到expire还剩几秒)

七、验证 Keepalived + LVS + Nginx 高可用与健康检查

1 验证Keepalived高可用

  1. 在master中执行systemctl stop keepalived, 再在master中执行ip addr查看VIP,会发现,vip已经不存在于当前网卡eth33中了:

  1. 来到backup中查看,会发现vip绑定在这里了:

  1. 恢复master的keepalived,执行systemctl stop keepalived发现VIP 150又重新绑定到151机器上了(backup把VIP还回给原master了)

  1. 查看backup机器,发现刚才的vip已经不存在了(只剩152了):

2 验证keepalived对RS服务器的健康检查(自动剔除与自动恢复)

  1. 在一台RS(nginx 171)上执行nginx -s stop,然后去LVS-Master中查看ipvsadm -Ln,发现171被LVS集群自动剔除了:

  1. 浏览器刷新,发现网页显示的服务器ip始终为172

  2. 启动刚才的RS(nginx171)服务,执行./nginx,然后再次去LVS-Master中查看ipvsadm -Ln,发现171自动加入到LVS集群中,回来了:

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

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

相关文章

力扣 2283. 判断一个数的数字计数是否等于数位的值

题目 给你一个下标从 0 开始长度为 n 的字符串 num &#xff0c;它只包含数字。 如果对于 每个 0 < i < n 的下标 i &#xff0c;都满足数位 i 在 num 中出现了 num[i]次&#xff0c;那么请你返回 true &#xff0c;否则返回 false 。 示例 输入&#xff1a;num “1…

vue文件上传

vue文件上传 前言 今天写一篇关于文件上传的文章&#xff0c;其实对于真正工作的人来说&#xff0c;这不是很难的事&#xff0c;但对于新手来说无疑是个新技术 实现功能如下图 根据上传文件类型显示对应文件类型&#xff0c;图片直接显示&#xff0c;当然图片特可以做对应类型…

【NI Multisim 14.0原理图设计基础——参数属性设置】

目录 序言 &#x1f46c;一、参数属性设置 序言 NI Multisim最突出的特点之一就是用户界面友好。它可以使电路设计者方便、快捷地使用虚拟元器件和仪器、仪表进行电路设计和仿真。 首先启动NI Multisim 14.0&#xff0c;打开如图所示的启动界面&#xff0c;完成初始化后&…

初始C语言-分支与循环语句

目录 一、语句 1. 什么是语句&#xff1f; C语句可分为以下五类&#xff1a; 1. 表达式语句 2. 函数调用语句 3. 控制语句 4. 复合语句 5. 空语句 2. 控制语句&#xff1a; 1. 条件判断语句也叫分支语句&#xff1a;if语句、switch语句&#xff1b; 2. 循环执行语句…

extern “C“的作用以及c/c++代码互调

一、目的相信从事嵌入开发的小伙伴肯定遇到过使用第三库的情景&#xff0c;有时候可能是C中调用C库&#xff0c;有时候可能又是C中调用C库&#xff1b;如果你遇到过&#xff0c;那你肯定知道extern "C"的作用.本篇的目的就是给大家介绍C/C互相调用的原理和实践。二、…

RK3588平台开发系列讲解(内核调试篇)CPU Hotplug 调试

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、CPU Hotplug 介绍二、CPU Hotplug 内核开关三、sysfs调试沉淀、分享、成长,让自己和他人都能有所收获!😄 📢多核系统底层驱动提供了cpu的Plugin/Unplug接口,可以实现动态调整cpu使用运行。 一、CPU Hotplu…

在 Node JS 中实现微服务架构

&#x1f4cd;简介&#x1f642; 正如我们在之前的博客“单体与微服务&#xff1a;一种实用方法”中讨论的那样。但是今天我们要在 NodeJS 中实现微服务架构。&#x1f449; 您可以使用任何技术&#xff0c;如 Spring、Python 等。但我们将使用 NodeJS 进行演示。&#x1f4cd;…

PostgreSQL下载、安装和配置使用

1&#xff09;下载 PostgreSQL官网下载&#xff1a;https://www.enterprisedb.com/downloads/postgres-postgresql-downloads 2&#xff09;安装 双击运行安装包 选择安装目录&#xff0c;不推荐安装在C盘。 选择需要安装的服务&#xff0c;不明白是啥的全选就行&#xf…

内含JAVA简单概括和JAVA所需安装的软件和详细教程,想学习JAVA无从下手,这篇文章带你迈出第一步

本文大致概括了JAVA编程语言的简史和特点,主要介绍了JAVA开发环境安装,涉及JDK,Sublime Text IntelliJ IDEA三个软件的简单介绍,安装和使用,最后编写了第一个JAVA代码,保姆级教学,跟着文章一步步来,迈出你学习JAVA的第一步吧! 初识JAVA一.JAVA语言简介二.JAVA发展简史三.JAVA语…

通过模拟器实现APP抓包

本教程将跳过工具安装部分&#xff0c;请正确食用&#x1f609;我的环境&#xff1a;操作系统&#xff1a;win11模拟器版本&#xff1a;雷电安卓模拟器稳定版-安卓7.1(32位) V5.0.46抓包工具&#xff1a;Wireshark-Version 4.0.1抓包工具&#xff1a;charles-Version 4.6.3工具…

SpringMVC(十一):SpringMVC文件上传中要解决的问题

文章目录 SpringMVC文件上传中要解决的问题 一、中文文件名编码问题 二、文件位置存储问题

【YOLO系列】YOLOv8算法(尖端SOTA模型)

前言回顾 在这里粗略回顾一下YOLOv5&#xff0c;这里直接提供YOLOv5的整理的结构图吧 Backbone&#xff1a;CSPDarkNet结构&#xff0c;主要结构思想的体现在C3模块&#xff0c;这里也是梯度分流的主要思想所在的地方&#xff1b;PAN-FPN&#xff1a;双流的FPN&#xff0c;必…

Linux——常用命令1.

✅<1>主页&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;linux &#x1f525;<3>创作者&#xff1a;我的代码爱吃辣 ☂️<4>开发环境&#xff1a;Visual Studio 2022 &#x1f4ac;<5>前言&#xff1a;Linux常用命令 目录 …

Centos7安装JDK1.8(OracleJDK8)

Linux安装JDK1.8 | OracleJDK8Linux安装JDK1.8(OracleJDK8)卸载openJDK官网下载OracleJDK8解压JDK到指定目录配置JDK变量查看jdk是否可用Linux安装JDK1.8(OracleJDK8) Hadoop官方的JDK要求https://cwiki.apache.org/confluence/display/HADOOP/HadoopJavaVersions JDK变量配置…

Java——》下载Hotspot 虚拟机源码

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 Java——》下载Hotspot 虚拟机源码一、官网下载压…

信息系统基础

目录 一、信息化概述 1.信息的定义 2.信息的特点 3.信息化的概念 4.信息对经济社会的意义 5.信息化对组织的意义 二、信息系统工程的总体规划 1.信息系统工程总体规划方法论 2.信息系统的生命周期和各阶段的目标 三.政府信息化与电子政务 1.电子政务的组成 2.电子政务…

mysql的binlog学习记录

文章目录什么是binlogbinlog格式StatementRowMixedbinlog使用什么是binlog MySQL Binary Log也就是常说的bin-log, ,是mysql执行改动产生的二进制日志文件。简单的来说&#xff0c;binlog日志用于记录所有更新了数据或者以及潜在更新了数据&#xff08;例如&#xff0c;没有匹…

在线学习(online learning)——Chapter 1 What is online learning

在线学习(online learning)——Chapter 1 What is online learning 引用 [1]Hoi S C H, Sahoo D, Lu J, et al. Online learning: A comprehensive survey[J]. Neurocomputing, 2021, 459: 249-289.点击阅读 [2]Orabona F. A modern introduction to online learning[J]. ar…

【1分钟了解网络交换机的6种命令配置模式】

我们在配置交换机的时候首先要了解的就是交换机命令模式&#xff0c;小编用Cisco思科交换机为例带大家了解交换机的6种配置模式。 Cisco IOS提供了用户EXEC模式和特权EXEC模式两种基本的命令执行级别&#xff0c;同时还提供了全局配置、接口配置、Line配置和vlan数据库配置等多…

linux篇【13】:网络应用层—网络版计算器,序列化

目录 一.应用层 1.再谈 "协议" 2.序列化&#xff0c;反序列化 &#xff08;1&#xff09;序列化&#xff0c;反序列化的实例&#xff1a; &#xff08;2&#xff09;自描述长度的协议 3.网络版计算器 细节&#xff08;1&#xff09;&#xff1a;报头方案 &am…