一、负载均衡:必不可少的基础手段

1.1 找更多的牛来拉车吧

  当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务器集群,也可以是数据库服务器集群,还可以是分布式缓存服务器集群等等。

古人有云:当一头牛拉不动车的时候,不要去寻找一头更强壮的牛,而是用两头牛来拉车。

  在实际应用中,在Web服务器集群之前总会有一台负载均衡服务器,负载均衡设备的任务就是作为Web服务器流量的入口,挑选最合适的一台Web服务器,将客户端的请求转发给它处理,实现客户端到真实服务端的透明转发。最近几年很火的「云计算」以及分布式架构,本质上也是将后端服务器作为计算资源、存储资源,由某台管理服务器封装成一个服务对外提供,客户端不需要关心真正提供服务的是哪台机器,在它看来,就好像它面对的是一台拥有近乎无限能力的服务器,而本质上,真正提供服务的,是后端的集群。

点击链接加入群聊【linux内核交流群】:https://jq.qq.com/?_wv=1027&k=sw0dcAEy

1.2 负载均衡的类型

  负载均衡可以采用硬件设备(例如常常听见的F5),也可以采用软件负载。

  商用硬件负载设备成本通常较高(一台几十万上百万很正常),所以在条件允许的情况下我们会采用软件负载;

  软件负载解决的两个核心问题是:选谁、转发,其中最著名的是LVS(Linux Virtual Server)。

二、初识LVS:Linux Virtual Server

2.1 LVS是神马东西

  LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。

2.2 LVS有神马作用

  LVS主要用于服务器集群的负载均衡。它工作在网络层,可以实现高性能,高可用的服务器集群技术。它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。它易用,配置非常简单,且有多种负载均衡的方法。它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。另外可扩展性也非常好。

  LVS自从1998年开始,发展到现在已经是一个比较成熟的技术项目了。可以利用LVS技术实现高可伸缩的、高可用的网络服务,例如WWW服务、Cache服务、DNS服务、FTP服务、MAIL服务、视频/音频点播服务等等,有许多比较著名网站和组织都在使用LVS架设的集群系统,例如:Linux的门户网站(www.linux.com)、向RealPlayer提供音频视频服务而闻名的Real公司(www.real.com)、全球最大的开源网站(sourceforge.net)等。

2.3 LVS的体系结构

  使用LVS架设的服务器集群系统有三个部分组成:

  (1)最前端的负载均衡层,用Load Balancer表示;

  (2)中间的服务器集群层,用Server Array表示;

  (3)最底端的数据共享存储层,用Shared Storage表示;

  在用户看来,所有的内部应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。

2.4 LVS负载均衡机制

  (1)LVS是四层负载均衡,也就是说建立在OSI模型的第四层——传输层之上,传输层上有我们熟悉的TCP/UDP,LVS支持TCP/UDP的负载均衡。因为LVS是四层负载均衡,因此它相对于其它高层负载均衡的解决办法,比如DNS域名轮流解析、应用层负载的调度、客户端的调度等,它的效率是非常高的。

  (2)LVS的转发主要通过修改IP地址(NAT模式,分为源地址修改SNAT和目标地址修改DNAT)、修改目标MAC(DR模式)来实现。

  ①NAT模式:网络地址转换

  NAT(Network Address Translation)是一种外网和内网地址映射的技术。NAT模式下,网络数据报的进出都要经过LVS的处理。LVS需要作为RS(真实服务器)的网关。当包到达LVS时,LVS做目标地址转换(DNAT),将目标IP改为RS的IP。RS接收到包以后,仿佛是客户端直接发给它的一样。RS处理完,返回响应时,源IP是RS IP,目标IP是客户端的IP。这时RS的包通过网关(LVS)中转,LVS会做源地址转换(SNAT),将包的源地址改为VIP,这样,这个包对客户端看起来就仿佛是LVS直接返回给它的。客户端无法感知到后端RS的存在。

  ②DR模式:直接路由

  ②执行关闭防火墙自动运行命令:chkconfig iptables off

  (3)DR负载均衡模式数据分发过程中不修改IP地址,只修改mac地址,由于实际处理请求的真实物理IP地址和数据请求目的IP地址一致,所以不需要通过负载均衡服务器进行地址转换,可将响应数据包直接返回给用户浏览器,避免负载均衡服务器网卡带宽成为瓶颈。因此,DR模式具有较好的性能,也是目前大型网站使用最广泛的一种负载均衡手段。

三、构建实战:LVS+Keepalived实现负载均衡

3.1 实验结构总览

  (1)本次基于VMware Workstation搭建一个四台Linux(CentOS 6.4)系统所构成的一个服务器集群,其中两台负载均衡服务器(一台为主机,另一台为备机),另外两台作为真实的Web服务器(向外部提供http服务,这里仅仅使用了CentOS默认自带的http服务,没有安装其他的类似Tomcat、Jexus服务)。

  (2)本次实验基于DR负载均衡模式,设置了一个VIP(Virtual IP)为192.168.80.200,用户只需要访问这个IP地址即可获得网页服务。其中,负载均衡主机为192.168.80.100,备机为192.168.80.101。Web服务器A为192.168.80.102,Web服务器B为192.168.80.103。

3.2 基础准备工作

  以下工作针对所有服务器,也就是说要在四台服务器中都要进行配置:

  (1)绑定静态IP地址

  命令模式下可以执行setup命令进入设置界面配置静态IP地址;x-window界面下可以右击网络图标配置;配置完成后执行service network restart重新启动网络服务;

  验证:执行命令ifconfig

  (2)设定主机名

  ①修改当前会话中的主机名,执行命令hostname xxxx (这里xxxx为你想要改为的名字)

  ②修改配置文件中的主机名,执行命令vi /etc/sysconfig/network (√一般需要进行此步凑才能永久更改主机名)

  验证:重启系统reboot

  (3)IP地址与主机名的绑定

  执行命令vi /etc/hosts,增加一行内容,如下(下面的从节点以你自己的为主,本实验搭建了两个从节点):

  192.168.80.100 lvs-master

  192.168.80.101 lvs-slave

  #下面是本次试验的两个真实服务器节点

  192.168.80.102 lvs-webserver1

  192.168.80.103 lvs-webserver2

  保存后退出

  验证:ping lvs-master

  (4)关闭防火墙

  ①执行关闭防火墙命令:service iptables stop

验证:service iptables stauts

  ②执行关闭防火墙自动运行命令:chkconfig iptables off

  验证:chkconfig --list | grep iptables

3.3 配置两台Web服务器

  以下操作需要在角色为Web服务器的两台中进行,不需要在负载均衡服务器中进行操作:

  (1)开启http服务

  命令:service httpd start

  补充:chkconfig httpd on -->将httpd设为自启动服务

  (2)在宿主机访问Web网页,并通过FTP工具上传自定义网页:这里上传一个静态网页,并通过更改其中的html来区别两台Web服务器,以下图所示为例,其中一台显示from 192.168.80.102,而另一台显示from 192.168.80.103;

  (3)编辑realserver脚本文件

  ①进入指定文件夹:cd /etc/init.d/

  ②编辑脚本文件:vim realserver

SNS_VIP=192.168.80.200
/etc/rc.d/init.d/functions
case "$1" in
start)ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP/sbin/route add -host $SNS_VIP dev lo:0echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/all/arp_announcesysctl -p >/dev/null 2>&1echo "RealServer Start OK";;
stop)ifconfig lo:0 downroute del $SNS_VIP >/dev/null 2>&1echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "0" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/all/arp_announceecho "RealServer Stoped";;
*)echo "Usage: $0 {start|stop}"exit 1
esac
exit 0

  这里我们设置虚拟IP为:192.168.80.200

  ③保存脚本文件后更改该文件权限:chmod 755 realserver

  ④开启realserver服务:service realserver start

3.4 配置主负载服务器

  (1)安装Keepalived相关包

yum install -y keepalived

  在CentOS下,通过yum install命令可以很方便地安装软件包,但是前提是你的虚拟机要联网;

  (2)编辑keepalived.conf配置文件

  ①进入keepalived.conf所在目录:cd /etc/keepalived

  ②首先清除掉keepalived原有配置:> keepalived.conf

  ③重新编辑keepalived配置文件:vi keepalived.conf

global_defs {  notification_email {  edisonchou@hotmail.com  }  notification_email_from sns-lvs@gmail.com  smtp_server 192.168.80.1  smtp_connection_timeout 30router_id LVS_DEVEL  # 设置lvs的id,在一个网络内应该是唯一的
}
vrrp_instance VI_1 {  state MASTER   #指定Keepalived的角色,MASTER为主,BACKUP为备          interface eth1  #指定Keepalived的角色,MASTER为主,BACKUP为备virtual_router_id 51  #虚拟路由编号,主备要一致priority 100  #定义优先级,数字越大,优先级越高,主DR必须大于备用DR    advert_int 1  #检查间隔,默认为1sauthentication {  auth_type PASS  auth_pass 1111  }  virtual_ipaddress {  192.168.80.200  #定义虚拟IP(VIP)为192.168.2.33,可多设,每行一个}
}
# 定义对外提供服务的LVS的VIP以及port
virtual_server 192.168.80.200 80 {  delay_loop 6 # 设置健康检查时间,单位是秒                    lb_algo wrr # 设置负载调度的算法为wlc                   lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式   nat_mask 255.255.255.0                persistence_timeout 0          protocol TCP                  real_server 192.168.80.102 80 {  # 指定real server1的IP地址weight 3   # 配置节点权值,数字越大权重越高              TCP_CHECK {  connect_timeout 10         nb_get_retry 3  delay_before_retry 3  connect_port 80  }  }  real_server 192.168.80.103 80 {  # 指定real server2的IP地址weight 3  # 配置节点权值,数字越大权重越高  TCP_CHECK {  connect_timeout 10  nb_get_retry 3  delay_before_retry 3  connect_port 80  }  }
} 

  (3)开启keepalived服务

service keepalived start

3.5 配置从负载服务器

  从负载服务器与主负载服务器大致相同,只是在keepalived的配置文件中需要改以下两处:

  (1)将state由MASTER改为BACKUP

  (2)将priority由100改为99

vrrp_instance VI_1 {  state BACKUP # 这里改为BACKUPinterface eth1  virtual_router_id 51  priority 99 # 这里改为99,master优先级是100advert_int 1  authentication {  auth_type PASS  auth_pass 1111  }  virtual_ipaddress {  192.168.80.200  }
}  

3.6 验证性测试

  (1)指定请求的均衡转发:因为两个Web服务器的权重都一样,所以会依次转发给两个Web服务器;

  (2)Web服务器发生故障时:

  ①A发生故障后,只从B获取服务;

  这里模拟192.168.80.102发生故障,暂停其http服务:service httpd stop

  再来看看这时从外部访问VIP时,便会只从192.168.80.103获取网页:

  ②A故障修复后,又从A获取服务;

  这里模拟192.168.80.102修复完成,重启其http服务:service httpd start

  再来看看这时从外部访问VIP,又可以从192.168.80.102获取网页:

  (3)主负载均衡服务器发生故障时,备机立即充当主机角色提供请求转发服务:

  这里模拟192.168.80.100发生故障,暂停其keepalived服务:service keepalived stop

  再来看看这时从外部访问VIP,还是可以正常获取网页:

学习小结

  LVS是目前广为采用的软件负载均衡解决方案,在一些大型企业级系统及互联网系统中应用。本次,简单地了解了一下LVS,并在Linux下搭建了一个小小的测试环境,借助Keepalived实现了一个最小化的负载均衡测试环境。LVS是一个可以工作在网络第四层的负载均衡软件,因此它相对于Nginx一类工作在第七层的负载均衡软件有着无可比拟的性能优势,而且它还是我国的章文嵩博士(现在阿里的副总裁,淘宝的技术专家)作为创始人发起的,现已经成为Linux内核的组成部分。

  当然,目前流行的LVS解决方案中,在Web服务器端也有采用了Nginx+Tomcat这样的搭配类型,静态文件和动态文件分开进行处理,也不失为一种有效的尝试。在以后的日子里,我还会尝试下在Linux下借助Jexus跑ASP.NET MVC项目,试试.NET项目在Linux下的运行效果,希望到时也可以做一些分享。好了,今天就到此停笔。

层的负载均衡软件,因此它相对于Nginx一类工作在第七层的负载均衡软件有着无可比拟的性能优势,而且它还是我国的章文嵩博士(现在阿里的副总裁,淘宝的技术专家)作为创始人发起的,现已经成为Linux内核的组成部分。

  当然,目前流行的LVS解决方案中,在Web服务器端也有采用了Nginx+Tomcat这样的搭配类型,静态文件和动态文件分开进行处理,也不失为一种有效的尝试。在以后的日子里,我还会尝试下在Linux下借助Jexus跑ASP.NET MVC项目,试试.NET项目在Linux下的运行效果,希望到时也可以做一些分享。好了,今天就到此停笔。

需要进一步了解,可以点下方链接,领一元试听vip课程,赶快行动起来吧!

https://ke.qq.com/course/2705727?flowToken=1041141

从负载均衡到软件负载,lvs是神马东西相关推荐

  1. 硬件负载均衡和软件负载均衡

    LB 简单比较 – F5.NetScaler.LVS.Nginx.Haproxy 负载均衡技术是构建大型网站必不可少的架构策略之一.它的目的是,把用户的请求分发到多台后端的设备上,用以均衡服务器的负载 ...

  2. DNS 负载均衡、硬件负载均衡和软件负载均衡

    当单服务器的性能无法满足业务需求时,就需要设计高性能集群来提升系统整体的处理性能. 高性能集群的复杂性主要体现在需要增加一个任务分配器,以及为任务选择一个合适的负载均衡器.负载均衡不只是为了计算单元的 ...

  3. 构建负载均衡服务器之二 LVS详解及应用

    在上一篇中介绍了负载均衡及集群的原理,本篇主要介绍下下实现负载均衡的软件之LVS的原理及应用. 一.LVS的介绍 1.  LVS的定义 一般来说,LVS采用三层结构:负载调度器.服务器池.共享存储.工 ...

  4. 负载均衡集群技术LVS

    集群 通过集群技术,可以在付出较低成本的情况下获得在性能.可靠性.灵活性方面的相对较高的收益,任务调度是集群系统的核心技术. 集群组成后,利用多个交换机和组合进行海量请求处理(负载均衡),从而获得很高 ...

  5. 软件负载均衡和硬件负载均衡的选择

    有软件负载均衡,也有硬件负载均衡,选择哪个? 数据流量过大的网络中,单一设备一般是无法承担的,需要多台设备进行数据分流,而负载均衡器就是起到把数据分流到多台设备的作用. 负载均衡也分了不少技术,用以满 ...

  6. 详解【负载均衡】(负载均衡算法、一致性hash、负载均衡架构分析)

    作者:duktig 博客:https://duktig.cn 优秀还努力.愿你付出甘之如饴,所得归于欢喜. 本文源码参看:https://github.com/duktig666/distribute ...

  7. 负载均衡 一直跑一个服务器_终于把服务器负载均衡和客户端负载均衡讲清楚了...

    服务端负载均衡 我们常说的负载均衡都是指服务端负载均衡,服务端负载均衡又分为硬件负载均衡,软件负载均衡. 硬件负载均衡主要是在各服务器节点 前加上负载均衡的设备,如F5 软件负载均衡主要指的是在服务器 ...

  8. 运维工程师必备之负载 均衡集群及LVS详解

    原文地址:运维工程师必备之负载 均衡集群及LVS详解作者:蚁巡运维平台 来源: chrinux 的BLOG 时间: 2013-07-01 14:00 此博文主要介绍集群和负载均衡的基本理论和类别,内容 ...

  9. 负载均衡集群介绍LVS介绍LVS调度算法LVS NAT模式搭建

    2019独角兽企业重金招聘Python工程师标准>>> 18.6 负载均衡集群介绍 • 主流开源软件LVS.keepalived.haproxy.nginx等 • 其中LVS属于4层 ...

  10. 几种常见用以实现负载均衡的软件简介

    几种常见用以实现负载均衡的软件简介 1.nginx 2.haproxy 3.LVS

最新文章

  1. 10个必备的机器学习开源工具
  2. java 顺序 读写 Properties 配置文件 支持中文 不乱码
  3. SAP打印机原理、打印配置及打印操作
  4. php check name,checkname.php
  5. java原子操作cas_java并发编程系列二:原子操作/CAS
  6. $_GET,$_post与$_REQUEST
  7. [NOI2007] 货币兑换 (dp+李超树维护凸包)
  8. 64位CentOS源码编译方式安装wine
  9. C# WinForm开发系列 - Form/Window
  10. 多元梯度下降法--machine learning
  11. 企业架构皇冠上的明珠:TOGAF
  12. axure7 地址选择_Axure教程:省市县三级联动选择(全国省市区数据)
  13. ABBYY最新版本OCR文字图像识别软件v16
  14. 谷歌浏览器任何页面都打不开连设置也不能打开
  15. python基础知识及数据分析工具安装及简单使用(Numpy/Scipy/Matplotlib/Pandas/StatsModels/Scikit-Learn/Keras/Gensim))
  16. 程序员代码面试指南刷题--第五章.翻转字符串(1)
  17. w ndows81能安装什么浏览器,在WindowsServer2019上安装edge浏览器
  18. Python Web开发: 教你如何解放路由管理
  19. php soapclient 异常,一个请求后,PHP SoapClient失败
  20. 【转】程序员职业规划

热门文章

  1. 在线二进制取余计算机,十进制转二进制和十六进制计算器
  2. 施耐德驱动器维修ELAU控制器维修C400C600
  3. 程序设计基础II学习笔记
  4. 飞思卡尔智能车参赛感受,以及开源自己搜集的资料
  5. 软件开发流程:软件运维流程
  6. 网络七层及四层协议通俗详解
  7. tolua错误大全-Chinar出品-几乎可为新手解决所有报错情景
  8. SHT20温湿度传感器工作原理
  9. 智能制造+机器视觉技术培训研讨会
  10. Ubuntu完全教程,让你成为Ubuntu高手