基于linux下lvs之DR模型的架构

实验环境: 物理主机:172.25.26.250
                  server1: ipvsadm    172.25.26.2
                  server2:  httpd        172.25.26.3
                  server3:  httpd        172.25.254.4

LVSLinux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。ld解决了lvs的健康检查w加权

Virtual Server via Direct Routing(VS-DR)

优点:和VS-TUN一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器

LVS-DR模型实现负载均衡的工作方式

1, 首先用户用CIP请求VIP, 
2, 根据上图可以看到,不管是Director Server还是Real Server上都需要配置VIP,那么当用户请求到达我们的集群网络的前端路由器的时候,请求数据包的源地址为CIP目标地址为VIP,此时路由器会发广 播问谁是VIP,那么我们集群中所有的节点都配置有VIP,此时谁先响应路由器那么路由器就会将用户请求发给谁,这样一来我们的集群系统是不是没有意义 了,那我们可以在网关路由器上配置静态路由指定VIP就是Director Server,或者使用一种机制不让Real Server 接收来自网络中的ARP地址解析请求,这样一来用户的请求数据包都会经过Director Servre,
3,当Director Server收到用户的请求后根据此前设定好的调度算法结果来确定将请求负载到某台Real Server上去,假如说此时根据调度算法的结果,会将请求负载到Real Server 1上面去,此时Director Server 会将数据帧中的目标MAC地址修改为Real Server1的MAC地址,然后再将数据帧发送出去,
4,当Real Server1 收到一个源地址为CIP目标地址为VIP的数据包时,Real Server1发现目标地址为VIP,而VIP是自己,于是接受数据包并给予处理,当Real Server1处理完请求后,会将一个源地址为VIP目标地址为CIP的数据包发出去,此时的响应请求就不会再经过Director Server了,而是直接响应给用户

server1

[root@server1 html]# /etc/init.d/varnish stop
Stopping Varnish Cache:                                    [  OK  ]
[root@server1 html]# chkconfig varnish off


[root@server1 html]# cat /etc/yum.repos.d/rhel-source.repo
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.2.250/source6.5
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[HighAvailability]
name=HighAvailability
baseurl=http://172.25.2.250/source6.5/HighAvailability
gpgcheck=0

[LoadBalancer ]
name=LoadBalancer
baseurl=http://172.25.2.250/source6.5/LoadBalancer
gpgcheck=0

[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.2.250/source6.5/ResilientStorage
gpgcheck=0

[ScalableFileSystem]
name=ScalableFileSystem
baseurl=http://172.25.2.250/source6.5/ScalableFileSystem
gpgcheck=0
yum clean all
yum repolist

基于linux下lvs之DR模型的架构_第1张图片基于linux下lvs之DR模型的架构_第2张图片基于linux下lvs之DR模型的架构_第3张图片

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规则

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]          --查看定义的规则

[root@server1 html]# yum install ipvsadm -y
[root@server1 html]# ipvsadm -L

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@server1 html]# ipvsadm -A -t 172.25.26.100:80 -s rr   //-s 策略,rr 轮叫
[root@server1 html]# ipvsadm -a -t 172.25.26.100:80 -r 172.25.26.3:80 -g  //-r算法
[root@server1 html]# ipvsadm -a -t 172.25.26.100:80 -r 172.25.26.4:80 -g

[root@server1 html]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.2.100:80 rr
  -> 172.25.26.3:80                Route   1      0          0         
  -> 172.25.26.4:80                Route   1      0          0         
[root@server1 html]# ip addr add 172.25.26.100/24 dev eth0

[root@server1 html]# yum install ipvsadm -y
[root@server1 html]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@server1 html]# ipvsadm -A -t 172.25.26.100:80 -s rr   //-s 策略,rr 轮叫
[root@server1 html]# ipvsadm -a -t 172.25.26.100:80 -r 172.25.26.3:80 -g  //-r算法
[root@server1 html]# ipvsadm -a -t 172.25.26.100:80 -r 172.25.26.4:80 -g
[root@server1 html]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.26.100:http rr
  -> server3:http                 Route   1      0          0         
  -> server4:http                 Route   1      0          0  
[root@server1 html]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.2.100:80 rr
  -> 172.25.26.3:80                Route   1      0          0         
  -> 172.25.26.4:80                Route   1      0          0         
[root@server1 html]# ip addr add 172.25.26.100/24 dev eth0

基于linux下lvs之DR模型的架构_第4张图片

物理机:

[root@foundation26 ~]# curl 172.25.26.100
^C

server2:

[root@server2 ~]# ip addr add 172.25.26.100 dev eth0

server3:

[root@server3 ~]# ip addr add 172.25.26.100 dev eth0

物理机:

[root@foundation26 ~]# curl www.westos.org
www.westos.org - server2
[root@foundation26 ~]# curl www.westos.org
www.westos.org - server3
//此时轮叫成功,但这只是暂时的,这是有三个主机的ip同为172.25.2.100,只是恰好ia连接选择server1而已,我们可以做一个测试

物理机上:

[root@foundation26 ~]# arp -d 172.25.26.100    //清楚解析的缓存,arpwei地址解析协议
[root@foundation26 ~]# curl www.westos.org    //重新响应
www.westos.org - server2
[root@foundation26 ~]# curl www.westos.org
www.westos.org - server2                     //两次均为server2
[root@foundation26 ~]# arp -an |grep 100      //查看解析地址的MAC地址

server2:

[root@server26 ~]# ip addr


//两者比对相同,说明此时是直接访问服务其server2的,而未访问LVS服务器server1。

解决方法,限制对server2和server3的172.25.26.100ip访问。
对两台主机

[root@server2 ~]# yum install arptables_jf -y
[root@server2 ~]# arptables -L    //三个链表
Chain IN (policy ACCEPT)
target     source-ip            destination-ip       source-hw          destination-hw     hlen   op         hrd        pro       

Chain OUT (policy ACCEPT)
target     source-ip            destination-ip       source-hw          destination-hw     hlen   op         hrd        pro       

Chain FORWARD (policy ACCEPT)
target     source-ip            destination-ip       source-hw          destination-hw     hlen   op         hrd        pro       
[root@server2 ~]# arptables -A IN -d 172.25.26.100 -j DROP     
[root@server2 ~]# arptables -A OUT -s 172.25.26.100 -j mangle --mangle-ip-s 172.25.26.3
[root@server2 etc]# /etc/init.d/arptables_jf save

Saving current rules to /etc/sysconfig/arptables:          [  OK  ]
[root@server2 etc]# /etc/init.d/arptables_jf start
Flushing all current rules and user defined chains:        [  OK  ]
Clearing all current rules and user defined chains:        [  OK  ]
Applying arptables firewall rules:                         [  OK  ]

物理机:

[root@foundation26 ~]# arp -d 172.25.26.100
[root@foundation26 ~]# curl www.westos.org
www.westos.org - server2
[root@foundation26 ~]# curl www.westos.org
www.westos.org - server3
[root@foundation26 ~]# curl www.westos.org
www.westos.org - server2
[root@foundation26 ~]# curl www.westos.org
www.westos.org - server3
//此时轮叫成功。

物理机:
[root@foundation26 ~]# curl 172.25.26.100
^C

server2:
[root@server26 ~]# ip addr add 172.25.26.100 dev eth0
server3:
[root@server36 ~]# ip addr add 172.25.26.100 dev eth0

物理机:
[root@foundation26 ~]# curl www.westos.org
www.westos.org - server2
[root@foundation26 ~]# curl www.westos.org
www.westos.org - server3
//此时轮叫成功,但这只是暂时的,这是有三个主机的ip同为172.25.2.100,只是恰好ia连接选择server1而已,我们可以做一个测试
物理机上:
[root@foundation26 ~]# arp -d 172.25.26.100    //清楚解析的缓存,arpwei地址解析协议
[root@foundation26 ~]# curl www.westos.org    //重新响应
www.westos.org - server2
[root@foundation26 ~]# curl www.westos.org
www.westos.org - server2                     //两次均为server2
[root@foundation26 ~]# arp -an |grep 100      //查看解析地址的MAC地址

server2:
[root@server26 ~]# ip addr


//两者比对相同,说明此时是直接访问服务其server2的,而未访问LVS服务器server1。

解决方法,限制对server2和server3的172.25.26.100ip访问。
对两台主机
[root@server2 ~]# yum install arptables_jf -y
[root@server2 ~]# arptables -L    //三个链表
Chain IN (policy ACCEPT)
target     source-ip            destination-ip       source-hw          destination-hw     hlen   op         hrd        pro       

Chain OUT (policy ACCEPT)
target     source-ip            destination-ip       source-hw          destination-hw     hlen   op         hrd        pro       

Chain FORWARD (policy ACCEPT)
target     source-ip            destination-ip       source-hw          destination-hw     hlen   op         hrd        pro       
[root@server2 ~]# arptables -A IN -d 172.25.26.100 -j DROP     
[root@server2 ~]# arptables -A OUT -s 172.25.26.100 -j mangle --mangle-ip-s 172.25.26.3
[root@server2 etc]# /etc/init.d/arptables_jf save
Saving current rules to /etc/sysconfig/arptables:          [  OK  ]
[root@server2 etc]# /etc/init.d/arptables_jf start
Flushing all current rules and user defined chains:        [  OK  ]
Clearing all current rules and user defined chains:        [  OK  ]
Applying arptables firewall rules:                         [  OK  ]

物理机:
[root@foundation26 ~]# arp -d 172.25.26.100
[root@foundation26 ~]# curl www.westos.org
www.westos.org - server2
[root@foundation26 ~]# curl www.westos.org
www.westos.org - server3
[root@foundation26 ~]# curl www.westos.org
www.westos.org - server2
[root@foundation26 ~]# curl www.westos.org
www.westos.org - server3
//此时轮叫成功。

server1

 cd /root
   ls
ldirectord-3.9.5-3.1.x86_64.rpm

基于linux下lvs之DR模型的架构_第5张图片基于linux下lvs之DR模型的架构_第6张图片
     yum install ldirectord-3.9.5-3.1.x86_64.rpm
    rpm -ql ldirectord
    cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf   /etc/ha.d
    cd /etc/ha.d
    ls
     vim ldirectord.cf

基于linux下lvs之DR模型的架构_第7张图片
   83  ipvsadm -C
   84  ipvsadm -l
   85  /etc/init.d/ldirectord   start
   86  ipvsadm -l
   87  vim /etc/httpd/conf/httpd.conf
   89  /etc/init.d/httpd    restart
   90  cd /var/www/html
   91  ls
   92  rm -fr *
   93  vim index.html
   94  ipvsadm -l

基于linux下lvs之DR模型的架构_第8张图片

172.25.254.2:
 /etc/init.d/httpd stop
   34  /etc/init.d/httpd start
   35  /etc/init.d/httpd stop
   36  /etc/init.d/httpd start
172.25.254.3
 /etc/init.d/httpd stop
   34  /etc/init.d/httpd start
   35  /etc/init.d/httpd stop
   36  /etc/init.d/httpd start

物理机:

[root@foundation55 安装包]# curl 172.25.254.100
bbs.westos.org
[root@foundation55 安装包]# curl 172.25.254.100
www.westos.org----server2
[root@foundation55 安装包]# curl 172.25.254.100
bbs.westos.org
[root@foundation55 安装包]# curl 172.25.254.100
bbs.westos.org
[root@foundation55 安装包]# curl 172.25.254.100
此站点正在维修


基于linux下lvs之DR模型的架构_第9张图片

基于linux下lvs之DR模型的架构_第10张图片

基于linux下lvs之DR模型的架构_第11张图片

基于linux下lvs之DR模型的架构_第12张图片

基于linux下lvs之DR模型的架构_第13张图片

基于linux下lvs之DR模型的架构_第14张图片

基于linux下lvs之DR模型的架构_第15张图片

基于linux下lvs之DR模型的架构_第16张图片

基于linux下lvs之DR模型的架构_第17张图片

基于linux下lvs之DR模型的架构_第18张图片

基于linux下lvs之DR模型的架构_第19张图片

 

你可能感兴趣的:(基于linux下lvs之DR模型的架构)