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

news/2024/7/9 23:47:51 标签: lvs, 负载均衡, 运维

本文介绍,如何通过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 1500
        inet 10.1.0.7  netmask 255.255.0.0  broadcast 10.1.255.255
        ether 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_82">查看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 65536
        inet 10.1.0.7  netmask 0.0.0.0
        loop  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 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

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

http://www.niftyadmin.cn/n/5145479.html

相关文章

计算流体动力学(CFD)软件

CFD&#xff0c;英语全称 (Computational Fluid Dynamics&#xff09;&#xff0c;即计算流体动力学。CFD 是近代流体力学&#xff0c;数值数学和计算机科学结合的产物&#xff0c;是一门具有强大生命力的交叉科学。它是将流体力学的控制方程中积分、微分项近似地表示为离散的代…

Android四大组件总结

从事安卓开发也有两年多的时间了&#xff0c;从头开始整理下所学的东西&#xff0c;坚持&#xff01;&#xff01;&#xff01; 一、Activity 活动 Activity 用于显示用户界面&#xff0c;用户通过 Activity 交互完成相关操作&#xff1b; 一个 App 允许有多个Activity Activi…

PP系统是什么

PP系统通常指的是“人力资源管理系统”&#xff08;HRM系统&#xff09;&#xff0c;它是一种用于管理组织内人力资源的软件系统。PP系统的功能通常包括以下内容&#xff1a; 员工信息管理&#xff1a;记录和维护员工的个人信息、联系信息、工作经历等。 薪酬管理&#xff1a;…

从零学算法10

10.给你一个字符串 s 和一个字符规律 p&#xff0c;请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符 * 匹配零个或多个前面的那一个元素 所谓匹配&#xff0c;是要涵盖 整个 字符串 s的&#xff0c;而不是部分字符串。 示例 1&#xff1a; 输入&#xff1a;s…

成长的寓言:做一棵永远成长的苹果树

一棵苹果树&#xff0c;终于结果了。 第一年&#xff0c;它结了10个苹果&#xff0c;9个被拿走&#xff0c;自己得到1个。对此&#xff0c;苹果树愤愤不平&#xff0c;于是自断经脉&#xff0c;拒绝成长。第二年&#xff0c;它结了5个苹果&#xff0c;4个被拿走&#xff0c…

提升工作效率与质量——马斯克的五步工作法

图片来源网络 埃隆马斯克&#xff08;Elon Musk&#xff09;是一位备受赞誉的创业家和工程师&#xff0c;他的成功并非偶然&#xff0c;而是源于他对问题的深刻理解以及不断追求最佳解决方案的决心。为了实现这一目标&#xff0c;他制定了一套包含五个步骤的工作方法&#xff0…

Leetcode—485.最大连续1的个数【简单】

2023每日刷题&#xff08;十五&#xff09; Leetcode—485.最大连续1的个数 实现代码 int findMaxConsecutiveOnes(int* nums, int numsSize){int max 0;int i;int flag 0;int cnt 0;for(i 0; i < numsSize; i) {if(nums[i] 1) {if(flag 0) {flag 1;cnt 1;} else {…

软件模拟IIC的全面笔记(已调通)

[toc] lib_i2c_simulation /** Author: Haiyichen* Date: 2023-09-21 16:16:16* LastEditors: Haiyichen* LastEditTime: 2023-10-31 18:01:10* Description: Personal notes of i2c-simulation*/i2c基础 通讯流程 协议 除了文字解释&#xff0c;有用wavedrom简单画了一些各…