【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  

todo 两个问题

  • 1是VIP设置,重启后丢失了
  • 2是ipvsadm配置的东西重启后也丢失了,第7步配置没生效

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

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

相关文章

京东h5st逆向 h5st代码之拓展

知识点 node安装模块 crypto-js JavaScript 中的加密库 则更偏向于消息摘要算法、对称加密和简单的哈希函数&#xff0c;支持 AES、DES、SHA-1、HMAC 等诸多算法&#xff0c;适用于对客户端本地存储的数据进行加密、散列或签名处理等场景 axios 一旦安装成功&#xff0c;我们就…

微信小程序项目案例之导游证考试刷题小程序

前言 很多计算机专业的同学在做毕设选题时不知道该如何选题&#xff0c;有的同学是已经选择了要开发一款小程序&#xff0c;但是又不知道开发哪类小程序。本篇将为大家介绍一个小程序的开发方向&#xff0c;考试刷题类小程序是目前比较火的小程序项目之一&#xff0c;在小程序…

vue3写nav滚动事件中悬停在顶部

1. 防抖类Animate, 使用requestAnimationFrame代替setTimeout 也可以使用节流函数, lodash有现成的防抖和节流方法 _.debounce防抖 _.throttle节流 export default class Animate {constructor() {this.timer null;}start (fn) > {if (!fn) {throw new Error(需要执行…

Web安全系列——CSRF攻击

文章首发公众号&#xff1a; 海天二路搬砖工 前言 CSRF 攻击是Web应用中最常见的攻击方式之一。 CSRF攻击给网站身份验证、用户账户和个人隐私带来极大威胁。了解 CSRF 攻击的流程、原理与防御措施&#xff0c;是构建安全可靠的Web应用程序的必要条件。 什么是CSRF攻击 CS…

Python框架之Flask入门和视图

一、Flask入门和视图 需要安装Pycharm专业版 1. Flask简介 Python后端的2个主流框架 Flask 轻量级框架Django 重型框架 Flask是一个基于Python实现的web开发微框架 官方文档&#xff1a;https://flask.palletsprojects.com/ 中文文档&#xff1a;https://dormousehole.readthe…

dbeaver查看表,解决证书报错current license is non-compliant for [jdbc]

http://localhost:9200/_license { “license” : { “status” : “active”, “uid” : “b91ae0e0-b04d-4e20-8730-cf0bca7b2035”, “type” : “basic”, “issue_date” : “2023-02-22T14:33:27.648Z”, “issue_date_in_millis” : 1677076407648, “max_nodes” : 10…

在线数据库关系图设计工具,选Itbuilder

一旦数据库超出了人类可消化的大小&#xff0c;使用关系图工具来辅助其设计就变得至关重要。创建数据库听起来像是一个复杂的过程&#xff0c;但使用现代数据库图表工具&#xff0c;情况并非如此。 itbuilder在线数据库设计工具使用户可以创建和导入数据库关系图以查看数据库对…

Android APT的使用

Apt 介绍 APT(Annotation Processing Tool)是一种处理注释的工具,它对源代码文件进行检测找出其中的 Annotation&#xff0c;根据注解自动生成代码。 Annotation 处理器在处理 Annotation 时可以根据源文件中的 Annotation 生成额外的源文件和其它的文件(文件具体内容由 Annot…

Xshell复制粘贴(Ctrl+C,Ctrl+V)配置

文章目录 Xshell复制粘贴&#xff08;CtrlC&#xff0c;CtrlV&#xff09;配置一、复制二、粘贴 Xshell复制粘贴&#xff08;CtrlC&#xff0c;CtrlV&#xff09;配置 在使用Windows一般使用ctrlc&#xff0c;ctrv实现粘贴复制&#xff0c;通过Xshell连接Linux时&#xff0c;可…

十九、类型信息(5)

动态代理 _代理_是基本的设计模式之一。一个对象封装真实对象&#xff0c;代替其提供其他或不同的操作—这些操作通常涉及到与“真实”对象的通信&#xff0c;因此代理通常充当中间对象。这是一个简单的示例&#xff0c;显示代理的结构&#xff1a; interface Interface {voi…

泡泡玛特MOLLY携手支付宝蚂蚁庄园 深耕乡村儿童美育教育

近日&#xff0c;泡泡玛特旗下IP MOLLY携手支付宝蚂蚁庄园、中国乡村发展基金会共同发起“一笔一画&#xff0c;梦想成真”主题活动&#xff0c;主题活动在蚂蚁庄园平台开展&#xff0c;为泡泡玛特的人气IP MOLLY打造专属庄园&#xff0c;同时联合发布公益IP形象&#xff0c;公…

网络套接字编程(二)

网络套接字编程(二) 文章目录 网络套接字编程(二)简易TCP网络程序服务端创建套接字服务端绑定IP地址和端口号服务端监听服务端运行服务端网络服务服务端启动客户端创建套接字客户端的绑定和监听问题客户端建立连接并通信客户端启动程序测试单执行流服务器的弊端 多进程版TCP网络…