目录
LVS-DR(Linux Virtual Server Director Server)工作模式,是生产环境中最常用的一种工作模式,Director Server 作为群集的访问入口,不作为网关使用。节点Director Server 与Real Server 需要在同一个网络中,返回给客户端的数据不需要经过Director Server。为了对整个群集的访问,Dreector Server和Real Server都需要配置VIP地址
LVS-DR模式

实验原理:
用户请求目标网站时,经过dns查询得到目的IP为VIP,目的端口为80,于是客户端和我们VIP,端口80建立连接。当数据包到达VIP所在的局域网时,在同一网段中,两个主机通信靠的是二层的MAC而不是Ip地址,因此需要将IP地址转换为MAC地址,因此会发出apr请求,查询VIP对应的mac地址。(Linux主机有这么一个特性,假设我们的主机上有两块网卡,比如ens33,ens36 当arp请求ens33的mac地址的时候,ens36也会答复,我们在Rel01的lo网卡上配置了VIP,但是我们只想让Director上的网卡来响应我们的这个arp请求。因此就需要更改下我们的一些内核参数,让lo网卡只对本地物理网卡发出的ARP请求做出回应。)
当用户请求到达Director后通过分流算法,发送给后端真实服务器,此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP(Director的ens33的地址)的MAC地址,目标MAC地址为RIP(后端真实服务器地址)的MAC地址
由于负载均衡器和真实服务器在同一个网络中,所以是通过二层来传输。
client的请求被Director转发到达Rel01后,由于Rel01的lo接口配置了VIP(请求中的目标IP正是VIP),所以接收请求并处理。处理完成之后,将响应报文通过lo接口传送给ens33网卡(这个网卡一般指和调度器在一个网段的网卡)然后向外发出。此时的源IP地址为VIP,目标IP为CIP。(如果将源地址为VIP将数据包发送出去,那么最终交换机上会产生两条VIP对应的mac地址记录,一条是Director的mac地址记录,还有一条是Rel01的mac地址记录,这将会导致真正的VIP无法接收到请求。此处要配置arp_announce,目的是为了修改源ip的目的地址。
配置arp_announce=2,选择该主机发送网卡上最合适的ens33的ip地址作为arp请求的源IP地址。
响应报文通过二层链路传输,最终送达至客户端。
①修改负载均衡器名称:
- [root@zwb_lvs01 ~]# hostnamectl set-hostname zwb_DR1 ####改名
- [root@zwb_lvs01 ~]# su
- [root@zwb_dr1 ~]#
-
- [root@zwb_dr1 ~]# systemctl stop firewalld ####关闭防火墙 、安全中心
- [root@zwb_dr1 ~]# systemctl disable firewalld
- [root@zwb_dr1 ~]# setenforce 0
- [root@zwb_dr1 ~]# cd /etc/sysconfig/network-scripts/ ###设置虚拟IP,VIP信息
- [root@zwb_dr1 ~]# cp -p ifcfg-ens33 ifcfg-ens33:0
- [root@zwb_dr1 network-scripts]# vim ifcfg-ens33:0
-
- TYPE=Ethernet
- PROXY_METHOD=none
- BROWSER_ONLY=no
- BOOTPROTO=static
- DEFROUTE=yes
- IPV4_FAILURE_FATAL=no
- IPV6INIT=yes
- IPV6_AUTOCONF=yes
- IPV6_DEFROUTE=yes
- IPV6_FAILURE_FATAL=no
- IPV6_ADDR_GEN_MODE=stable-privacy
- NAME=ens33:0
- DEVICE=ens33:0
- ONBOOT=yes
- IPADDR=192.168.159.100 ### VIP地址
- NETMASK=255.255.255.255 ### VIP的子网掩码为 255.255.255.255
- #GATEWAY=192.168.159.2
- #DNS1=114.114.114.114
- IPV6_PRIVACY=no
-
- [root@zwb_dr1 network-scripts]# systemctl restart network ## 重启网络服务
- [root@zwb_dr1 network-scripts]# ifconfig
- ens33: flags=4163
mtu 1500 - inet 192.168.159.159 netmask 255.255.255.0 broadcast 192.168.159.255
- inet6 fe80::dfec:5365:4cbb:4773 prefixlen 64 scopeid 0x20<link>
- ether 00:0c:29:ce:ea:1e txqueuelen 1000 (Ethernet)
- RX packets 7662 bytes 9104872 (8.6 MiB)
- RX errors 0 dropped 0 overruns 0 frame 0
- TX packets 3429 bytes 277942 (271.4 KiB)
- TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
-
- ens33:0: flags=4163
mtu 1500 - inet 192.168.159.100 netmask 255.255.255.255 broadcast 192.168.159.100
- ether 00:0c:29:ce:ea:1e txqueuelen 1000 (Ethernet)
-
- [root@zwb_dr1 ~]# yum -y install epel-release.noarch ##安装yum仓库扩展源
-
- [root@zwb_dr1 ~]# yum -y install ipvsadm.x86_64 ##安装 ipvsadm
-
- [root@zwb_dr1 ~]# modprobe ip_vs ## 加载ipvsadm
- [root@zwb_dr1 ~]# cat /proc/net/ip_vs
-
- [root@zwb_dr1 ~]# ipvsadm-save > /etc/sysconfig/ipvsadm ## 保存ipvsadm的规则(先保存规则不
- ##然无法启动)
- [root@zwb_dr1 network-scripts]# systemctl start ipvsadm.service ## 启动ipvsadm
-
- ##配置ipvsadm,添加虚拟主机
- [root@zwb_dr1 network-scripts]# ipvsadm -C ## 清空ipvsadm规则
- [root@zwb_dr1 network-scripts]# ipvsadm -A -t 192.168.159.100:80 -s rr ## 添加虚虚拟主机
- ## ip地址为VIP
-
- [root@zwb_dr1 ~]# ipvsadm -a -t 192.168.159.100:80 -r 192.168.159.10:80 -g ##在虚拟主机中添
- ##加了一个真实服务器的ip
- ## -g 表示选用DR模式
- [root@zwb_dr1 ~]# ipvsadm -a -t 192.168.159.100:80 -r 192.168.159.11:80 -g
- ##不写-g默认的也是DR
-
- [root@zwb_dr1 ~]# ipvsadm-save > /etc/sysconfig/ipvsadm ## 保存ipvsadm规则
-
- [root@zwb_dr1 ~]# ipvsadm -ln ### 查看ipvsadm规则
- IP Virtual Server version 1.2.1 (size=4096)
- Prot LocalAddress:Port Scheduler Flags
- -> RemoteAddress:Port Forward Weight ActiveConn InActConn
- TCP 192.168.159.100:80 rr
- -> 192.168.159.10:80 Route 1 0 0
- -> 192.168.159.11:80 Route 1 0 0
-
- ####调整proc的响应参数
- [root@zwb_dr1 ~]# vim /etc/sysctl.conf
-
- net.ipv4.ip_forward = 0
- net.ipv4.conf.all.send_redirects = 0
- net.ipv4.conf.default.send_redirects = 0
- net.ipv4.conf.ens33.send_redirects = 0
-
-
-
-
-
-
- [root@zwb_web1 ~]# cd /etc/sysconfig/network-scripts/
- [root@zwb_web1 ~]# cp -p ifcfg-lo ifcfg-lo:0
- [root@zwb_web1 network-scripts]# vim ifcfg-lo:0
- DEVICE=lo:0
- IPADDR=192.168.159.100
- NETMASK=255.255.255.255
- ONBOOT=yes
- NAME=lo:0
-
- [root@zwb_web1 network-scripts]# systemctl restart network
-
-
- [root@zwb_web1 ~]# yum -y install httpd
- [root@zwb_web1 ~]# systemctl start httpd
-
- [root@zwb_web1 ~]# vim /var/www/html/index.html ##修改主页面内容
- this is web1
-
-
- ##路由禁锢
- [root@zwb_web1 ~]# route add -host 192.168.159.100 dev lo:0
- [root@zwb_web1 ~]# vim /etc/sysctl.conf
- net.ipv4.conf.all.arp_ignore=1
- net.ipv4.conf.all.arp_announce=2
- net.ipv4.conf.lo.arp_ignore=1
- net.ipv4.conf.lo.arp_announce=2
-
-
-
-
-
-
-
- [root@zwb_web2 ~]# cd /etc/sysconfig/network-scripts/
- [root@zwb_web2 ~]# cp -p ifcfg-lo ifcfg-lo:0
- [root@zwb_web2 network-scripts]# vim ifcfg-lo:0
- DEVICE=lo:0
- IPADDR=192.168.159.100
- NETMASK=255.255.255.255
- ONBOOT=yes
- NAME=lo:0
-
- [root@zwb_web2 network-scripts]# systemctl restart network
-
-
- [root@zwb_web2 ~]# yum -y install httpd
- [root@zwb_web2 ~]# systemctl start httpd
-
- [root@zwb_web2 ~]# vim /var/www/html/index.html ##修改主页面内容
- this is web2
- ##路由禁锢
- [root@zwb_web2 ~]# route add -host 192.168.159.100 dev lo:0
- [root@zwb_web1 ~]# vim /etc/sysctl.conf
- net.ipv4.conf.all.arp_ignore=1
- net.ipv4.conf.all.arp_announce=2
- net.ipv4.conf.lo.arp_ignore=1
- net.ipv4.conf.lo.arp_announce=2
-
-
设置网络为NAT模式

配置固定ip地址


刷新

由于浏览器有cookie,可以先清除cookie再刷新,出结果比较快点。
注:本实验使用的是httpd作为真实服务器,也可使用nginx的替换httpd
1、配置web1
- ##编译安装 nginx ,之前博客有详细安装过程
-
- ##设置主页内容,便于分辨验证结果
-
- [root@zwb_web1 network-scripts]# cat /usr/local/nginx/html/index.html
- <head>
Welcome to nginx! - body {
- width: 35em;
- margin: 0 auto;
- font-family: Tahoma, Verdana, Arial, sans-serif;
- }
wo shi web1 !!!
#### 只修改此行If you see this page, the nginx web server is successfully installed and
- working. Further configuration is required.
-
For online documentation and support please refer to
- ........................................
-
- [root@zwb_web1 ~]# cd /etc/sysconfig/network-scripts/
- [root@zwb_web1 ~]# cp -p ifcfg-lo ifcfg-lo:0
- [root@zwb_web1 network-scripts]# vim ifcfg-lo:0
- DEVICE=lo:0
- IPADDR=192.168.159.100
- NETMASK=255.255.255.255
- ONBOOT=yes
- NAME=lo:0
-
- [root@zwb_web1 network-scripts]# systemctl restart network
-
-
- ###修改网卡配置,将网关指向负载均衡器的ens33的ip 地址
- [root@zwb_web1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
- TYPE=Ethernet
- PROXY_METHOD=none
- BROWSER_ONLY=no
- BOOTPROTO=static
- DEFROUTE=yes
- IPV4_FAILURE_FATAL=no
- IPV6INIT=yes
- IPV6_AUTOCONF=yes
- IPV6_DEFROUTE=yes
- IPV6_FAILURE_FATAL=no
- IPV6_ADDR_GEN_MODE=stable-privacy
- NAME=ens33
- UUID=d78d9180-d8c7-4d65-86fb-5364e4cf736b
- DEVICE=ens33
- ONBOOT=yes
- IPV6_PRIVACY=no
- DNS1=114.114.114.114
- IPADDR=192.168.159.11
- PREFIX=24
- GATEWAY=192.168.159.159 ####修改
-
- ##路由禁锢
- [root@zwb_web1 ~]# route add -host 192.168.159.100 dev lo:0
- [root@zwb_web1 ~]# vim /etc/sysctl.conf
- net.ipv4.conf.all.arp_ignore=1
- net.ipv4.conf.all.arp_announce=2
- net.ipv4.conf.lo.arp_ignore=1
- net.ipv4.conf.lo.arp_announce=2
2、web2 配置与web1的配置一样
验证:

验证时会出现轮询很慢的情况:
通过watch -n 1 ipvsadm -ln 查看活跃数。当活跃数均为0,此时点击刷新便可轮询,否则刷新无轮询结果。
