热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LVS负载均衡集群

防伪码:出淤泥而不染,濯清涟而不妖第五章LVS负载均衡群集前言:在各种互联网应用中,随着站点对硬件性能、相应速度、服务稳定性、数据可靠性等要求越来越

防伪码:出淤泥而不染,濯清涟而不妖

                   第五章 LVS负载均衡群集

前言:在各种互联网应用中,随着站点对硬件性能、相应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器将难以承担所有的访问,除了使用价格昂贵的大型机、专用负载分流设备以外,企业还有另外一种选择来解决难题,那就是构建集群服务器――通过整合多台相对廉价的普通服务器,以同一个地址对外提供相同的服务。本章我们将学习企业中常用的群集技术――LVS。

一、 群集技术概述

1、 群集的类型

1) 负载均衡群集:主要的功能将来自客户机的访问请求分流给多台服务器,从而缓单台服务器的负载压力,例如京东淘宝的购物节的时候,当天的并发量是分常大的,单台服务器是无法承载的。

2) 高可用群集:高可用群集和hsrp原理基本一样,服务器有主从之分,实现故障切换,当一台服务器发生故障的时候,另一台服务器马上提供工作。

3) 高性能运算群集:这种群集主要用在“云计算”中,就是将多台服务器的硬件整合到一起,实现高性能运算能力

2、 负载均衡的分层结构

wKioL1gV4pCBBEQtAAEa0JknaCA644.png-wh_50

第一层:负载调度器,是群集系统的唯一入口,对外使用所有服务器共有的虚拟ip地址,通常会配置主从两台调度器实现热备份,确保高可用性。

第二层:服务器池,也就是提供各种服务的服务器,例如web服务器,ftp服务器,数据库服务器等,处理调度器发来的请求。

第三层:共享存储,主要存储服务器池中应用程序的数据,一般会采用nas或者san设备,我们今天就使用NFS搭建一台nas服务器,工作中也可以购买硬件nas和san。

3、 负载均衡的工作模式

wKiom1gV4rKiIjLJAAEcwgVxLxM172.jpg-wh_50

1) 地址转换,简nat模式,负载均衡调度器作为网关,服务器和负载调度器在同一个私有网络,安全性较好。

2) Ip隧道,简称tun模式,负载调度器仅作为客户机的访问入口,各节点通过各自的internet连接直接回应客户机,不在经过负载调度器,服务器的节点分散在互联网的不同位置,具有独立的共有ip地址,通过专用的ip隧道与负载调度器相互通信。

3) 直接路由,简称DR模式,与TUN模式类似,但各节点不是分散在各地,而是与调度器位于同一个物理网络,负载调度器与各节点服务器通过本地网络连接,不需要建立专用的ip隧道。

以上三种模式中,nat方式只需要一个公网地址,从而成为最容易的一种负载均衡模式,安全性也比较好,许多硬件负载均衡设备就是采用这种方式,性比较而言,DR模式和TUN模式的负载能力更强大,使用范围更广,但节点的安全性要稍差一些。

 二、 LVS虚拟服务器

Lvs是linux内核的一部分,由我国的章文嵩博士在1998年创建,也是极少数由中国人开发的优秀软件之一,我们可以直接手动加载ip_vs模块,并查看当前系统中ip_vs模块的版本信息,命令如下:

wKiom1gV42vzOoAMAAA1hFbjOW8201.png-wh_50


1、 lvs的负载调度算法

1) 轮询(rr):将受到的访问请求按顺序轮流分配给群集中的各节点,不管服务器的连接数和系统负载。

2) 加权轮询(wrr):也是轮流分配,但是可以调整权重,让处理性能强的服务器承担更多的访问流量。

3) 最少连接(lc):根据连接数分配,分配给连接数少的节点。

4) 加权最少连接(wlc):权重高的节点将承担更大比例的负载

2、 使用ipvsadm管理工具

Ipvsadm是在负载调度器上使用的lvs群集管理工具,通过调用ip_vs模块来添加、删除服务器节点。需要手动安装。

其它的命令接下来用一个综合实验给大家说明,这样思路比较清晰。

wKioL1gV4_-x0Kt9AAAcA_D_zuI171.png-wh_50

3、 NFS共享存储服务

NFS与我们之前讲过的openfiler、nas、san设备相似,都是属于存储设备,其实NFS就是一种nas存储。

我们在学习虚拟化的时候就使用过openfiler搭建过存储,其实在exsi上也可以使用NFS作为存储。

接下来用一个综合实验详细介绍安装和使用。

三、 综合案例:搭建LVS群集(NAT模式)

wKiom1gV5onAtR4wAACzYnruBRM703.jpg-wh_50

实验目标:搭建lvs群集,lvs负载调度器有两块网卡,是所有内部web服务器的网关服务器,需要为负载调度器配置SNAT,以便内部的服务器可以访问internet,所有的节点服务器、共享存储位于私有网络,网关指向负载调度器的192.168.7.254

实验步骤:

1、 搭建NFS服务器

1) 安装nfs-utils(用来发布共享和访问)和rpcbind(用于RPC支持)

wKiom1gV5zqQr116AAAd-xhw7Ug760.png-wh_50

wKiom1gV51SxsFI-AAAe4HrB_CA572.png-wh_50

2) 设置共享目录

将文件夹/opt/wwwroot共享给内部的web服务器节点使用,命令如下:

wKioL1gV57zydCnhAAAgN-SWgoA801.png-wh_50

打开/etc/exports文件,在里面设置共享

wKioL1gV58-iOd3qAAAfeUsoUnE788.png-wh_50

rw:读写,sync:允许同步写入,no_root_squash:客户机以root身份访问时赋予本地root权限。

3) 启动NFS服务程序

wKioL1gV6Cuhs0jpAABIAcyGYXc604.png-wh_50

4) 查看本机发布的NFS共享目录

wKioL1gV6EKSSgopAAAmss2CX9k828.png-wh_50

5) 在web节点A上访问NFS共享资源

若要正常访问NFS共享资源,客户机中也需要安装rpcbind软件包,并启动服务器,如果想使用showmount查询共享,也需要安装nfs-utils软件包,总之和服务器一样都装上吧。

wKiom1gV6G6APSxIAAAazsqG-QU351.png-wh_50

然后在NFS上面关闭防火墙

wKiom1gV6HyhfGLwAAAzRgMphS8578.png-wh_50

在web节点A上连接

wKioL1gV6JuiDrYdAABAS-4eMas414.png-wh_50

可以看到/opt/wwwroot就说明连接成功了。

6)在两台节点服务器上安装nginx,并开启nginx服务

wKiom1gV6NjxrWb_AAAdlo19V_o201.png-wh_50

wKioL1gV6PjRgEuHAAAfDvXuPSg023.png-wh_50

wKioL1gV6QbwJoDhAAAoUomOdkU145.png-wh_50

wKioL1gV6RizFOaWAAAtQs1dK7E359.png-wh_50

7)在NFS服务器的/opt/wwwroot里面制作网页index.html,然后到web节点A的/usr/local/nginx/html中查看,如果有index.html就说明挂载成功。

wKiom1gV6S7Tk8mqAAAwSQLQP88629.png-wh_50

8)设置自动挂载

Vi  /etc/fstab(末行添加,如下所示)

wKiom1gV6ZSys_USAABgdl3cjG0022.png

注:文件系统类型为nfs、挂载参数_netdev(设备需要网络)

然后重启电脑,查看是否自动挂载

wKiom1gV6jCStLFMAAAn4QGEwnI113.png-wh_50

注意:在web节点B上做和web节点A相同的操作,这里就不截图说明了。

2、 配置负载调度器

1) 在调度器上安装ipvsadm软件包(通过调用ip_vs模块来添加,删除服务器节点,以及查看群集的运行状态)

wKioL1gV6k_zxjPHAAAcA_D_zuI809.png-wh_50

2) 配置SNAT转发规则

首先开启路由转发

wKioL1gV6p3iqJzBAAAb_3FooD8264.png-wh_50

wKiom1gV6qyyxcRxAAAdGn_E4oE933.png-wh_50

做一条SNAT策略

wKiom1gV6wmiTSAnAAAkZpiG9bk519.png

3) 配置负载分配策略,主要目的是把web节点添加到调度器里面

wKioL1gV6x2B55toAAAvFsWRRfA110.png-wh_50

详解:

[root@yangwen ~]# service ipvsadm stop

创建虚拟服务器:

[root@yangwen ~]# ipvsadm -A -t 172.16.16.172:80 -s rr            //-A表示添加虚拟服务器,-t表示用来指定VIP地址及TCP端口

                                                                                                                -s表示负载调度算法类型,rr表示轮询

添加服务器节点:

[root@yangwen ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.21:80 -m -w 1            //-a表示添加真实服务器,-t同上,-r表示用来指定RIP地址及

                                                                                                                                                      TCP端口号,-m表示使用NAT群集模式(-g表示DR模式,-表示

                                                                                                                                                        TUN模式),-w表示设置权重(权重为0时表示暂停节点)

[root@yangwen ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.22:80 -m -w 1

保存:

[root@yangwen ~]# service ipvsadm save

3、 测试LVS群集

查看负载调度器

wKioL1gV7fCiESCAAAAyCD5EcNA561.png-wh_50

 注意:为了方便测试效果,web节点B的就不挂载NFS了,保持默认的nginx主页,然后在客户端上测试,访问两次,网页都不一样,实现了负载均衡群集。注意测试的时候把两台web节点的网关指向调度器,防火墙开启80端口或者关闭,然后把调度器的防火墙开启FORWARD和INPUT允许80端口。

wKiom1gV7juSbxjUAAAeg9FnmbM363.png-wh_50

wKioL1gV7kyDM4-tAAAf26IFrfE680.png-wh_50

在客户端上访问

客户端IP地址如下所示:

wKiom1gV7nXD9aqJAAA6lHrqcPo488.png-wh_50

wKioL1gV7onxgXQoAABW4cNAf0s670.png-wh_50

四、 综合案例:路由模式的负载均衡群集

LVS调度器只作为Web访问入口

Web访问出口由各节点服务器分别承担


wKiom1gWAySQNF7TAACtjSRr0qE067.jpg-wh_50

实验步骤:

服务器节点采用双网卡,一块用于应答客户端请求,一块连接共享存储。

在实验中使简化为下面的环境:

wKioL1gWA47A-AD6AAAaxbuGRHk012.png-wh_50

注意web节点A有两块网卡,一块192.168.7.21,另一块172.16.16.177,web节点B有两块网卡,一块192.168.7.22,另一块172.16.16.178,

调度器一块网卡172.16.16.173,NFS一块网卡192.168.7.250,注意网卡的对应。

 

1、 配置调度器

1) 配置虚拟ip地址(vip)

wKiom1gWBBHhGmuuAAAmzg1de-M266.png-wh_50

wKioL1gWBCKBIJLsAAAnYOE0lcg587.png-wh_50

执行:ifup  eth0:0并重启服务

wKioL1gWBDmiUccBAAAxnwiwFsU030.png-wh_50

2) 调整/proc响应参数

因为lvs负载调度器和各节点需要共用vip地址,应该关闭linux内核重定向参数响应,打开vi /etc/sysctl.conf,增加三行(防止ARP解析冲突)。

wKiom1gWBHOzmcrJAAAjORXeC0o475.png-wh_50

执行Sysctl  -p

3) 配置负载分配策略

wKiom1gWBSyiBpfpAAAvKnyg9OQ068.png-wh_50

2、 配置节点服务器

使用DR模式时,节点服务器也需要配置VIP地址,因为客户端请求的是群集IP地址,目标MAC地址是LVS的,节点服务器回应时应该以群集IP回应,否则客户端不能成功接收。还需要调整内核的ARP响应参数阻止更新VIP的MAC地址,因为客户端在发送ARP请求的时候IP地址是群集地址,这是所有的节点都配置了VIP,这时客户端的ARP缓存内就会出现多条重复的IP地址对应的MAC地址确不相同,这回导致客户端无法正确找到调度器。

1) 在节点B上配置虚拟ip地址

Vi  /etc/sysconfig/network-scripts/ifcfg-lo:0

wKioL1gWBf7ggwOPAAAjoJsaa_o227.png-wh_50

wKiom1gWBhbwdxSMAAAkcLPoyIQ537.png-wh_50

wKioL1gWB3ORzrPFAAAyjhaLpgY026.png-wh_50

添加vip本地访问路由

[root@yangwen ~]# vim /etc/rc.d/

/sbin/route add -host 172.16.16.172 dev lo:0            //永久生效

或者

[root@yangwen ~]# route add -host 172.16.16.172 dev lo:0            //临时生效

wKioL1gWCA6jadoKAAAibY4NW2M843.png-wh_50

2) 调整/proc响应参数

vim /etc/sysctl.conf,添加6行

 

wKioL1gWCEvixP5dAAAkQkJi9Kk979.png-wh_50

执行:sysctl  -p

然后再另一台节点A上做相同的操作,这里就不再截屏了,大家参考上面,如果不想去打一遍,可以使用scp命令拷贝节点B上面的文件。

wKioL1gWCHfR8lFfAABOicR55Yg421.png-wh_50

3、 在客户端上测试,每次打开浏览器访问的页面在两台web服务器之间切换就对了。在实际工作中两个web节点上的网页要保持一致,这样就能始终访问一个相同的网站,从而能实现负载均衡。

客户端IP地址如下所示:

wKioL1gWCaWh9UPjAABFCSsa_y0829.png-wh_50

wKioL1gWClyTx85BAAA2HIk0Nhs535.png-wh_50

查看当前的负载分配情况:

wKiom1gWC1bB4JVwAAAxm7fyUOk388.png-wh_50

 谢谢观看,真心的希望能帮到您!

本文出自 “一盏烛光” 博客,谢绝转载!


推荐阅读
  • 在Ubuntu系统中安装Android SDK的详细步骤及解决“Failed to fetch URL https://dlssl.google.com/”错误的方法
    在Ubuntu 11.10 x64系统中安装Android SDK的详细步骤,包括配置环境变量和解决“Failed to fetch URL https://dlssl.google.com/”错误的方法。本文详细介绍了如何在该系统上顺利安装并配置Android SDK,确保开发环境的稳定性和高效性。此外,还提供了解决网络连接问题的实用技巧,帮助用户克服常见的安装障碍。 ... [详细]
  • 本文介绍了 Linux 系统中用于定期执行任务的 cron 服务及其配置方法。通过 crond 和 crontab 命令,用户可以轻松地安排系统和用户级别的周期性任务。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 本文详细介绍了如何解决DNS服务器配置转发无法解析的问题,包括编辑主配置文件和重启域名服务的具体步骤。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 本文最初发表在Thorben Janssen的Java EE博客上,每周都会分享最新的Java新闻和动态。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 微软推出Windows Terminal Preview v0.10
    微软近期发布了Windows Terminal Preview v0.10,用户可以在微软商店或GitHub上获取这一更新。该版本在2月份发布的v0.9基础上,新增了鼠标输入和复制Pane等功能。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • SecureCRT是一款功能强大的终端仿真软件,支持SSH1和SSH2协议,适用于在Windows环境下高效连接和管理Linux服务器。该工具不仅提供了稳定的连接性能,还具备丰富的配置选项,能够满足不同用户的需求。通过SecureCRT,用户可以轻松实现对远程Linux系统的安全访问和操作。 ... [详细]
  • Parallels Desktop for Mac 是一款功能强大的虚拟化软件,能够在不重启的情况下实现在同一台电脑上无缝切换和使用 Windows 和 macOS 系统中的各种应用程序。该软件不仅提供了高效稳定的性能,还支持多种高级功能,如拖放文件、共享剪贴板等,极大地提升了用户的生产力和使用体验。 ... [详细]
  • 在Java分层设计模式中,典型的三层架构(3-tier application)将业务应用细分为表现层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这种分层结构不仅有助于提高代码的可维护性和可扩展性,还能有效分离关注点,使各层职责更加明确。通过合理的设计和实现,三层架构能够显著提升系统的整体性能和稳定性。 ... [详细]
author-avatar
宾利Bentley乀Motors
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有