LVS-NAT与LVS-DR模型实战

LVS-NAT、LVS-DR实验

LVS-NAT示例

实验环境:

使用软件VMware WorkStation14,Director的DIP和RealServer的RS1、RS2的RIP为仅主机模式,让其在同一个局域网内,Direcotr的VIP桥接宿主机模式。

  • 一台Director:
    • 版本:CentOS7.4
    • 双网卡:
      • ens39: VIP:192.168.7.138/24,桥接模式。
      • eth37: DIP:192.168.3.1/24,此IP必须和后台的RealSever在同一个网段内,仅主机。
  • 两台RealServer:
    • 版本:CentOS7.4
    • 单网卡:
      • RS1:RIP1:192.168.3.2/24(网关必须指向DIP)
      • RS2:RIP2:192.168.3.3/24(网关必须指向DIP)

lvsnat

配置DirectorServer

安装ipvsadm工具[root@DR ~]# yum install ipvsadm.x86_64 -y

配置外网网卡VIP

[root@DR ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens39

TYPE=Ethernet
NAME=ens39
UUID=f3944544-d878-4812-acc5-383100012bed
DEVICE=ens39
ONBOOT=yes
HWADDR=00:50:56:2B:EB:6D
IPADDR=192.168.7.138
PREFIX=24
GATEWAY=192.168.7.1
DNS1=192.168.7.1

配置内网网卡DIP:

[root@DR ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens37  #DIP无须指定网关

TYPE=Ethernet
NAME=ens37
DEVICE=ens37
ONBOOT=yes
HWADDR=00:50:56:2E:53:C8
IPADDR=192.168.3.1
PREFIX=24

重启网络服务查看网络配置是否生效

[root@DR ~]# systemctl restart network

[root@DR ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
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
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens39: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:50:56:2b:eb:6d brd ff:ff:ff:ff:ff:ff
inet 192.168.7.138/24 brd 192.168.7.255 scope global ens39
valid_lft forever preferred_lft forever
inet6 fe80::3145:7364:a28b:44dd/64 scope link
valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:50:56:2e:53:c8 brd ff:ff:ff:ff:ff:ff
inet 192.168.3.1/24 brd 192.168.3.255 scope global ens37
valid_lft forever preferred_lft forever
inet6 fe80::250:56ff:fe2e:53c8/64 scope link
valid_lft forever preferred_lft forever

打开本机的路由转发功能

[root@DR ~]# cat /proc/sys/net/ipv4/ip_forward # 查看本地路由功能是否打开(1 开启 0 关闭)
0
[root@DR ~]# vim /etc/sysctl.conf # 开启本地路由转发
net.ipv4.ip_forward = 1 将0更改为1即可
[root@DR ~]# sysctl -p # 重新加载配置文件

配置RealServer1

[root@RS1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.3.2
NETMASK=255.255.255.0
GATEWAY=192.168.3.1  #必须指向DIP

安装nginx并查找替换index页面所有的nginx为server1如下图:

server1_page

在vim末行模式输入:%s/nginx/server1/g回车即可

此处是为了便于实验中查看负载均衡效果,实际生产中web页面是N台服务器都相同的。

配置RealServer2

通过虚拟机的克隆功能快速复制RS1的副本,然后做如下修改:

  • hostname改为RS2
  • rm -rf /etc/udev/rules.d/70-persistent-net.rules 删掉此文件重启克隆机系统,在虚拟机配置网卡界面查看mac地址,在网卡配置文件中修改为此mac地址并将IP改为192.168.3.3。
  • 修改index页面为server2

ipvsadm的用法:

管理集群服务:增、改、删;
增、改:
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
删:
ipvsadm -D -t|u|f service-address
-t|u|f:
-t: TCP协议的端口,VIP:TCP_PORT
-u: TCP协议的端口,VIP:UDP_PORT
-f:firewall MARK,是一个数字;
[-s scheduler]:指定集群的调度算法,默认为wlc;
管理集群上的RS:增、改、删;
增、改:
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] #权重为0则不分配流量
删:
ipvsadm -d -t|u|f service-address -r server-address
server-address:
rip[:port]
选项:
lvs类型:
-g: gateway, dr类型
-i: ipip, tun类型
-m: masquerade, nat类型
-w: weight,权重;
清空定义的所有内容:
ipvsadm -C
查看:
ipvsadm -L|l [options]
–numeric, -n:数字格式显示主机地址和端口
–exact: 对输出数据不做单位换算,显示精确值
–connection, -c:显示当前的ipvs连接状况
–stats:统计数据
–rate :速率
保存和重载:
ipvsadm -S = ipvsadm-save
ipvsadm -R = ipvsadm-restore
置零计数器:
ipvsadm -Z [ -t|u|f service-address ]

在DR上进行lvs-nat规则配置:

定义VIP上的80服务为集群服务:

[root@DR ~]# ipvsadm -A -t 192.168.1.171:80 -s rr

添加此集群服务的RS:

[root@DR ~]# ipvsadm -a -t 192.168.1.171:80 -r 192.168.3.2 -m

[root@DR ~]# ipvsadm -a -t 192.168.1.171:80 -r 192.168.3.3 -m

之后查看效果

lvsnatrr1

用另一个客户端去访问

lvsnatrr2

至此LVS-NAT模式下rr算法调度的实验完成。需要注意的是如果在同一计算机上查看效果时,需要将nginx配置文件中的连接超时时间修改为0,我在实验时遇到了win10自带edge浏览器刷新不出rr轮询效果的问题。。。。。。换用360浏览器可以秒切换,不知何故,暂时存疑。

LVS-DR示例

lvs-dr:

dr模型中,各主机上均需要配置VIP,解决地址冲突的方式有三种:

  1. 在前端网关做静态绑定;不可用;
  2. 在各RS使用arptables;比较麻烦;
  3. 在各RS修改内核参数,来限制arp响应和通告的级别;可行;
    限制响应级别:arp_ignore(响应)
    0:默认值,表示可使用本地任意接口上配置的任意地址进行响应;
    1: 仅在请求的目标IP配置在本地主机的接收到请求报文接口上时,才给予响应;
    限制通告级别:arp_announce(通告)
    0:默认值,把本机上的所有接口的所有信息向每个接口上的网络进行通告;
    1:尽量避免向非直接连接网络进行通告;
    2:必须避免向非本网络通告;

实验环境:

lvsDR

  • client客户机IP为:192.168.7.53;
  • director调度服务器配置一块网卡,在ens39上配置dip:192.168.7.141,在ens39:0别名上配置vip:192.168.7.138
  • realserver1 web服务器rip为192.168.7.142,在lo本地环回接口上配置别名vip:192.168.7.138/32 broadcast 192.168.7.138,配置arp_ignore=1 ,arp_announce=2
  • realserver2 web服务器rip为192.168.7.143,在lo本地环回接口上配置别名vip:192.168.7.138/32 broadcast 192.168.7.138,配置arp_ignore=1 ,arp_announce=2

在DR调度服务器上配置ens39

[root@linuxprobe ~]# ifconfig
ens39: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.7.141 netmask 255.255.255.0 broadcast 0.0.0.0
ether 00:50:56:2b:eb:6d txqueuelen 1000 (Ethernet)
RX packets 27872 bytes 15096757 (14.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9458 bytes 1095238 (1.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

ens39:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.7.138 netmask 255.255.255.255 broadcast 192.168.7.138
ether 00:50:56:2b:eb:6d txqueuelen 1000 (Ethernet)

在realserver1 ens33上配置RIP1,lo网卡别名上配置VIP:192.168.7.138,配置arp_ignore=1 ,arp_announce=2

echo “1”>/proc/sys/net/ipv4/conf/lo/arp_ignore
echo “1”>/proc/sys/net/ipv4/conf/all/arp_ignore
echo “2”>/proc/sys/net/ipv4/conf/lo/arp_announce
echo “2”>/proc/sys/net/ipv4/conf/all/arp_announce

在realserver2 ens33上同样配置RIP2,lo网卡别名上配置VIP:192.168.7.138,配置arp_ignore=1 ,arp_announce=2

在DR调度服务器建立集群服务:

定义VIP上的80服务为集群服务:
[root@DR ~]# ipvsadm -A -t 192.168.7.138:80 -s rr
添加此集群服务的RS:
[root@DR ~]# ipvsadm -a -t 192.168.1.138:80 -r 192.168.7.142 -g
[root@DR ~]# ipvsadm -a -t 192.168.7.138:80 -r 192.168.7.143 -g

查看规则:

[root@DR ~]# 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.7.138:80 rr
-> 192.168.7.142:80 Route 1 0 0
-> 192.168.7.143:80 Route 1 0 0

查看效果:

lvsdr1

lvsdr2

本例遇到了用ip addr命令添加的IP莫名其妙丢失的问题,建议IP还是直接写配置文件为妥。

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/101642

发表评论

登录后才能评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班