LVS-NAT实现

LVS-NAT实现

1.0网络拓扑图

lvsant2-2023-02-10-1351

2.0全局搭建环境

2.1 之后,所有的虚拟机都部署2.2——2.6,除了特殊说明的主机

2.1准备5台虚拟机

分别作为 客户端(client),lvs调度器(LVS),路由器(route),服务器1(RS1),服务器2(RS2)

image-20230210163025892

2.2修改主机名

方便查看,防止记错,分别修改主机名

hostname client/LVS/ROUTE/RS1/RS2 

生效

exec bash

2.3关闭防火墙

除了客户端都把防火墙关闭了

systemctl stop firewalld

2.4关闭selinux

vim /etc/slinux/config

修改 SELINUX=disabled

# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

配置生效

setenforce 0

2.5关闭NetworkManager

  1. centos6
service NetworkManager stop
  1. centos7
systemctl stop NetworkManager

2.6准备网卡

网卡添加
虚拟机 设备功能 网卡名称 网卡连接方式
centos6-10 client etho 桥接
centos7-5 LVS ens36 ens33 VMnet6仅 仅主机
7.9-1 ROUTE ens38 ens33 VMnet6仅 仅主机
centos7.5 RS1 ens33 仅主机
centos7.9 RS2 ens33 仅主机

2.7LVS 启用ip_forward

  1. 添加内容 ip_forward

    echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
    
  2. 生效

    sysctl -p
    

3.0实现网络拓扑

3.1client

  1. 配置路由
vim /etc/sysconfig/network-script/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.168.138.120
  1. 重启网络服务
service network restort

3.2LVS

  1. ens36
vim /etc/sysconfig/network-script/ifcfg-ens36
DEVICE=ens36
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.168.138.121
  1. ens33
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.140.115
GATWAY=192.168.140.111
  1. 重启网络
systemcel restwrt network

3.3route

  1. ens38
vim /etc/sysconfig/network-script/ifcfg-ens36
DEVICE=ens36
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.140.111
GATWAY=192.168.140.115
  1. ens33
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.137.110
  1. 重启网络
systemcel restwrt network

3.4RS1

  1. ens33
vim /etc/sysconfig/network-script/ifcfg-ens36
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.137.140
GATWAY=192.168.137.110
  1. 重启网络
systemcel restwrt network

3.5RS2

  1. ens33
vim /etc/sysconfig/network-script/ifcfg-ens36
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.137.135
GATWAY=192.168.137.110
  1. 重启网络
systemcel restwrt network

4.0测试环境搭建

4.1LVS

  1. 安装ipvs包

    yum -y install ipvsadm
    
  2. 添加一条新的虚拟服务

ipvsadm -A -t 172.168.138.121:80 -s rr
  1. 虚拟服务中添加新的真实服务器

    ipvsadm -a -t 172.168.138.121:80 -r 192.168.137.140
    
    ipvsadm -a -t 172.168.138.121:80 -r 192.168.137.135
    
  2. 查看添加如下

    ipvsadm -ln
    
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  172.168.138.121:80 rr
      -> 192.168.137.135:80           Masq    1      0          0         
      -> 192.168.137.140:80           Masq    1      0          0  
    

4.2route

4.3RS1

  1. 安装httpd

    yum  -y install httpd 
    
  2. 重新启动httpd

    systemctl restart httpd
    
  3. 添加主页内容

    echo RS1 > /var/www.html/index.html
    
  4. 查看80端口是否开启

    ss -ntl
    

4.4RS2

  1. 安装httpd

    yum  -y install httpd 
    
  2. 重新启动httpd

    systemctl restart httpd
    
  3. 添加主页内容

    echo RS2 > /var/www.html/index.html
    
  4. 查看80端口是否开启

    ss -ntl
    

5.0测试

5.1 在client上访问RS1和rs2

curl 172.168.138.121
RS1
curl 172.168.138.121
RS2

访问的是VIP地址,由LVS调度后访问数据

两次出现不同的效果是因为在制定ipvs规则的时候使用了rr轮询的方式

5.2端口映射

1修改RS1的端口

vim /etc/httpd/conf/httpd.conf

image-20230210195133706

2修改LVS调度地址

在LVS机器上

  1. 删除RS1的ipvs服务

    ipvsadm -d -t 172.168.138.121:80 -r 192.168.137.140
    
  2. 重新添加

    ipvsadm -a -t 172.168.138.121:80 -r 192.168.137.140:8080 -m
    
  3. 客户端测试

    curl 172.168.138.121
    
    RS1
    
    curl 172.168.138.121
    
    RS2
    

    能够curl通,说明支持端口映射

5.3 权重 调度算法

  1. 编辑虚拟服务

    LVS

    ipvsadm -E 172.168.137.121:80 -s wrr
    

    删除RS1的ipvs服务

    ipvsadm -d -t 172.168.138.121:80 -r 192.168.137.140:8080 
    

    重新添加RS1的ipvs服务,添加权重

    ipvsadm -a -t 172.168.138.121:80 -r 192.168.137.140:8080 -m -w 3
    

    没有定义的RS2,权重为1

    客户端多次访问VIP,RS1 :RS2 =3:1

5.4原地址哈希

只要客户端是同一个ip地址,永远访问的是同一个servers.只要是同一个ip客户端永远往一个固定的server来调度。现在往一个方向调度,就要换成sh算法,

  1. 修改ipvs配置

    ipvsadm -E -t 172.168.138.121:80 -s sh
    
  2. 测试

    curl 172.168.138.121
    
    RS1
    
    curl 172.168.138.121
    
    RS1
    

5.5目标地址哈希

将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如宽带运营商

只要访问的目标地址是固定的,永远往固定上去调度,

  1. 模拟10个页面

    RS1上

    cd /var/www/html
    

    创建10个页面

    for i in {1..10};do echo test$i on RS1 > test$i.html ;done
    

    RS2上执行相同的操作,注意把RS1改为RS2

  2. LVS上

    更改dh算法

    ipvsadm -E -t 172.168.138.121:80 -s dh
    
  3. 测试

    测试结果总是往一个机器上调度,权重也不受到影响,可能是之前的操作,LVS记录的分配结果,有缓存

    重启ipvsadm .service

    systemctl restart ipvsadm .service
    

    ipvsadm -Ln

    再重启reboot,让它丢了再缓存,重启后所有的规则全丢了

    重启完毕后,通了重加

    ipvsadm -Ln

    如果没有了,重新添加IPVS规则

    重新添加

    ipvsadm -A -t 172.168.138.121:80 - s dh
    
    ipvsadm -a -t 172.168.138.121:80 - r 192.168.137.140:8080 -m
    
    ipvsadm -a -t 172.168.138.121:80 - r 192.168.137.135:80 -m
    
  4. 测试

    client上

    curl 172.168.137.121/test1.html
    
    curl 172.168.137.121/test2.html
    
    curl 172.168.137.121/test3.html
    
    curl 172.168.137.121/test4.html
    

    一旦调度到1上永远是1

6.0命令ipvsadm

常用参数:

-A 添加一条新的虚拟服务
-E 编辑虚拟服务
-D 删除虚拟服务
-C 清除所有的虚拟服务规则
-R 恢复虚拟服务规则
-S 保存虚拟服务器规则
-a 在一个虚拟服务中添加一个新的真实服务器
-e 编辑某个真实服务器
-d 删除某个真实服务器
-L 显示内核中的虚拟服务规则
-Z 将转发消息的统计清零
-h 显示帮助信息
-t TCP协议的虚拟服务
-u UDP协议的虚拟服务
-f 说明是经过iptables 标记过的服务类型。
-s 使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是: wlc.
-p 持久稳固的服务。
-M 指定客户地址的子网掩码
-r 真实的服务器
-g 指定LVS 的工作模式为直接路由模式
-i 指定LVS 的工作模式为隧道模式
-m 指定LVS 的工作模式为NAT 模式
-w 真实服务器的权值
-c 显示ipvs中目前存在的连接
-6: 如果fwmark用的是ipv6地址需要指定此选项。

参考实例

添加一个虚拟服务,使用轮询算法:

ipvsadm -A -t 192.168.10.10:80 -s rr

修改虚拟服务的算法为加权轮询:

 ipvsadm -E -t 192.168.10.10:80 -s wrr

删除一个虚拟服务:

 ipvsadm -D -t 192.168.10.10:80

添加一个真实服务器,使用DR模式,设置权重为2:

 ipvsadm -a -t 192.168.10.10:80 -r 192.168.10.12 -g -w 2

修改真是服务器的权重为5:

ipvsadm -a -t 192.168.10.10:80 -r 192.168.10.12 -g -w 5

删除一个真实服务器:

 ipvsadm -d -t 192.168.10.10:80 -r 192.168.10.12

查看当前虚拟服务和各个RS的权重信息:

ipvsadm -Ln

查看当前ipvs模块中记录的链接信息(可用于观察转发情况):

 ipvsadm -lnc

查看当前ipvs模块中的转发情况信息:

ipvsadm -Ln --stats | --rate
posted @ 2023-08-05 07:14  浅~~  阅读(17)  评论(0)    收藏  举报