使用LVS+NAT搭建集群实现负载均衡
LVS集群简介
计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多
LVS集群分布图
集群有三种类型:
1:负载均衡
2:高可用集群式我们互联网行业常用的集群架构
3:高性能计算集群--HPC
(1)负载均衡集群--LB
负载均衡集群为企业提供了更为实用,性价比更高的系统架构解决方案。负载均衡集群把很多客户集中访问的请求负载压力可能尽可能平均的分摊到计算机集群中处理。客户请求负载通常包括应用程度处理负载和网络流量负载。这样的系统非常适合向使用同一组应用程序为大量用户提供服务。每个节点都可以承担一定的访问请求负载压力,并且可以实现访问请求在各节点之间动态分配,以实现负载均衡。
负载均衡运行时,一般通过一个或多个前端负载均衡器将客户访问请求分发到后端一组服务器上,从而达到整个系统的高性能和高可用性。这样计算机集群有时也被称为服务器群。一般高可用性集群和负载均衡集群会使用类似的技术,或同时具有高可用性与负载均衡的特点。
负载均衡集群的作用
1)分担访问流量(负载均衡)
2)保持业务的连续性(高可用
(2)高可用性集群--HA
一般是指当集群中的任意一个节点失效的情况下,节点上的所有任务自动转移到其他正常的节点上,并且此过程不影响整个集群的运行,不影响业务的提供。 类似是集群中运行着两个或两个以上的一样的节点,当某个主节点出现故障的时候,那么其他作为从 节点的节点就会接替主节点上面的任务。从节点可以接管主节点的资源(IP地址,架构身份等),此时用户不会发现提供服务的对象从主节点转移到从节点。
高可用性集群的作用:当一个机器宕机另一台进行接管。比较常用的高可用集群开源软件有: keepalive,heardbeat。
(3)高性能计算集群--HPC
高性能计算集群采用将计算任务分配到集群的不同计算节点儿提高计算能力,因而主要应用在科学计算领域。比较流行的HPC采用Linux操作系统和其它一些免费软件来完成并行运算。这一集群配置通常被称为Beowulf集群。这类集群通常运行特定的程序以发挥HPCcluster的并行能力。这类程序一般应用特定的运行库, 比如专为科学计算设计的MPI库。
HPC集群特别适合于在计算中各计算节点之间发生大量数据通讯的计算作业,比如一个节点的中间结果或影响到其它节点计算结果的情况。
常用集群软硬件
常用开源集群软件有:lvs,keepalived,haproxy,nginx,apache,heartbeat
常用商业集群硬件有:F5, Netscaler, Radware,A10等
LVS集群的优点
1)把单台计算机无法承受的大规模的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间,提升用户体验。
2)单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高。
3)7*24小时的服务保证,任意一个或多个设备节点设备宕机,不能影响到业务。在负载均衡集群中,所有计算机节点都应该提供相同的服务,集群负载均衡获取所有对该服务的如站请求。
LVS的三种工作模式:
1)VS/NAT模式(Network address translation)
2)VS/TUN模式(tunneling)
3)DR模式(Direct routing)
NAT模式的概述与工作原理
NAT模式概述
Network Address Translation(NAT地址转化)
NAT(网络地址映射)通过网络地址转换。 NAT方式可支持任何的操作系统,以及私有网络,并且只需一个Internet IP地址,但是整个系统的性能受到限制。因为执行NAT每次需要重写包,有一定的延迟;另外,大部分应用有80%的数据是从服务器流向客户机,也就是用户的请求非常短,而服务器的回应非常大,对负载均衡器形成很大压力,成为了新
LVS NAT 模式工作原理: NAT模式-网络地址转换
这个是通过网络地址转换的方法来实现调度的。首先调度器(LB)接收到客户的请求数据包时(请求的目的IP为VIP),根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后调度就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP),这样真实服务器(RS)就能够接收到客户的请求数据包了。真实服务器响应完请求后,查看默认路由(NAT模式下我们需要把RS的默认路由设置为LB服务器。)把响应后的数据包发送给LB,LB再接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端。
步骤1:客户端访问VIP1的网站
步骤2:客户端访问调度器时,调度器通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;
步骤3:真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
原理图简述:
1)客户端请求数据,目标IP为VIP
2)请求数据到达LB服务器,LB根据调度算法将目的地址修改为RIP地址及对应端口(此RIP地址是根据调度算法得出的。)并在连接HASH表中记录下这个连接。
3)数据包从LB服务器到达RS服务器webserver,然后webserver进行响应。Webserver的网关必须是LB,然后将数据返回给LB服务器。
4)收到RS的返回后的数据,根据连接HASH表修改源地址VIP&目标地址CIP,及对应端口80.然后数据就从LB出发到达客户端。
5)客户端收到的就只能看到VIP\DIP信息。
NAT模式优缺点:
1、NAT技术将请求的报文和响应的报文都需要通过LB进行地址改写,因此网站访问量比较大的时候LB负载均衡调度器有比较大的瓶颈,一般要求最多之能10-20台节点
2、只需要在LB上配置一个公网IP地址就可以了。
3、每台内部的节点服务器的网关地址必须是调度器LB的内网地址。
4、NAT模式支持对IP地址和端口进行转换。即用户请求的端口和真实服务器的端口可以不一致。
一:实验目标
1:正确理解NAT的工作原理
2:使用LVS+NAT搭建集群实现负载均衡
二:实验拓扑
真实环境中的拓扑图
本次实验拓扑
各类IP的作用 | |
CIP | 客户端计算机的IP可能是一个本地的、与VIP在同一网络的私有ip地址,或者是一个因特网上的公共ip地址。用作向集群发送请求的源ip地址。 |
VIP | 分发器上虚拟的IP,是由分发器的接口分出的一个虚拟IP,用于接收访问集群服务的请求。 |
DIP | 分发器上的DIP,用于将分发器上VIP所接收访问集群服务的请数据包进行解析,再转发到各个集群节点 。 |
RIP | 集群服务器上的真实IP,是客户端访问集群的终点。在LVS术语中,向外部世界提供服务的节点叫做真实服务器,因此在真实服务器上使用的ip地址叫做真实ip地址 |
三:实验环境
1、准备3台
分发器:xuegod63 VIP:eth1:192.168.1.63
DIP:eth0:192.168.2.63
RIP:xuegod62: eth0: vmnet4 : 192.168.2.62 网关: 192.168.2.63
RIP:xuegod64: eth0: vmnet4 : 192.168.2.64 网关: 192.168.2.63
2、iptables -F , 清除规则
3、selinux关闭
4:red had 6.5版本 64位操作系统
四:实验代码
xuegod63配置成分发器:
1、打开路由转发功能
[root@xuegod63 ~]# vim /etc/sysctl.conf
改:net.ipv4.ip_forward = 0
为:net.ipv4.ip_forward = 1
[root@xuegod63 ~]# sysctl -p #让配置生效:
2、配置网络环境: 添加一个网卡, 配置成以下网络环境
eth0 192.168.1.63 模式:br0 模拟公网
eth1 192.168.2.63 模式:vmnet4 模拟公网
Director分发器:需要开启80(服务的)端口
3:安装: LVS管理工具: ipvsadmin
[root@xuegod63 Packages]# rpm -ivh ipvsadm-1.25-9.el6.x86_64.rpm
4、使用这个命令设置规则:
[root@xuegod63 ~]# ipvsadm -A -t 192.168.1.63:80 -s rr #rr代表轮循
ipvsadm 命令参数 | ipvsadm 命令的作用 |
-A | 添加 |
-t | 指定分发器上的VIP地址 |
-s | 指定调度算法 rr表示round-robin 轮循 |
-a | 表示添加real server的地址 |
-r | 指定real server的IP地址 |
-m | 表示masquerade 也就是NAT方式的LVS |
[root@xuegod63 ~]# ipvsadm -a -t 192.168.1.63:80 -r 192.168.2.64 -m
[root@xuegod63 ~]# ipvsadm -a -t 192.168.1.63:80 -r 192.168.2.62 -m
查看: ipvsadm 配置及查看内核IPVS表和算法的工具类似于iptables
[root@xuegod63 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.63:80 rr
-> 192.168.2.62:80 Masq 1 0 0
-> 192.168.2.64:80 Masq 1 0 0
保存ipvsadm的配置
[root@xuegod63 ~]# /etc/init.d/ipvsadm save #保存以上的配置
RealServer:xuegod62和xuegod64上面配置:
准备: 配置IP:REAL SERVER自己的网络相关信息配置成如下:。
xuegod62: eth0: vmnet4 : 192.168.2.62 网关: 192.168.2.63
xuegod64: eth0: vmnet4 : 192.168.2.64 网关: 192.168.2.63
1:配置xuegod64为realserver, 并启web服务
[root@xuegod64 ~]# yum install -y httpd
[root@xuegod64 ~]# vim /etc/httpd/conf/httpd.conf
ServerName 192.168.2.64:80 #改为这样
[root@xuegod64 ~]# service httpd restart
[root@xuegod64 ~]# echo "192.168.2.64" > /var/www/html/index.html #(实验期间,各个服务器的页面不同)
2:配置xuegod62为realserver, 并启web服务
[root@xuegod62 ~]# yum install -y httpd
[root@xuegod62 ~]# vim /etc/httpd/conf/httpd.conf
ServerName 192.168.2.62:80 #改为这样
[root@xuegod62 ~]# service httpd restart
[root@xuegod62 ~]# echo "192.168.2.62" > /var/www/html/index.html #(实验期间,各个服务器的页面不同)
测试:
在xuegod63上测试realserver :
[root@xuegod63 ~]# yum install elinks
[root@xuegod63 ~]# elinks 192.168.2.64 --dump
192.168.2.64
[root@xuegod63 ~]# elinks 192.168.2.62 --dump
192.168.2.62
在xuegod63上测试VIP:
在物理机上测试
访问: 在物理上打开浏览器访问: 每按F5刷新一次,就会变换一个页面。
#每刷新一次就跳转到下一个页面,这样就实现了地址转换和负载均衡。