Linux搭建负载均衡集群——LVS的DR模式的搭建部署

一.LVS模式一:DR

工作原理:

  1. 客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP
  2. 负载均衡器接收到报文后,发现请求的是在ipvs规则中存在的地址和端口,那么它将客户端请求报文的源MAC地址改为自己的MAC地址,目标MAC改为了Real Server的MAC地址,并将此包发送给Real Server
  3. Real Server发现请求报文中的目标MAC地址是自己,就会把此报文接受下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡,直接发送给客户端。

VIP地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP 的网络请求 VIP地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP 的网络请求。

二.实验环境(rhel6.5版本)

1.selinux和iptables状态为disabled
2.Virtual IP:172.25.4.100
3.各主机信息如下:

主机名 IP
server1(调度器) 172.25.83.1
server2(真实服务器) 172.25.83.2
server3(真实服务器) 172.25.83.3

三.DR模式的部署

1.扩展yum源——针对调度器(server1)

[root@server1 ~]# vim /etc/yum.repos.d/rhel-source.repo               #在原来的yum源的基础上添加如下内容

[LoadBalancer]                    //负载均衡
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.83.83/rhel6.5/LoadBalancer
enabled=1
gpgcheck=0

Linux搭建负载均衡集群——LVS的DR模式的搭建部署_第1张图片

[root@server1 ~]# yum   clean  all

[root@server1 ~]# yum   repolist              ##可以看到新的yum源的软件数有3694(负载均衡有4个包);如果不是,代表yum源的搭建有误。

2.安装ipvsadm软件——针对调度器(server1)

[root@server1 ~]# yum   install   ipvsadm   -y

[root@server1 ~]# ipvsadm   -l        ##同ipvsadm  -L命令

[root@server1 ~]# lsmod                  ##lsmod命令:是一个小程序,用来显示文件、proc/modules的信息,也就是显示当前内核模块装载的模块。可以看到ip_vs模块(值的注意的是:在执行lsmod命令之前必须先执行ipvsadm   -l命令来清空ipvsadm策略。)

Linux搭建负载均衡集群——LVS的DR模式的搭建部署_第2张图片

3.将调度器和真实服务器设置在同一个vlan

##server1

[root@server1 ~]# ip   addr   add   172.25.83.100/24   dev   eth0             ##给调度器添加虚拟IP(即客户端访问的IP)
[root@server1 ~]# ip   addr   show
1: lo: mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:99:d9:5c brd ff:ff:ff:ff:ff:ff
    inet 172.25.83.1/24 brd 172.25.83.255 scope global eth0
    inet 172.25.83.100/24 scope global secondary eth0
    inet6 fe80::5054:ff:fe99:d95c/64 scope link
       valid_lft forever preferred_lft forever

##server2

[root@server2 ~]# yum   install   httpd   -y

[root@server2 ~]# /etc/init.d/httpd   start

[root@server2 ~]# cd   /var/www/html/

[root@server2 html]# vim   index.html

www.xin.com -server2

[root@server2 html]# ip   addr   add   172.25.83.100/24   dev   eth0

[root@server2 html]# ip addr show
1: lo: mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:d2:d6:73 brd ff:ff:ff:ff:ff:ff
    inet 172.25.83.2/24 brd 172.25.83.255 scope global eth0
    inet 172.25.83.100/24 scope global secondary eth0
    inet6 fe80::5054:ff:fed2:d673/64 scope link
       valid_lft forever preferred_lft forever

##server3

[root@server3 ~]# yum   install   httpd   -y

[root@server3 ~]# /etc/init.d/httpd   start

[root@server3 ~]# cd   /var/www/html/

[root@server3 html]# vim   index.html

bbs.xin.com -server3

[root@server3 html]# ip   addr   add   172.25.83.100/24   dev   eth0

[root@server3 html]# ip addr show
1: lo: mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:d2:d6:73 brd ff:ff:ff:ff:ff:ff
    inet 172.25.83.2/24 brd 172.25.83.255 scope global eth0
    inet 172.25.83.100/24 scope global secondary eth0
    inet6 fe80::5054:ff:fed2:d673/64 scope link
       valid_lft forever preferred_lft forever

4.添加ipvsadm策略——针对调度器(server1)

  • -A:添加虚拟设备
  • -t:指定ip地址
  • -s:添加指定策略(rr为调度算法:轮循)

[root@server1 ~]# ipvsadm     -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@server1 ~]# ipvsadm   -A   -t   172.25.83.100:80   -s   rr                 ##rr是;轮循算法;10种算法之一(利用ipvsadm --help查看)
[root@server1 ~]# ipvsadm   -a   -t   172.25.83.100:80   -r   172.25.83.2:80   -g
[root@server1 ~]# ipvsadm   -a   -t   172.25.83.100:80   -r   172.25.83.3:80   -g     
[root@server1 ~]# 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.83.100:http rr
  -> server2:http                 Route   1      0          0         
  -> server3:http                 Route   1      0          0  

[root@server1 ~]# ipvsadm   -ln                              ##nl表示不解析   
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.83.100:80 rr
  -> 172.25.83.2:80               Route   1      0          0         
  -> 172.25.83.3:80               Route   1      0          0   

[root@server1 ~]# /etc/init.d/ipvsadm   save                  ##保存ipvsadm策略
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      [  OK  ]

此时我们可以看到ipvsadm的策略保存在/etc/sysconfig/ipvsadm文件中。

[root@server1 ~]# vim   /etc/sysconfig/ipvsadm

 1 -A -t 172.25.83.100:80 -s rr
 2 -a -t 172.25.83.100:80 -r 172.25.83.2:80 -g -w 1          ##w表示权重
 3 -a -t 172.25.83.100:80 -r 172.25.83.3:80 -g -w 1

Linux搭建负载均衡集群——LVS的DR模式的搭建部署_第3张图片

5.在物理机(172.25.83.83)进行测试

在测试之前,先查看下server1,server2,server3虚拟机的MAC地址,以便后续的实验。

##server1

##server2

##server3

在物理机进行测试

[root@foundation83 ~]$ arp   -d   172.25.83.100            ##ARP是地址解析协议;将IP地址映射为物理硬件(MAC)地址;

可以看到这里的100的IP地址指向的并不是指向调度器(即server1),而是server2(后端真实服务器);所以此时使用curl命令访问时看到的server2的内容。

我们用命令清除一下缓存:

重新curl  172.25.83.100,再次查看这个100的IP指向的主机为server3:

Linux搭建负载均衡集群——LVS的DR模式的搭建部署_第4张图片

所以说,现在我们访问100这个IP时,并不能唯一指定调度器,且具有随即性;那么,现在不是我们想要的效果。所以说,此时我们要解决的问题是如何让100这个IP地址唯一地指向调度器(即server1)
抑制server2和server3的ARP:

##server2

[root@server2 html]# yum   install   arptables_jf   -y

[root@server2 html]# 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 html]# arptables   -A   IN   -d   172.25.83.100   -j   DROP         ##禁止100这个IP包发送进来
[root@server2 html]# arptables   -A   OUT   -s   172.25.83.100   -j   mangle   --mangle-ip-s   172.25.83.2         ##允许server2de IP数据包发送给100这个IP
[root@server2 html]# /etc/init.d/arptables_jf   save              ##保存策略
Saving current rules to /etc/sysconfig/arptables:          [  OK  ]

##server3同server2

[root@server3 html]# yum   install   arptables_jf   -y

[root@server3 html]# 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@server3 html]# arptables   -A   IN   -d   172.25.83.100   -j   DROP         ##禁止100这个IP包发送进来
[root@server3 html]# arptables   -A   OUT   -s   172.25.83.100   -j   mangle   --mangle-ip-s   172.25.83.3         ##允许server2de IP数据包发送给100这个IP
[root@server3 html]# /etc/init.d/arptables_jf   save              ##保存策略
Saving current rules to /etc/sysconfig/arptables:          [  OK  ]

物理机测试:

[root@foundation83 ~]# arp   -d   172.25.83.100
[root@foundation83 ~]# arp   -an   |   grep   100
? (172.25.83.100) at on br0
? (192.168.0.100) at 54:99:63:a9:70:66 [ether] on wlp3s0b1
[root@foundation83 ~]# curl 172.25.83.100             ##我们用curl命令获取100这个IP的内容

bbs.xin.com - server3


[root@foundation83 ~]# curl 172.25.83.100

www.xin.com -server2


[root@foundation83 ~]# arp -an | grep 100             ##现在这里的物理硬件地址唯一指向server1
? (172.25.83.100) at 52:54:00:99:d9:5c [ether] on br0

你可能感兴趣的:(Linux搭建负载均衡集群——LVS的DR模式的搭建部署)