【LVS实战】03 LVS负载均衡-DR模式实验

本文介绍,如何通过ipvsadm配置负载均衡,并且转发模式为DR直接路由模式

一、网络拓扑

如下图:
在这里插入图片描述

LVS负载均衡的机器,配置了一个VIP:10.1.0.7

二、前置准备

每台机器关闭防火墙

systemctl stop firewalld

RS装好nginx,我测试时用的docker来装的
为以验证结果,对应的nginx首页面,设置如下:

root@cd7e26aa7159:~# cat /usr/share/nginx/html/index.html 
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>10.1.0.9 </h1>
</body>
</html>

分别输出两台机器的IP10.1.0.9 和10.1.0.10

三、配置过程

1、配置LVS虚拟IP(VIP)

在这里插入图片描述

[root@localhost ~]# ifconfig enp0s8:0 10.1.0.7/16

配置后的检查结果

[root@localhost ~]# ifconfig enp0s8:0
enp0s8:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 10.1.0.7  netmask 255.255.0.0  broadcast 10.1.255.255ether 08:00:27:b8:e6:5d  txqueuelen 1000  (Ethernet)

在宿主机或者同局域网的机器上ping 10.1.0.7

C:\Users\Administrator>ping 10.1.0.7
正在 Ping 10.1.0.7 具有 32 字节的数据:
来自 10.1.0.7 的回复: 字节=32 时间<1ms TTL=64
来自 10.1.0.7 的回复: 字节=32 时间=1ms TTL=64
来自 10.1.0.7 的回复: 字节=32 时间<1ms TTL=64

2、手工执行配置添加LVS服务并增加两台RS

[root@localhost ~]# ipvsadm -C #清空ipvs历史设置
[root@localhost ~]# ipvsadm --set 30 5 60 #设置超时时间(tcp tcpfin udp)
[root@localhost ~]# ipvsadm -A -t 10.1.0.7:80 -s rr -p 20#说明:#-A:添加一个虚拟路由主机(LB)
#-t:指定虚拟路由主机的VIP地址和监听端口
#-s:指定负载均衡算法
# -p:指定会话保持时间[root@localhost ~]# ipvsadm -a -t 10.1.0.7:80 -r 10.1.0.10:80 -g -w 1
[root@localhost ~]# ipvsadm -a -t 10.1.0.7:80 -r 10.1.0.9:80 -g -w 1#说明:
#-a:添加RS节点
#-t:指定虚拟路由主机的VIP地址和监听端口
#-r:指定RS节点的RIP地址和监听端口
#-g:指定DR模式
#-w:指定权值

查看lvs配置结果

[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.1.0.7:80 rr persistent 20-> 10.1.0.9:80                  Route   1      0          0         -> 10.1.0.10:80                 Route   1      0          0  

ipvs配置删除方法

[root@lvs01 ~]# #ipvsadm -D -t 10.1.0.7:80 -s rr       #删除虚拟路由主机
[root@lvs01 ~]# #ipvsadm -d -t 10.1.0.7:80 -r 10.1.0.9:80     #删除RS节点

此时,可以打开浏览器访问http://10.1.0.8体验结果,如果没意外,是无法访问的。(RS将包丢弃了)

[root@localhost ~]# curl -X GET http://10.1.0.7
#无法请求

3、手工在RS端绑定lo网卡及抑制ARP

在每台realServer上设置

[root@localhost ~]#  ifconfig lo:0 10.1.0.7/32 up
[root@localhost ~]# ifconfig lo:0
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 10.1.0.7  netmask 0.0.0.0loop  txqueuelen 1000  (Local Loopback)

上面的配置,重启后就掉了,工作中得写在配置文件里面
todo 上述配置,如何保存到配置文件?

vim /etc/sysconfig/network-scripts/ifcfg-lo:0

添加路由

[root@localhost ~]# route add -host 10.1.0.7 dev lo
[root@localhost ~]# route -n | grep 10.1.0.7
10.1.0.7        0.0.0.0         255.255.255.255 UH    0      0        0 lo

4、手工在RS端抑制ARP响应

执行下面四句命令

echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

5、测试一下效果

在10.1.0.11机器,即上图中的机器B上执行命令

[root@localhost ~]# curl -X GET http://10.1.0.7
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>10.1.0.9 </h1>
</body>
</html>
[root@localhost ~]# curl -X GET http://10.1.0.7
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>10.1.0.10 </h1>
</body>
</html>

在LVS机器上抓包
可以看到只有请求(10.1.0.11)进来(10.1.0.7),并没有返回报文
在这里插入图片描述

在RS机器上抓包
可以看到请求的ip是client ip(10.1.0.11),而不是LVS的IP,同时返回报文,是直接返回给client
在这里插入图片描述

6、删除RS,试下负载均衡效果

由于现在没有健康检查功能,所以删除实例我们手工来操作一下

删除一台RS,再试着请求

[root@localhost ~]# ipvsadm -d -t 10.1.0.7:80 -r 10.1.0.10:80
[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.1.0.7:80 rr persistent 20-> 10.1.0.9:80                  Route   1      0          0    

可以看到现在每次都只能请求到10.1.0.9的那台服务了

[root@localhost ~]# curl -X GET http://10.1.0.7
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>10.1.0.9 </h1>
</body>
</html>

最后再把RS加回去

 ipvsadm -a -t 10.1.0.7:80 -r 10.1.0.10:80 -g -w 1

7、保存LVS规则到配置文件,保证重启不丢失

[root@localhost ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@localhost ~]# cat /etc/sysconfig/ipvsadm
-A -t localhost.localdomain:http -s rr -p 20
-a -t localhost.localdomain:http -r 10.1.0.9:http -g -w 1
-a -t localhost.localdomain:http -r 10.1.0.10:http -g -w 1
[root@localhost ~]# service ipvsadm restart ##重启ipvsadm看看
Redirecting to /bin/systemctl restart ipvsadm.service
[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  127.0.0.1:80 rr persistent 20-> 10.1.0.9:80                  Route   1      0          0         -> 10.1.0.10:80                 Route   1      0          0  

上面的操作有几个问题,就是配置并没有保存,重启之后,相关的配置会丢失。

  • 1、是VIP绑定网卡的设置,重启后丢失了
    网卡设置如下:
cd /etc/sysconfig/network-scripts/
cp ifcfg-enp0s8 ifcfg-enp0s8:0
vim ifcfg-enp0s8:0
#删除UUID,dns与网关,注意子网
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=10.1.0.7
PREFIX=32
DEFROUTE=yes
NAME=lo:30
DEVICE=lo:30
ONBOOT=yes
#重启网络服务、启动网卡???centos8 重启网卡是什么命令?让网卡配置生效果是什么命令
重启网卡使配置文件生效
Centos7:systemctl restart network
Centos8:
ifup lo:0 -->好像不行nmcli c reload /etc/sysconfig/network-scripts/ifcfg-ens33 # 我验证不行
nmcli networking off && nmcli networking on # 验证可行,其它命令自行验证
ifdown ens33 && ifup ens33 # 验证可行,其它命令自行验证
nmcli con down ens33 && nmcli con up ens33
systemctl restart NetworkManager
  • 2、ipvsadm配置的规则重启后也丢失了
    保存到配置文件
#保存设置
ipvsadm
ipvsadm -ln
ipvsadm-save >/etc/sysconfig/ipvsadm
  • 3、将VIP绑定到RS的lo网卡,重启后丢失的问题
#添加回环网卡,修改回环网卡名,IP地址,子网掩码
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=10.1.0.7
PREFIX=32
DEFROUTE=yes
NAME=lo:30
DEVICE=lo:30
ONBOOT=yes重启网卡使配置文件生效
Centos7:
systemctl restart networkCentos8:
ifup lo:0 -->好像不行nmcli c reload /etc/sysconfig/network-scripts/ifcfg-ens33 # 我验证不行
nmcli networking off && nmcli networking on # 验证可行,其它命令自行验证
ifdown ens33 && ifup ens33 # 验证可行,其它命令自行验证
nmcli con down ens33 && nmcli con up ens33
systemctl restart NetworkManager

4、RS 通过route add的路由规则,重启后丢失

#开机执行命令
vim /etc/rc.d/rc.local
/usr/sbin/route add -host 10.1.0.7 dev lo:0
chmod +x /etc/rc.d/rc.local

四、开发脚本配置LVS

4.1 开发脚本配置LVS负载均衡器端

4.1.1 LVS负载均衡器端自动配置脚本:

[root@lvs01 scripts]# cat ipvs_server.sh#!/bin/bash# author:Mr.chen#LVS scripts. /etc/init.d/functionsVIP=192.168.0.240SUBNET="eth0:`echo $VIP | awk -F "." '{print $4}'`"PORT=80RIP=(192.168.0.223192.168.0.224)function start(){if [ `ifconfig | grep $VIP | wc -l` -ne 0 ];thenstopfiifconfig $SUBNET $VIP broadcast $VIP netmask 255.255.255.0 upipvsadm -Cipvsadm --set 30 5 60ipvsadm -A -t $VIP:$PORT -s rr -p 20for ((i=0;i<${#RIP[*]};i++))doipvsadm -a -t $VIP:$PORT -r ${RIP[$i]} -g -w 1done}function stop(){ipvsadm -Cif [ `ifconfig | grep $VIP | wc -l` -ne 0 ];thenifconfig $SUBNET downfiroute del -host $VIP dev eth0 &>/dev/null}case "$1" instart)startecho "ipvs is started";;stop)stopecho "ipvs is stopped";;restart)stopecho "ipvs is stopped"startecho "ipvs is started";;*)echo "USAGE:$0 {start | stop | restart}"esac

4.1.2 RS节点Web服务器端自动配置脚本

[root@web01 scripts]# cat rs_server.sh#!/bin/bash# author:Mr.chen# RS_sever scripts. /etc/rc.d/init.d/functionsVIP=192.168.0.240case "$1" instart)echo "start LVS of REALServer IP"interface="lo:`echo $VIP | awk -F "." '{print $4}'`"/sbin/ifconfig $interface $VIP broadcast $VIP netmask 255.255.255.255 uproute add -host $VIP dev $interfaceecho "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;;stop)interface="lo:`echo $VIP | awk -F "." '{print $4}'`"/sbin/ifconfig $interface downecho "STOP LVS of REALServer IP"echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0" > /proc/sys/net/ipv4/conf/lo/arp_announceecho "0" > /proc/sys/net/ipv4/conf/all/arp_ignoreecho "0" > /proc/sys/net/ipv4/conf/all/arp_announce;;*)echo "Usage: $0 {start|stop}"exit 1esac

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

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

相关文章

如何用 GPT-4 全模式(All Tools)帮你高效学习和工作?

「十项全能」的 ChatGPT &#xff0c;用起来感受如何&#xff1f; 之前&#xff0c;作为 ChatGPT Plus 用户&#xff0c;如果你集齐下面这五个模式&#xff0c;就会成为别人羡慕的对象。 但现在&#xff0c;人们更加期盼的&#xff0c;是下面这个提示的出现&#xff1a; 这个提…

ZZ038 物联网应用与服务赛题第I套

2023年全国职业院校技能大赛 中职组 物联网应用与服务 任 务 书 &#xff08;I卷&#xff09; 赛位号&#xff1a;______________ 竞赛须知 一、注意事项 1.检查硬件设备、电脑设备是否正常。检查竞赛所需的各项设备、软件和竞赛材料等; 2.竞赛任务中所使用的各类软件工…

http中的Content-Type类型

浏览器的Content-Type 最近在做web端下载的时候需要给前端返回一个二进制的流&#xff0c;需要在请求头中设置一个 writer.Header().Set("Content-Type", "application/octet-stream")那么http中的Content-Type有具体有哪些呢&#xff1f;他们具体的使用场…

超详细的wheel轮子下载和.whl安装

wheel安装 pip安装失败问题 基于Anaconda进行 pip install ,报如下 但基于此路径下安装.whl文件时候&#xff0c;会报如下 通过在可借鉴的博客上查找相关原因&#xff0c;发现原来是因为版本没有匹配的问题&#xff0c;基于此问题以及博客中的解决方案&#xff0c;进行亲测…

Pandas练手项目

一、chipotle tsv 数据集&#xff1a;chipotle.tsv-数据集 代码&#xff1a;https://download.csdn.net/download/Albert233333/88508819 1 导入数据 # order_id这一列相同的数字表示 一个消费者同一次进行的交易 # 表格中的每一行表示 用户一次购买的某一个品类 购买的数量…

1、Sentinel基本应用限流规则(1)

Sentinel基本应用&限流规则 1.1 概述与作用 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。缓存、降级和限流是保护微服务系统运行稳定性的三大利器。 缓存&#xff1a;提升系统访问速度和增大系统能处理的容量 降级&#xff1a;当服务出问题或者影…

12 款小众宝藏AI工具,90% 的开发者不了解

AI工具的发展一日千里&#xff0c;了解这些AI工具的功能以及它们如何提高开发过程中的效率和创新&#xff0c;变得尤为重要&#xff0c;这里分享了 12个宝藏的人工智能和低代码工具&#xff0c;希望对大家的工作与学习有所帮助。 1.Pieces for Developers 网址&#xff1a;ht…

Technology Strategy Pattern 学习笔记5 -Creating the Strategy-Department Context

Creating the Strategy-Department Context 1 situations This pattern helps you organize your thoughts, and consider the department holistically in the following situations 1.1 •Aligning teams around a vision, especially a new direction 1.2 •Setting up a …

presto插件机制揭秘:探索无限可能的数据处理舞台

文章目录 1. 前言2. Presto插件架构3. Plugin接口3.1 插件协议3.2 插件实现类 4. 插件加载过程4.1 PluginManager 5. 插件应用6. 总结 关键词&#xff1a;Presto Plugin 1. 前言 本文源码环境&#xff1a; presto: prestoDb 0.275版本 在Presto框架中插件机制设计是一种非常常见…

lombok依赖介绍(帮助我们消除冗长代码,如get,set方法)

前言 lombok 是一个 Java 工具库&#xff0c;通过注解的方式&#xff0c;简化 Java 开发。要想使用 lombok 中的注解&#xff0c;我们需要先引入依赖&#xff0c;推荐看idea必装插件EditStarters&#xff08;快速引入依赖&#xff09;&#xff0c;lombok是⼀款在编译期⽣成代码…

随身wifi编译Openwrt的ImmortalWrt分支

背景&#xff1a; 之前用酷安上下载的苏苏亮亮版友提供的Openwrt&#xff0c;在高通410棒子上刷机成功&#xff0c;但编译一直就没搞定。近期听说又出了个分支版本ImmortalWrt&#xff0c;刷了个版本&#xff0c;感觉界面清爽不少&#xff0c;内核也升级&#xff0c;遂打算搞定…

【Redis】SSM整合Redis注解式缓存的使用

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《Redis》。&#x1f3af;&#x1f3af; &#x1f4…

【ML】分类问题

分类问题 classification&#xff1a;根据已知样本特征&#xff0c;判断输入样本属于哪种已知样本类。 常用入门案例&#xff1a;垃圾邮件检测、图像分类、手写数字识别、考试通过预测。 分类问题和回归问题的明显区别&#xff1a; 分类问题的结果是非连续型标签&#xff0c…

Netty入门指南之传统通信的问题

作者简介&#xff1a;☕️大家好&#xff0c;我是Aomsir&#xff0c;一个爱折腾的开发者&#xff01; 个人主页&#xff1a;Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏&#xff1a;Netty应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言多线程…

基于APM(PIX)飞控和missionplanner制作遥控无人车-从零搭建自主pix无人车无人坦克

前面的步骤和无人机调试一样&#xff0c;可以参考无人机相关专栏。这里不再赘述。 1.安装完rover的固件后&#xff0c;链接gps并进行校准。旋转小车不同方向&#xff0c;完成校准&#xff0c;弹出成功窗口。 2.校准遥控器。 一定要确保遥控器模式准确&#xff0c;尤其是使用没…

轻量封装WebGPU渲染系统示例<20>- 美化一下元胞自动机(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/GameOfLifePretty.ts 系统特性: 1. 用户态与系统态隔离。 2. 高频调用与低频调用隔离。 3. 面向用户的易用性封装。 4. 渲染数据(内外部相关资源)和渲染机制分离…

使用Anaconda安装TensorFlow环境以及没有搜到的报错的解决方法

1.在官网下载Anaconda 这一步几乎不会有人报错 下稳定的版本 或者最新的版本都可以 2.TensorFlow分两个版本 一个是用cpu跑 另一个是用gpu跑 显而易见 cpu的计算性能已经比不上现在主流的显卡了 所以有独显的电脑尽量安装gpu版本 CPU版本: 先给出cpu版本的安装方法: 打开A…

描述低轨星座的特点和通信挑战,以及它们在5G和B5G中的作用。

文章目录 2章4 章5章&#xff08;没看&#xff09;6章&#xff08;没看&#xff09; 2章 将卫星星座中每个物理链路中可实现的数据速率、传播延迟和多普勒频移与3GPP技术报告中的参数进行分析和比较[3]。 相关配置 面向连接的网络&#xff0c;预先简历链路 卫星和地面终端有…

自动化测试--验证邮件内容

场景 业务上有许多发送邮件的场景&#xff0c;发送的邮件基本上都是自动发送的&#xff0c;而且邮件内容是很重要的&#xff0c;对于邮件发没发送&#xff0c;发送的时间点对不对每次回归测试工作量太大了&#xff0c;所以考虑把这部分内容加入到自动化测试中 工具 python g…

了解计算机的大小端存储模式

我们在计算机中存储数据时&#xff0c;数据是如何组织和表示的是一个重要的问题。其中一个关键概念是 大小端存储模式&#xff08;Endianness&#xff09;&#xff0c;它描述了多字节数据在内存中的存储方式。本文将介绍大小端存储模式的原理、应用和区别。 什么是大小端存储模…