vls dr nat 配置及测试

来源:本站原创 Linux 超过32 views围观 0条评论

 

————-1.DR模式配置及测试————————————–
地址分配
DR  ens33 192.168.142.188 VIP ens33:0 192.168.142.189
RS1 192.168.142.138  VIP lo:0 192.168.142.189
RS2 192.168.142.139  VIP lo:0 192.168.142.189

 

在DR上配置

vim /opt/script/lvs_dr.sh

#! /bin/bash
#开启IP转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward   
ipvjeff=/sbin/ipvsadm
vip=192.168.142.189
rs1=192.168.142.138
rs2=192.168.142.139
#增加子接口
ifconfig ens33:0 down
ifconfig ens33:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev ens33:0
#清空原有lvs配置
$ipvjeff -C
#定义一个集群服务 RR算法
$ipvjeff -A -t $vip:80 -s rr
#添加一个后端服务器 模式为dr
$ipvjeff -a -t $vip:80 -r $rs1:80 -g
$ipvjeff -a -t $vip:80 -r $rs2:80 -g

chmod +x /opt/script/lvs_dr.sh
脚本需要开机运行
[root@lvs-d script]# ./lvs_dr.sh
SIOCSIFFLAGS: Cannot assign requested address
SIOCADDRT: No such device
[root@lvs-d script]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@lvs-d script]# ./lvs_dr.sh
SIOCADDRT: No such device

配置real server 服务
后端所有应用服务器都需要配置
#vim /opt/script/rs.sh
#! /bin/bash
vip=192.168.142.189
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
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
脚本需要开机运行
chmod +x /opt/script/rs.sh

运行脚本
[root@mysql02 script]# ip a  |grep 192
    inet 192.168.142.189/32 brd 192.168.142.189 scope global lo:0—验证
    inet 192.168.142.139/24 brd 192.168.142.255 scope global ens33

永久保存LVS规则并恢复
[root@LVS ~]# ipvsadm -S > /etc/sysconfig/ipvsadm.s1
模拟清空ipvsadm规则来恢复
[root@LVS ~]# ipvsadm -C
[root@LVS ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@lvs-d script]# 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.142.188:80 wrr
  -> 10.1.1.11:80                 Masq    2      0          0        
  -> 10.1.1.12:80                 Masq    1      0          0        
[root@lvs-d script]#

——–SIOCADDRT:No Such Device—–
dev 后指定设备 必须是已经存在的网卡设备
检查配置接口是否配置正确

验证
#查看ipvs定义的规则列表
[root@lvs-d script]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.142.189:80 rr
  -> 192.168.142.138:80           Route   1      2          2        
  -> 192.168.142.139:80           Route   1      2          1        
[root@lvs-d script]#

 

[root@lvs-d script]# ip a |grep 192
    inet 192.168.142.188/24 brd 192.168.142.255 scope global ens33
    inet 192.168.142.189/32 brd 192.168.142.189 scope global ens33:0

[root@lvs-d script]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    100    0        0 ens33
192.168.142.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33
lvs-d           0.0.0.0         255.255.255.255 UH    0      0        0 ens33 —-这个必须有
[root@lvs-d script]#

[root@lvs-d script]# vim lvs_dr.sh
[root@lvs-d script]# ifconfig -a
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.142.188  netmask 255.255.255.0  broadcast 192.168.142.255
        inet6 fe80::20c:29ff:febd:8934  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:bd:89:34  txqueuelen 1000  (Ethernet)
        RX packets 7422  bytes 7825737 (7.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3109  bytes 294100 (287.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.142.189  netmask 255.255.255.255  broadcast 192.168.142.189
        ether 00:0c:29:bd:89:34  txqueuelen 1000  (Ethernet)

       
进行web验证—-curl

RR算法 每次会进行轮换,出下列效果为正常

jeff@ubuntu:~$ curl http://192.168.142.189
r1
jeff@ubuntu:~$ curl http://192.168.142.189
r2
jeff@ubuntu:~$ curl http://192.168.142.189
r1
jeff@ubuntu:~$ curl http://192.168.142.189
r2
jeff@ubuntu:~$ curl http://192.168.142.189
r1
jeff@ubuntu:~$ curl http://192.168.142.189
r2
jeff@ubuntu:~$ curl http://192.168.142.189
r1
jeff@ubuntu:~$ curl http://192.168.142.189
r2
jeff@ubuntu:~$

[root@lvs-d script]# ipvsadm -L -n –stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  192.168.142.189:80                 77      491        0    46381        0
  -> 192.168.142.138:80                 38      220        0    14254        0
  -> 192.168.142.139:80                 39      271        0    32127        0
[root@lvs-d script]#

————-2.nat模式配置及测试————————————–
优势很明显,配置简单
DR  ens33 192.168.142.188
    vlan 10 : 10.1.1.188
RS1 vlan 10 :10.1.1.11 GW10.1.1.188 切记:关闭本地ens33接口,只留10.1.1.11接口
RS2 vlan 10 :10.1.1.12 GW10.1.1.188 切记:关闭本地ens33接口,只留10.1.1.12接口
接口使用vlan 10或 网络连接方式:Host-Only

dr上运行如下脚本
vim /opt/script/lvs_nat.sh

#! /bin/bash
#开启IP转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
ipvjeff=/sbin/ipvsadm
vip=192.168.142.188
rs1=10.1.1.11
rs2=10.1.1.12
#清空原有lvs配置
$ipvjeff -C
#定义一个集群服务 RR算法
$ipvjeff -A -t $vip:80 -s wrr
#添加一个后端服务器 模式为dr
$ipvjeff -a -t $vip:80 -r $rs1 -m -w 2
$ipvjeff -a -t $vip:80 -r $rs2 -m -w 1

chmod +x /opt/script/lvs_nat.sh
脚本需要开机运行
[root@lvs-d script]# ./lvs_nat.sh
SIOCSIFFLAGS: Cannot assign requested address
SIOCADDRT: No such device
[root@lvs-d script]# echo 1 > /proc/sys/net/ipv4/ip_forward

永久保存LVS规则并恢复
[root@LVS ~]# ipvsadm -S > /etc/sysconfig/ipvsadm.s1
模拟清空ipvsadm规则来恢复
[root@LVS ~]# ipvsadm -C
[root@LVS ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@lvs-d script]# 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.142.188:80 wrr
  -> 10.1.1.11:80                 Masq    2      0          0        
  -> 10.1.1.12:80                 Masq    1      0          0        
[root@lvs-d script]#

配置real server 服务
后端所有应用服务器都需要配置
只需配置IP其余不用配置

测试 和权重一致即为正确
jeff@ubuntu:~$ curl http://192.168.142.188
r1
jeff@ubuntu:~$ curl http://192.168.142.188
r1
jeff@ubuntu:~$ curl http://192.168.142.188
r2
jeff@ubuntu:~$
                                      

——–SIOCADDRT:No Such Device—–
dev 后指定设备 必须是已经存在的网卡设备
检查配置接口是否配置正确

验证
#查看ipvs定义的规则列表
[root@lvs-d script]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.142.189:80 rr
  -> 192.168.142.138:80           Route   1      2          2        
  -> 192.168.142.139:80           Route   1      2          1        
[root@lvs-d script]#

 

[root@lvs-d script]# ip a |grep 192
    inet 192.168.142.188/24 brd 192.168.142.255 scope global ens33
    inet 192.168.142.189/32 brd 192.168.142.189 scope global ens33:0

[root@lvs-d script]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    100    0        0 ens33
192.168.142.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33
lvs-d           0.0.0.0         255.255.255.255 UH    0      0        0 ens33 —-这个必须有
[root@lvs-d script]#

[root@lvs-d script]# vim lvs_dr.sh
[root@lvs-d script]# ifconfig -a
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.142.188  netmask 255.255.255.0  broadcast 192.168.142.255
        inet6 fe80::20c:29ff:febd:8934  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:bd:89:34  txqueuelen 1000  (Ethernet)
        RX packets 7422  bytes 7825737 (7.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3109  bytes 294100 (287.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.142.189  netmask 255.255.255.255  broadcast 192.168.142.189
        ether 00:0c:29:bd:89:34  txqueuelen 1000  (Ethernet)

       
进行web验证—-curl

RR算法 每次会进行轮换,出下列效果为正常

jeff@ubuntu:~$ curl http://192.168.142.189
r1
jeff@ubuntu:~$ curl
http://192.168.142.189
r2
jeff@ubuntu:~$ curl http://192.168.142.189
r1
jeff@ubuntu:~$ curl http://192.168.142.189
r2
jeff@ubuntu:~$ curl http://192.168.142.189
r1
jeff@ubuntu:~$ curl http://192.168.142.189
r2
jeff@ubuntu:~$ curl http://192.168.142.189
r1
jeff@ubuntu:~$ curl http://192.168.142.189
r2
jeff@ubuntu:~$

[root@lvs-d script]# ipvsadm -L -n –stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  192.168.142.189:80                 77      491        0    46381        0
  -> 192.168.142.138:80                 38      220        0    14254        0
  -> 192.168.142.139:80                 39      271        0    32127        0
[root@lvs-d script]#
       
       
—————–ipvsadm组件定义规则的格式:
1.定义集群服务格式:
(1).添加集群服务:
ipvsadm -A|E -t|u|f service-address [-s scheduler]
              [-p [timeout]] [-M netmask]
-A:                  表示添加一个新的集群服务
-E:                  编辑一个集群服务
-t:                  表示tcp协议
-u:                  表示udp协议
-f:                  表示firewall-Mark,防火墙标记
service-address:     集群服务的IP地址,即VIP
-s                    指定调度算法
-p                    持久连接时长,如#ipvsadm -Lcn ,查看持久连接状态
-M                    定义掩码
ipvsadm -D -t|u|f service-address      删除一个集群服务
ipvsadm -C                             清空所有的规则
ipvsadm -R                             重新载入规则
ipvsadm -S [-n]                        保存规则
2.向集群服务添加RealServer规则:
(1).添加RealServer规则
ipvsadm -a|e -t|u|f service-address -r server-address
              [-g|i|m] [-w weight]
-a                 添加一个新的realserver规则
-e                 编辑realserver规则
-t                 tcp协议
-u                 udp协议
-f                 firewall-Mark,防火墙标记
service-address    realserver的IP地址
-g                 表示定义为LVS-DR模型
-i                 表示定义为LVS-TUN模型
-m                 表示定义为LVS-NAT模型
-w                 定义权重,后面跟具体的权值
ipvsadm -d -t|u|f service-address -r server-address          –删除一个realserver
ipvsadm -L|l [options]                                       –查看定义的规则
如:#ipvsadm -L -n 
ipvsadm -Z [-t|u|f service-address]                          –清空计数器
清空和查看:
ipvsadm -C
ipvsadm -L|l [options]   
-n: numeric,基于数字格式显示地址和端口;
-c: connection,显示ipvs连接;
–stats:统计数据
–rate: 速率
–exact: 精确值
四、lvs的10种调度算法
可以分为两大类
LVS Scheduling Method LVS的调度方法:
1.Fixed Scheduling Method  静态调服方法
(1).RR     轮询
(2).WRR    加权轮询
(3).DH     目标地址hash
(4).SH     源地址hash
2.Dynamic Scheduling Method 动态调服方法
(1).LC     最少连接
(2).WLC    加权最少连接
(3).SED    最少期望延迟
(4).NQ     从不排队调度方法
(5).LBLC   基于本地的最少连接
(6).LBLCR  带复制的基于本地的最少连接

arp_ignore:定义接受到ARP请求时的相应级别
0:只要本地配置的有相应地址,就给予响应。
1:从这个接口进来的,并且目标地址是此接口,才给予响应
2:只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内
3:不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应
4-7:保留未使用
8:不回应所有(本地地址)的arp查询  
此处因该将arp_ignore设置为1 
 
arp_announce:定义将自己地址向外通告是的通告级别;
0: 将本地任何接口上的任何地址向外通告
1:仅响应目标网络通告与其网络匹配的地址
2:仅向与本地接口上地址匹配的网络进行通告
此处应该将arp_announce设置为2

参考
http://leeyan.blog.51cto.com/8379003/1701931/
http://wuhf2015.blog.51cto.com/8213008/1654648

文章出自:CCIE那点事 http://www.jdccie.com/ 版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。 禁止全文转载。
本文链接:http://www.jdccie.com/?p=3609转载请注明转自CCIE那点事
如果喜欢:点此订阅本站