lvs-dr模式实验详解

华子目录

lvs-dr(企业当中最常用)

  • DRDirect Routing直接路由LVS默认模式应用最广泛,通过为请求报文重新封装一个MAC首部进行转发源MACDIP所在的接口的MAC目标MAC是某挑选出RSRIP所在接口的MAC地址
  • 源IP/PORT,以及目标IP/PORT保持不变

dr模式数据逻辑

  • DR模式中,RS接收到访问请求不需要回传给VS调度器,而是直接回传数据发送给client客户端,所以RSvs上都要有vip

dr模式数据传输过程

  • 客户端发送数据帧vs调度主机数据帧内容客户端IP+客户端的MAC+VIP+VIP的MAC
  • VS调度主机接收到数据帧后把数据帧中的VIP的MAC改为RS1的MAC,此时数据帧中的数据客户端IP+客户端的MAC+VIP+RS1的MAC
  • RS1收到数据包后做出响应回传数据包响应数据包中的内容VIP+RS1的MAC+客户端IP+客户端IP的MAC

dr模式的特点

  • Director(vs调度器)各RS都配置有VIP
  • 确保前端路由器目标IPVIP请求报文发往Director
  • RSRIP可以使用私网地址,也可以是公网地址RIPDIP同一IP网络(中间不能加路由器)
  • RIP网关不能指向DIP,以确保响应报文不会经由Director。需要指向边界路由内网地址
  • RSDirector要在同一个物理网络
  • 请求报文经由Director,但响应报文经由Director,而由RS直接发往Client
  • 不支持端口映射端口不能修改
  • 由于dr模式源目ip不变,只有二层mac发生变化,所以vsrs端口必须保持一致
  • RS可使用大多数OS系统
  • RS上修改内核参数以限制arp通告应答级别(使其只能接收,不能响应
  • vs是知道rs的主机网卡的mac,所以vsrs需要处于同一vlan中,中间不能加路由器

实验拓扑

  • 内网仅主机ip负责通信vip负责对外
  • clientrouter之间是互联网。由于实验环境有限,为了让client访问到rs上,我们让client网关指向routernat来模拟外网互通
  • lvsrs网关都指向router的仅主机(边界路由器的内网地址)
  • 为了简单配置,对lo网卡进行设定(也可以对eth0网卡设定),使其成为vip

实验主机准备

  • 准备5台机子,一台client,一台router,一台lvs,两台webserver充当RS
  • client上一个nat网卡
  • router上一个nat网卡,一个仅主机网卡
  • lvs上一个仅主机网卡用于内网通信lo网卡用作vip
  • RS上一个仅主机网卡用于内网通信lo网卡用作vip
  • client网关指向routernat网卡,lvs,RS网关指向router仅主机网卡

主机准备

client上一个nat网卡

router上一个nat网卡,一个仅主机网卡

  • 由于routernat模式仅主机模式网卡处于不同vlan,两个网卡要想通信,就必须打开Linux内核路由转发功能

lvs上一个仅主机网卡用于内网通信lo网卡用作vip

RS上一个仅主机网卡用于内网通信lo网卡用作vip

实验步骤

1.clientip设定

  • nat网卡:172.25.254.10/24
  • 网关:172.25.254.100/24
bash 复制代码
[root@client ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
uuid=3fe4f788-e5f3-4046-8a3e-6cdfb8098aab
type=ethernet
interface-name=eth0

[ethernet]

[ipv4]
address=172.25.254.10/24,172.25.254.100
method=manual

[ipv6]
addr-gen-mode=default
method=auto

[proxy]
bash 复制代码
[root@client ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.25.254.100  0.0.0.0         UG    100    0        0 eth0
172.25.254.0    0.0.0.0         255.255.255.0   U     100    0        0 eth0

2.router上的ip设定

  • nat网卡:172.25.254.100/24
  • 仅主机网卡:192.168.0.10/24
bash 复制代码
[root@router ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0

[ethernet]

[ipv4]
address=172.25.254.100/24
method=manual

[ipv6]
addr-gen-mode=default
method=auto

[proxy]
bash 复制代码
[root@router ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection
[connection]
id=eth1
type=ethernet
interface-name=eth1

[ethernet]

[ipv4]
address=192.168.0.10/24
method=manual

[ipv6]
addr-gen-mode=default
method=auto

[proxy]

3.router开启路由转发功能

bash 复制代码
[root@router ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1  #在文件末尾添加
bash 复制代码
[root@router ~]# sysctl -p   #加载
net.ipv4.ip_forward = 1

4.lvs主机中的ip设定

  • 仅主机网卡:192.168.0.200/24
  • lo网卡设置为vip192.168.0.100/32
  • 网关指向:192.168.0.10/24
bash 复制代码
[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
uuid=3fe4f788-e5f3-4046-8a3e-6cdfb8098aab
type=ethernet
interface-name=eth0

[ethernet]

[ipv4]
address=192.168.0.200/24,192.168.0.10
method=manual

[ipv6]
addr-gen-mode=default
method=auto

[proxy]
bash 复制代码
[root@lvs ~]# ip addr add 192.168.0.100/32 dev lo
bash 复制代码
[root@lvs ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.0.100/32 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:35:a8:7c brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    altname ens160
    inet 192.168.0.200/24 brd 192.168.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::4e21:e4b4:36e:6d14/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
bash 复制代码
[root@lvs ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.10    0.0.0.0         UG    100    0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0

5.webserver1主机中的ip设定

  • 仅主机网卡:192.168.0.11/24
  • lo网卡设置为vip192.168.0.100/32
  • 网关指向:192.168.0.10/24
bash 复制代码
[root@webserver1 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
uuid=3fe4f788-e5f3-4046-8a3e-6cdfb8098aab
type=ethernet
interface-name=eth0

[ethernet]

[ipv4]
address=192.168.0.11/24,192.168.0.10
method=manual

[ipv6]
addr-gen-mode=default
method=auto

[proxy]
bash 复制代码
[root@webserver1 ~]# ip addr add 192.168.0.100/32 dev lo
bash 复制代码
[root@webserver1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.0.100/32 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:5f:4a:ff brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    altname ens160
    inet 192.168.0.11/24 brd 192.168.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::7baa:9520:639b:5e48/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
bash 复制代码
[root@webserver1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.10    0.0.0.0         UG    100    0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0

6.webserver2主机中的ip设定

  • 仅主机网卡:192.168.0.22/24
  • lo网卡设置为vip192.168.0.100/32
  • 网关指向:192.168.0.10/24
bash 复制代码
[root@webserver2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
uuid=3fe4f788-e5f3-4046-8a3e-6cdfb8098aab
type=ethernet
interface-name=eth0

[ethernet]

[ipv4]
address=192.168.0.22/24,192.168.0.10
method=manual

[ipv6]
addr-gen-mode=default
method=auto

[proxy]
bash 复制代码
[root@webserver2 ~]# ip addr add 192.168.0.100/32 dev lo
bash 复制代码
[root@webserver2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.0.100/32 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:ef:47:71 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    altname ens160
    inet 192.168.0.22/24 brd 192.168.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5db8:7a0d:b282:fdbf/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
bash 复制代码
[root@webserver2 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.10    0.0.0.0         UG    100    0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0

7.RS主机禁用arp响应功能(让其只有lvs进行响应

  • webserver1
  • 只有先修改all,才能再修改某一网卡
bash 复制代码
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  • webserver2
  • 只有先修改all,才能再修改某一网卡
bash 复制代码
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  • 以上配置为临时修改重启无效。若想永久生效,则需要在/etc/sysctl.conf文件中添加

8.RS上配置web服务

  • webserver1
bash 复制代码
[root@webserver1 ~]# yum install httpd -y
bash 复制代码
[root@webserver1 ~]# echo webserver1 > /var/www/html/index.html
  • webserver2
bash 复制代码
[root@webserver2 ~]# yum install httpd -y
bash 复制代码
[root@webserver2 ~]# echo webserver2 > /var/www/html/index.html

9.RS上启动web服务

  • webserver1
bash 复制代码
[root@webserver1 ~]# systemctl enable --now httpd
  • webserver2
bash 复制代码
[root@webserver2 ~]# systemctl enable --now httpd

10.安装lvs软件包ipvsadm并启动

bash 复制代码
[root@lvs ~]# yum install ipvsadm -y
bash 复制代码
[root@lvs ~]# touch /etc/sysconfig/ipvsadm  #在启动之前必须要有这个文件,否则启动失败

[root@lvs ~]# systemctl restart ipvsadm
[root@lvs ~]# systemctl enable ipvsadm

11.设置lvs策略并保存

  • -g表示dr模式
bash 复制代码
#当访问vip的80端口时,轮询调度到RS的80端口上
[root@lvs ~]# ipvsadm -A -t 192.168.0.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.11:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.22:80 -g
bash 复制代码
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.100:80 rr
  -> 192.168.0.11:80              Route   1      0          0
  -> 192.168.0.22:80              Route   1      0          0
[root@lvs ~]# ipvsadm -S > /etc/sysconfig/ipvsadm
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t lvs:http -s rr
-a -t lvs:http -r 192.168.0.11:http -g -w 1
-a -t lvs:http -r 192.168.0.22:http -g -w 1

12.测试

  • client端访问vip
bash 复制代码
[root@client ~]# curl 192.168.0.100
webserver2
[root@client ~]# curl 192.168.0.100
webserver1
相关推荐
小橞16 分钟前
Linux搭建简易路由转发
linux·运维·服务器
嵌入式DZC17 分钟前
搭建内网文件服务器(FTP),以及实现内网Gitee
运维·服务器
robot_大菜鸟19 分钟前
linux-L7-linux 查看json文件
linux·运维
Flying_Fish_roe22 分钟前
linux-网络管理-网络抓包
linux·网络·php
小技与小术2 小时前
lvs-nat模式实验详解
linux·运维·服务器·网络·lvs
FreeBuf_2 小时前
SSHamble:一款针对SSH技术安全的研究与分析工具
运维·安全·ssh
喵不拉几3 小时前
WebSocket 协议
网络·websocket·网络协议
py.鸽鸽3 小时前
Linux2-mkdir,touch,cat,more
linux
aabbcc456aa3 小时前
ubuntu安装mysql 8.0忘记root初始密码,如何重新修改密码
linux·mysql·ubuntu
张太行_3 小时前
Linux 调用write()函数后,内核一般多久将数据写入磁盘
linux·运维