负载均衡器的原理及ipvsadm实现LVS/NAT模型

负载均衡:

  是建立在现有的网络之上,它提供了一种廉价、有效、透明的方法来扩大网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力,以及提高网络的灵活性和可用性。通过负载均衡器,可以实现N台廉价的Linux服务器并行处理,从面达到小型机或大型机的计算能力。单台负载均衡器位于网站的最前端,它起着分流客户请求的作用,相当于整个网站或系统的入口。由于IPv4中IP地址日益紧张以及出于安全方面的才虑,很多网络使用保留IP地址(如10.0.0.0/255.0.0.0、172.16.0.0/255.128.0.0、和192.168.0.0/255.255.0.0).这些不在Internet上使用,而是专门为内部网络预留的。当内部网络中的主机要访问Internet或被Internet访问时,就需要进行网络地址转换(Network Address Translation,NAT),NAT方法就是交不同IP地址的并行网络服务变成一个在同一IP地址上的虚拟服务。

以LVS作为负载均衡器:

    LVS(Linux Virtual Server)主要是针对大业务量的网络应用。

LVS类型:

     NAT-->(DNAT)

     DR

     TUN

     FULLNAT

 VS/NAT的体系结构比较简单:在一组服务器前有一个调度器,它们是通过Switch/HUB相连接的,这些服务器提供相同的网络服务、相同的服务内容,即不管请求被发送到哪一台服务器,执行结果都是一样的。服务的内容可以复制到每一台服务器的本地硬盘上,可能通过网络文件系统共享,也可以通过一个分布式文件系统来提供。

LVS NAT的特性:

1、RS应该使用私有地址;

2、RS的网关的必须指向DIP;

3、RIP和DIP必须在同一网段内;

4、请求和响应的报文都得经过Director;在高负载场景中,Director很可能成为系统性能瓶颈;

5、支持端口映射;

6、RS可以使用任意支持集群服务的OS;

   VS/DR或VS/TUN应用的一种模型中(所有机器都在同一个物理网络),所有机器(包括Director和RealServer)都使用了一个额外的IP地址,即VIP。当一个客户端向VIP发出一个连接请求时,此请求必须要连接至Director的VIP,而不能是RealServer的。因为,LVS的主要目标就是要Director负责调度这些连接请求至RealServer的。

因此,在Client发出至VIP的连接请求后,只能由Director将其MAC地址响应给客户端(也可能是直接与Director连接的路由设备),而Director则会相应的更新其ipvsadm table以追踪此连接,而后将其转发至后端的RealServer之一。

  如果Client在请求建立至VIP的连接时由某RealServer响应了其请求,则Client会在其MAC table中建立起一个VIP至RealServer的对就关系,并以至进行后面的通信。此时,在Client看来只有一个RealServer而无法意识到其它服务器的存在。

为了解决此问题,可以通过在路由器上设置其转发规则来实现。当然,如果没有权限访问路由器并做出相应的设置,则只能通过传统的本地方式来解决此问题了。这些方法包括:

1、禁止RealServer响应对VIP的ARP请求;

2、在RealServer上隐藏VIP,以使得它们无法获知网络上的ARP请求;

3、基于“透明代理(Transparent Proxy)”或者“fwmark (firewall mark)”;

4、禁止ARP请求发往RealServers;


LVS DR类型的特性:

1、RS可以使用私有地址;但也可以使用公网地址,此时可以直接通过互联网连入RS以实现配置、监控等;

2、RS的网关一定不能指向DIP;

3、RS跟Dirctory要在同一物理网络内(不能由路由器分隔);

4、请求报文经过Directory,但响应报文一定不经过Director

5、不支持端口映射;

6、RS可以使用大多数的操作系统;


LVS TUN类型:IP隧道

1、RIP、DIP、VIP都得是公网地址;

2、RS的网关不会指向也不可能指向DIP;

3、请求报文经过Directory,但响应报文一定不经过Director;

4、不支持端口映射;

5、RS的OS必须得支持隧道功能;


LVS Scheduling Method LVS的调度方法:
1.Fixed Scheduling Method  静态调服方法
(1).RR     轮询
(2).WRR    加权轮询
(3).DH     目标地址hash
(4).SH     源地址hash
2.Dynamic Scheduling Method 动态调服方法
(1).LC     最少连接
(2).WLC    加权最少连接
(3).SED    最少期望延迟
(4).NQ     从不排队调度方法
(5).LBLC   基于本地的最少连接
(6).LBLCR  带复制的基于本地的最少连接
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规则:
(1).添加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]                                       --查看定义的规则
如:#ipvsadm -L -n  
ipvsadm -Z [-t|u|f service-address]                          --清空计数器
LVS-NAT模型实例

1。先配置好网络环境,要三个虚拟机(本次实验在虚拟机上完成),一台用作Director,其他两台分别为RealServer1 RealServer2

其中Director要两个网卡,Eth0网卡为桥接(Birdged),Eth1网卡为仅主机(Host-only),RealServer1 RealServer2的网卡也都是仅主机

类型的。

2.为了演示效果,将Director的两块网卡配置成不在同一个网段的IP地址,RealServer1 RealServer2IP地址为同一网段,规划如下图:

wKioL1NR-aXwptXJAADZHxw6l4U828.jpg

3.为192.168.10.11和192.168.10.12配置web服务

先查看是否安装了web服务

[root@node1 ~]# rpm -q httpd

httpd-2.2.15-29.el6.centos.x86_64

如果没有安装则使用yum install httpd安装即可

RealServer1配置网站页面并启动服务

虚拟机1网卡地址设置

ifconfig eth0 192.168.10.11

route add default gw 192.168.10.1

[root@node2 ~]# vim /var/www/html/index.html

<h1>Web1</h1>

[root@node2 ~]# service httpd start

RealServer2配置网站页面并启动服务

虚拟机2网卡地址设置

ifconfig eth0 192.168.10.12

route add default gw 192.168.10.1

[root@node3 ~]# vim /var/www/html/index.html

<h1>Web2</h1>

[root@node3 ~]# service httpd start

4.Director虚拟主机上配置

打开路由间转发功能

wKioL1NR_NOTDMywAAFHxLOWtTU232.jpg

wKioL1NR_XCxJDcSAAHyBVrZmYc221.jpg

--查看ipvsadm是否安装,如果没有安装则安装之,直接使用yum安装即可

wKiom1NR_pKCzmtMAAOKcYxZZzU701.jpg

 

配置Directory网卡,添加一块网卡eth1

配置地址ifconfig eth1 192.168.10.1

[root@node1 ~]# ifconfig eth0:0 172.16.24.6《=========定义VIP地址

定义LVS-NAT模型规则

wKiom1NSAVrjxFsCAAOefwK5ab8224.jpg









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章