记录LVS搭建,DR模式,永久生效

DR模式
 
DR原理及配置必须会
(1).集群技术的分类
  集群技术主要分为三大类:负载均衡(Load Balance)集群,简称LB集群;高可用(High Availability)集群,简称 HA 集群;高性能计算(High Perfermance Computing)集群,简称 HPC 集群。
(2).常见的LB集群实现手段
  而常见的LB集群实现手段为:硬件实现的F5负载均衡器;软件实现的LVS(4层,传输层)和Nginx(7层,应用层)。其中,LVS是基于iptables实现(所以使用与iptables类似),由国内开发的开源软件,其性能优于Nginx,但只能实现4层。
(3).LVS的模式和NAT工作原理
  LVS提供了三种包转发方式:NAT(网络地址映射)、IP Tunneling(IP隧道)、Direct Rounting(直接路由),分别对应NAT模式、TUN模式、DR模式。不同的转发方式决定了不同的集群网络结构。
 1)NAT模式介绍
  NAT:网络地址转换;DNAT:目标地址转换,改变的是目标地址;SNAT:源地址转换,改变的是源地址;LVS-NAT:使用SNAT和DNAT完成报文的转发。
  NAT方式可支持任何的操作系统,以及私有网络,并且只需一个Internet IP地址,但是整个系统的性能受到限制。因为执行NAT每次需要重写包,有一定的延迟;另外,大部分应用有80%的数据是从服务器流向客户机,也就是用户的请求非常短,而服务器的回应非常大,对负载均衡器形成很大压力,成为了新的瓶颈。
 2)TUN模式介绍
  director(分发器)分配请求到不同的real server,然后real server处理请求后直接回应给用户,这样director负载均衡器仅需处理客户机与服务器的一半连接。IP Tunneling技术极大地提高了director的调度处理能力,同时也极大地提高了系统能容纳的最大节点数,可以超过100个节点。real server可以在任何LAN或WAN上运行,这意味着允许地理上的分布,这在灾难恢复中有重要意义。服务器必须拥有正式的IP地址用于与客户机直接通信,并且所有服务器必须支持IP隧道协议。
 3)DR模式介绍(最常用的模式)
  与TUN模式类似,负载均衡器仅处理一半的连接,避免了新的性能瓶颈,同样增加了系统的可伸缩性。Direct Routing与IP Tunneling相比,没有IP封装的开销,但由于采用物理层(修改MAC地址)技术,所有服务器都必须在一个物理网段。
 4)NAT工作原理
  客户端访问调度器时,调度器通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
  简单来说可以分为四步:第一步、客户端请求访问,源地址:CIP,目标地址:VIP;第二步、请求报文到达负载均衡器,源地址:CIP,目标地址:RIP;第三步、Real Server接收到报文,处理并响应(回头了),源地址:RIP,目标地址:CIP;第四步、负载均衡器收到报文,根据之前的转发修改记录还原报文,源地址VIP,目标地址CIP。
  CIP:客户端的IP;VIP:虚拟IP,对外公网IP,负载均衡器(Director)的外网IP;DIP:负载均衡器(Director)的内网IP,与服务器交互的IP;RIP:真实服务器的IP。
一、DR模式原理
    1、首先,客户端CIP请求调度器的VIP;
    2、调度器收到包之后,按照调度算法选择一台真实服务器,调度器将该数据包的目的mac地址改成真实服务器的mac地址,并通过内网的交换机将包发送给真实服务器;(此过程包中的源和目的IP并未发生变化,cip---》 vip)
    3、真实服务器接收到数据包之后,会进行解封装,会验证数据链路层的目标mac地址是不是自己的;如果是,真实服务器会将包向上传给网络层,此时网络层验证目标IP是不是自己的,因为此时包中的目的IP是VIP,所以真实服务器为了有资格继续向上解封装,所以真实服务器上需要配置VIP;(此处还有一个arp抑制问题)
    4、真实服务器处理完数据包之后,需要给客户端应答(这时包中的源IP是VIP,目标IP是CIP),回应的报文是无需经过调度器的,直接回给客户端。
 
      vip一般配置在loopback接口上,并且要做arp抑制,为了防止和调度器的VIP冲突,同时也让真实服务器有收报文的资格;也让真实服务器给客户端回包时能在源地址处封装上VIP。
      
二、LVS DR模式的特点
    1、所有的集群节点和调度器必须在同一个物理网段(因为该模式修改的是mac地址,位于二层)
    2、最好能够在rs上配置公网IP(防止回包时候的网关成为架构中的瓶颈)
    3、所有的真实服务器都要在lo上绑定VIP,目的是验证通过目标地址不是RIP的数据包
    4、因为所有节点都有VIP,那么为了不冲突,需要在RS上做arp抑制处理
    5、所有的RS如果没有公网IP,那么他们也需要配置网关,才能回包,但是网关不是指向调度器的DIP
    6、DR模式调度器不需要开启包转发
 
 
此实验实验环境开机重启不会保存
三、DR实验:
    1、实验环境:需要三台主机:都单网卡即可
        Director        
                ens33 ——172.16.0.155/16   ——   DIP
                ens33:0  —— 172.16.0.156/32    ——   VIP
        RS1:172.16.0.157/16        lo:0  172.16.0.156/32   
        RS2:172.16.0.158/16        lo:0  172.16.0.156/32
            
    2、调度器的配置
        a、配置VIP(配置在物理网卡的子接口上)
        [root@director ~]# ifconfig ens33:0 172.16.0.156 netmask 255.255.255.255
        b、装包
        [root@director ~]# yum install ipvsadm -y
        c、编写调度规则
        [root@director ~]# ipvsadm -C
        [root@director ~]# ipvsadm -L
        IP Virtual Server version 1.2.1 (size=4096)
        Prot LocalAddress:Port Scheduler Flags
          -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
        [root@director ~]# ipvsadm -At 172.16.0.156:80 -s rr
        [root@director ~]# ipvsadm -at 172.16.0.156:80 -r 172.16.0.157:80
        [root@director ~]# ipvsadm -at 172.16.0.156:80 -r 172.16.0.158:80 -g     //-g不加也是默认的DR模式
        
        [root@director ~]# ipvsadm -Ln
                IP Virtual Server version 1.2.1 (size=4096)
                Prot LocalAddress:Port Scheduler Flags
                  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
                TCP  172.16.0.156:80 rr
                  -> 172.16.0.157:80              Route   1      0          0         
                  -> 172.16.0.158:80              Route   1      0          0
 
    3、真实服务器的配置
        a、安装配置apache
        b、绑定VIP(配置在lo网卡的子接口上)
            [root@web1 ~]# ifconfig lo:0 172.16.0.156 netmask 255.255.255.255   //一定要是四个255,自己一个网段,否则网络就不通了
            
            [root@web2 ~]# ifconfig lo:0 172.16.0.156 netmask 255.255.255.255    
            
        c、抑制ARP
            [root@web1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
            [root@web1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore            
            [root@web1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
            [root@web1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
            
            [root@web2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
            [root@web2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
            [root@web2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
            [root@web2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
            
    4、客户端测试
    选择windows(可能只轮询一次)或者第四台linux
        [root@node13 ~]# curl 172.16.0.156
            web158
        [root@node13 ~]# curl 172.16.0.156
            web157
        [root@node13 ~]# curl 172.16.0.156
            web158
        [root@node13 ~]# curl 172.16.0.156
            web157
 

 永久生效:
DR模式:
实验环境:
 
192.168.56.114
192.168.56.188
director(调度器)
VIP
192.168.56.110
rs1,作为110web
192.168.56.115
rs2,作为115web
操作系统:
CentOS Linux release 7.8.2003 (Core)
 
条件:
关闭firewalld,selinux
 
过程:
director:
 
编辑
[root@director ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s8: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=enp0s8:0
UUID=3fb9b76a-3d11-4108-9731-71029a28af55
DEVICE=enp0s8:0
ONBOOT=yes
IPADDR=192.168.56.188
PREFIX=32
 
重启网卡
 
[root@director ~]# systemctl restart network
[root@director ~]# ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fe80::f9e8:5d71:e6e4:8965  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:0f:17:7f  txqueuelen 1000  (Ethernet)
        RX packets 252  bytes 79645 (77.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 245  bytes 20222 (19.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.56.114  netmask 255.255.255.0  broadcast 192.168.56.255
        inet6 fe80::55d6:f40f:1dc5:e17  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:f7:32:2f  txqueuelen 1000  (Ethernet)
        RX packets 787  bytes 78644 (76.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 606  bytes 83350 (81.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
enp0s8:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.56.188  netmask 255.255.255.255  broadcast 192.168.56.188
        ether 08:00:27:f7:32:2f  txqueuelen 1000  (Ethernet)
 
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
下载安装ipvsadm
yum insstall ipvsadm -y
[root@director ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
 
加入规则:
root@director ~]# ipvsadm -At 192.168.56.188:80 -s rr
[root@director ~]# ipvsadm -at 192.168.56.188:80 -r 192.168.56.110:80
[root@director ~]# ipvsadm -at 192.168.56.188:80 -r 192.168.56.115:80
[root@director ~]# 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.56.188:80 rr
  -> 192.168.56.110:80            Route   1      0          0         
  -> 192.168.56.115:80            Route   1      0          0
 
永久保存
[root@director ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
查看
[root@director ~]# cat  /etc/sysconfig/ipvsadm
-A -t director:http -s rr
-a -t director:http -r 192.168.56.110:http -g -w 1
-a -t director:http -r 192.168.56.115:http -g -w 1
 
|
|
|
 
web端:
以一个为例
下载httpd
[root@rs1 ~]# yum install httpd -y
systemctl start httpd
systemctl enable httpd
]# echo 110web > /var/www/html/index.html
 
抑制ARP
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
 
~]# vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
 net.ipv4.conf.all.arp_announce=2
~]# sysctl -p
 
绑定VIP
[root@rs1 network-scripts]# cat ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.56.188
NETMASK=255.255.255.255
NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# # you can change this to something else (255.255.255.255, for example)
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback:0
 
重启网卡:
[root@rs1 network-scripts]# systemctl restart network
[root@rs1 network-scripts]# ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fe80::f9e8:5d71:e6e4:8965  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:85:8c:d1  txqueuelen 1000  (Ethernet)
        RX packets 247  bytes 22840 (22.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 309  bytes 26525 (25.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.56.110  netmask 255.255.255.0  broadcast 192.168.56.255
        inet6 fe80::55d6:f40f:1dc5:e17  prefixlen 64  scopeid 0x20<link>
        inet6 fe80::77d7:31ad:b304:4fae  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:8e:42:94  txqueuelen 1000  (Ethernet)
        RX packets 1445  bytes 146558 (143.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 464  bytes 50043 (48.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 32  bytes 2592 (2.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 32  bytes 2592 (2.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.56.188  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)
 
客户端访问:
重启也生效
 
 
posted @ 2020-07-22 20:37  5444de  阅读(508)  评论(0编辑  收藏  举报