当前位置: 首页 > news >正文

使用LVS+NAT搭建集群实现负载均衡

使用LVS+NAT搭建集群实现负载均衡

LVS集群简介

   计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多   

 

wKioL1gQmCCQXKG4AABdco7iuRQ863.png-wh_50

 

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的网站

wKiom1gQmD2zNdl3AAEgR2jCHMQ740.png-wh_50 

步骤2:客户端访问调度器时,调度器通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;

wKioL1gQmEezO1FTAAFJm_4HaOA258.png-wh_50 

 

步骤3:真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。 wKioL1gQmFXibxnzAAFQWQQgT70953.png-wh_50

原理图简述:
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搭建集群实现负载均衡

 

二:实验拓扑

 

 wKiom1gQmHCRbj3hAADiptGkJVM131.png-wh_50

                                         真实环境中的拓扑图                                       

wKioL1gQmILiF7W6AACYWIy_hY0152.png-wh_50

                                      本次实验拓扑

 

 

各类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:eth0192.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:

wKiom1gQmJiDIAZCAAAp-nlynQY632.png-wh_50 

在物理机上测试

访问: 在物理上打开浏览器访问: 每按F5刷新一次,就会变换一个页面。

 

wKiom1gQmKSyfoTYAABAxX-nZK8062.png-wh_50

wKioL1gQmKTy1npQAAA-nn8wJLs916.png-wh_50










本文转自 于学康 51CTO博客,原文链接:http://blog.51cto.com/blxueyuan/1866053,如需转载请自行联系原作者

相关文章:

  • AWS CLI使用s3
  • Java源码分析系列之ArrayList读后感
  • shell特殊符号,cut、sort、wc、uniq、tee、tr、split命令
  • jmeter源码编译
  • 详解CSS display:inline-block的应用
  • Keras查看model weights .h5 文件的内容
  • 在WinForm中增加查询对话框对DataGridView数据进行循环查找
  • Ubuntu系统主题及插件工具等官方地址
  • 关于登录随机验证码的实现
  • Ubuntu 2TB sdb preseed示例
  • python 基础 9.2 mysql 事务
  • RAC同单实例物理备库的switchover
  • SmoothWall的小企业应用
  • AWS简介与历史
  • FOSCommentBundle功能包:设置Doctrine ORM映射(投票)
  • 《Java编程思想》读书笔记-对象导论
  • 「面试题」如何实现一个圣杯布局?
  • 【RocksDB】TransactionDB源码分析
  • bootstrap创建登录注册页面
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • CentOS从零开始部署Nodejs项目
  • Golang-长连接-状态推送
  • JavaScript 基本功--面试宝典
  • JS数组方法汇总
  • Redis 懒删除(lazy free)简史
  • Twitter赢在开放,三年创造奇迹
  • Windows Containers 大冒险: 容器网络
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 浮动相关
  • 浮现式设计
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 微信小程序--------语音识别(前端自己也能玩)
  • 原生 js 实现移动端 Touch 滑动反弹
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 湖北分布式智能数据采集方法有哪些?
  • ​比特币大跌的 2 个原因
  • #100天计划# 2013年9月29日
  • (Matlab)使用竞争神经网络实现数据聚类
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .Net CF下精确的计时器
  • .net6+aspose.words导出word并转pdf
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • @requestBody写与不写的情况
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具
  • [android] 切换界面的通用处理
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息
  • [BZOJ1877][SDOI2009]晨跑[最大流+费用流]
  • [hadoop读书笔记] 第十五章 sqoop1.4.6小实验 - 将mysq数据导入HBASE