高并发与负载均衡——LVS:DR模型搭建实战

一、LVS-DR模型搭建拓扑图

 

图1

搭建结构:笔记本访问VIP:192.168.9.100(LVS),node01为LVS,node02和node03作为RealServer承受均衡负载。192.168.9.1为vmnet8的网卡(windows系统中的网卡),192.168.9.2作为虚拟局域网络的网关(也是NAT服务器的IP地址,这个NAT服务器可以发挥路由器的作用)。

 

二、搭建所需技术

1.RealServer隐藏VIP的方法:对外隐藏,对内可见

图2

步骤概括:将VIP地址配置在RealServer的lo网卡接口上,不配置在eth0上,这样外网数据包通过网卡流向eth0接口,由于我们将arp_ignore配置成1以及arp_announce配置成2,又由于eth0上没有配置VIP,所以外网的CIP_VIP数据包不会由eth0来处理,相当于RealServer的VIP对外网不可见,只对自己可见,实现了对外隐藏,对内可见了。

 

2.与LVS打交道的接口软件指令——ipvsadm

 

图3

解释:由于LVS属于linux内核,我们不能直接和内核打交道,所以只能下载一个ipvsadm的程序来间接的与linux内核打交道。

 

3.LVS调度算法

 

图4

关于动态调度算法的解释:静态就不说了,有加权Round Robin和Round Robin等。那么动态是怎么个动态呢,我们知道LVS是不建立三次握手以及四次挥手的,它不会干预三次握手,数据传输以及四次挥手的过程。那么他就不会知道RealServer的连接数是多少,从而动态分配负载。答案在于:LVS虽然不建立握手,但是它会窥视握手和数据传输以及挥手的整个过程!!并记录整个过程以便将后续数据正确的发送给对应的RealServer。它知道Client和RealServer的所有动作,但是只是负责转发,不做任何干预。而窥视实现是LVS可以窥视数据包TCP层的数据包状态码(图5的FLAG标志位)。状态码会记录这次的数据包是握手包,挥手包还是数据传输包,一旦发现是握手,则LVS会对于该RealServer的连接数++,一旦发现时分手包,则- -。从而实现了对负载连接数量的监视,也就可以实现动态负载分配。

 

4.指令配置

配置下图标红的指令就可以,该配置是配置LVS应该监视哪些端口的数据包并做负载均衡

 

ipsvadm的指令集合

5.配置步骤概况

\

三、配置步骤详解

(1)确保LVS,RealServer在同一网段下 :192.168.88.0

(2)为LVS(node01)配置VIP,在eth0的接口下配置

      指令1:ifconfig eth0:2(随便一个非0数字表示为eth0的子接口,我这里用2)  192.168.88.100/24

      指令2:ifconfig eth0:2(随便一个非0数字表示为eth0的子接口,我这里用2)  192.168.88.100  netmask 255.255.255.0

      我这里使用100作为当前网段的VIP,可以采用3~255之间任意与其他IP不冲突的IP,子网掩码就是255.255.255.0,指令1与指令2意思是一样的,因为三个255是3*8=24个1,所以指令2也可以用指令1的方式来配置子网掩码。

(3)为LVS配置地址转发功能,也就是分配负载功能

      指令:echo "1"  > /proc/sys/net/ipv4/ip_forward

      解释:操作系统默认收到数据包CIP_VIP,如果发现地址不是自己的DIP(我们的LVS地址DIP是192.168.88.123,是配置在eth0接口下的,而VIP是配置在eth0子接口下的,所以对外网我们LVS地址是DIP而不是VIP)会丢弃掉数据包。而ipv4下的ip_ forward属性则是描述在遇到这种情况下该如何处理的。0是默认值,代表丢弃,1则代表通过路由表做路由判定并将CIP_VIP数据包转发出去。那么操作系统就相当于变成了一个路由器,具有路由功能了。

      注意事项:这里不能通过vi来对文件进行修改,因为vi会在目录当中创建一个临时交换文件,并最后做替代,这种权限在/proc/sys/net/ipv4/目录下是不允许的。

 (4)调节RealServer的响应,通告级别(每一台RS都要配置,也就是做到RealServer的VIP对外隐藏,对内可见)

         node02(RS):

                  1.对eth0接口设置响应和通告级别

                   

                  2.对lo接口设置响应和通告级别

                  

                  3.将隐藏VIP配置给RealServer——环回接口lo的子接口

       

       解释:为什么要将环回接口的子接口的子网掩码配成255.255.255.255:

               首先要明确一个概念:对于操作系统内核来说,环回接口lo比eth0外网接口更接近内核。

               如果我们的不小心将lo8的子网掩码配置成了255.255.255.0,那么node2这台机器从eth0和lo8都可以取到192.168.88.0的网段。由于lo比eth0更接近内核,所以所有向192.168.88.0网段下的机器发送的数据包都会发送到环回接口而不是eth0接口。那么在环回接口lo从客户端通过的192.168.88.1的虚拟网卡接收到数据包后,要发送数据包还给虚拟网卡并还给客户端。但是由于是环回接口接受到的数据包,所以环回接口lo8会最终将数据包返还给本机localhost而不是客户端,数据包就出不去了。所以要配置成255.255.255.255。

        node03(RS):同上

 

(5)启动RS上的httpd(静态webServer服务)让node2和node3拥有服务器的功能,并可以启动服务器。

               1.首先安装httpd:yum install httpd -y

               2.在httpd的目录下手工创建这个服务的主页:

                   - cd/var/www/html

                      vi index.html

                      from ooxxip

               3. 启动node2和node3上的服务器

                   service httpd start

                   客户端验证:RIP:80能显示VIP:80不能显示

(6)给LVS服务器配置具体负载均衡功能

               1.安装可以使用LVS负载均衡的命令软件ipvsadm

                    yum install ipvsadm -y

               2.设置监控包(也就是对指定目标IP地址的数据包做负载均衡,我们这里是对VIP做负载,也就是监控发送到VIP的包)

                    ipvsadm -A -t 192.168.88.100:80  -s rr

               3.添加负载列表,将node2和node3添加到负载列表上

                   ipvsadm -a -t 192.168.88.100:80 -r 192.168.88.124:80 -g

                   ipvsadm -a -t 192.168.88.100:80 -r 192.168.88.125:80 -g 

                   使用ipvsadm -ln查看情况

 

                  内核配置即时生效,我们可以访问VIP来查看是否能够做到负载均衡

(7)结果验证

刷新:

 

我们通过netstat -natp来查看LVS和两台RS上的tcp通信状态

 

node01:无和VIP(192.168.88.100)建立握手的记录

 

node02和node03:有建立握手的记录

查看LVS是否监视并转发了数据包:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值