Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >第二章 负载均衡LB服务之LVS(二)

第二章 负载均衡LB服务之LVS(二)

作者头像
晓天
发布于 2019-09-10 06:11:24
发布于 2019-09-10 06:11:24
9610
举报

第二章 负载均衡LB服务之LVS(二)

2.4 LVS实验案例

2.4.1 LVS集群配置思路

LVS配置集群其实比较简单,首先需要在LVS服务器安装ipvsadm、iptables-services服务,命令如下:

yum -y install ipvsadm iptables-services

然后创建集群,并指定算法,然后加入节点主机,设置工作模式即可。具体相关命令如下:

ipvsadm -A -t VIP:port -s 算法 --- -A 添加一个管理集群

ipvsadm -a -t VIP:port -r node主机ip:port -模式 -w 权重

--- -a 给某个集群添加node主机,-r 指定node主机信息 -t tcp 协议

--- –u udp协议 -模式:-m nat模式 -g dr模式 -i tun模式

ipvsadm -C ---清空集群设置

ipvsadm -L ---查看集群

ipvsadm-save -n > /etc/sysconfig/ipvsadm ---永久保存集群设置

2.4.2 NAT模式

NAT模式的实验,我们按下图部署实验环境:

实验中需要四台虚拟机,其中三台CentOS7.4做服务集群,一台windows做客户端。

我们首先按图中所示,配置各主机的ip,两台web服务配置网关指向LVS内网卡。然后两台web服务器上部署apache服务,页面分别为web1.test.com和web2.test.com,访问效果如下图所示:

注:其实在生产环境中,web节点服务器的页面应该是一样的,此处我们为了显示出LVS的均衡效果,故意设置成不同的页面。

然后,我们来配置LVS服务器。我们本可以逐步输入命令实现LVS集群效果,但是为了让LVS服务器每次重启,都可以启动LVS服务,所以,我们可以把配置命令写入到脚本中,这样设定脚本开机自动运行,就可以永久生效了。具体脚本如下:

vi /usr/lib/sysctl.d/00-system.conf

net.ipv4.ip_forward =1 ---开启路由

注:nat功能的前提是路由,所以要先开路由

systemctl restart network ---重启network服务,路由生效

vi /mnt/lvs_nat.sh ---编辑脚本

#!/usr/bin/bash

VIP=202.0.0.1 ---定义变量,指定服务ip,即VIP

iptables -F ---清空防火墙常规三链中规则

iptables -F -t nat ---清空nat代理链中规则

iptables -X ---清空计数器

iptables -Z ---清空自定义链

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE ---开nat

ipvsadm -C ---清空现有集群设置

ipvsadm -A -t $VIP:80 -s wrr ---创建集群,并指定算法为 wrr

ipvsadm -a -t $VIP:80 -r 192.168.10.1:80 -m -w 2 ---加入节点

ipvsadm -a -t $VIP:80-r 192.168.10.2:80 -m -w 3 ---加入节点

chmod a+x /mnt/lvs_nat.sh ---给脚本增加执行权限

/mnt/lvs-nat.sh ---运行脚本

以上脚本中,首先清理了iptables防火墙策略,然后清理了原有集群。然后开启nat代理功能,在这里nat功能并未按照我们之前教材中讲过的用-j SNAT --to-source设置,而是直接用-j MASQUERADE开启了nat,其实功能是一样的,只是用MASQUERADE设置即直接用外网卡ip做代理ip,不用再--to-source明确指定了。然后使用ipvsadm –A命令创建集群,指定服务ip及端口,又指定了分配算法。然后给集群加入节点,并指定给节点分配是采用的模式,以及节点权重。

好了,运行完毕脚本,就可以使用客户机访问VIP验证LVS效果了:

使用客户端,多次访问VIP地址,可见到显示不同的页面,说明是被LVS分配到了内部不同的web节点上。而且再多访问几次会发现web2页面出现的次数更多一些,这是因为我们设定的web2服务器权重更高。

当访问成功后,我们可以使用 ipvsadm -L 查看一下配置好的集群信息:

图中可见集群服务器centos7-1即本机的http端口使用wrr算法,下面显示的是两台节点主机信息,Forward列表示转发模式为Masq(即nat),Weight列表示权重。

如果我们想要更改算法,可以使用下面命令:

ipvsadm -E -t 202.0.0.1:80-s wrr

更改完毕可以再次ipvsadm -L 查看到使用的是新算法了。

然后用 ipvsadm-save -n >/etc/sysconfig/ipvsadm 命令永久保存集群设置。

2.4.3 TUN隧道模式

隧道模式,我们使用上图的实验环境,LVS服务器单网卡,需要五台虚拟机,其中一台配置为路由器,开启路由功能。读者可根据上图自行配置各主机ip及网络环境。下面我们主介绍LVS服务器及节点服务器的配置。

首先LVS服务器配置完毕网卡ip后,安装ipvsadm、iptables-services软件包,然后编写如下脚本:

vim /mnt/lvs_tun.sh

#!/bin/bash

VIP=192.168.10.100

RIP1=192.168.10.2

RIP2=192.168.10.3

ipvsadm –C ---清除原有集群设置

ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 up

route add -host $VIP dev ens33:0

ipvsadm -A -t $VIP:80 -s wlc

ipvsadm -a -t $VIP:80 -r $RIP1:80 -i -w 1

ipvsadm -a -t $VIP:80 -r $RIP2:80 -i -w 1

chmod a+x /mnt/lvs_tun.sh

为了与上面的nat模式区别清除,我们可以先清理一下iptables的链规则:

iptables -F ---清空防火墙常规三链中规则

iptables -F -t nat

./mnt/lvs_tun.sh ---执行脚本

上述脚本中,同样先定义了变量指定了VIP与内部节点服务器的真实ip,即RIP,然后清除了原有集群,再给网卡创建了子接口:ens33:0,并绑定了VIP。然后增加了一条静态路由,指示到达VIP的数据通信使用虚拟子接口发送数据,即走隧道通信。由此可知,LVS的TUN隧道模式,是通过虚拟子接口与节点服务器通信的,过程中实现二次封装。最后创建集群,加入节点服务器,当然,在这里我们也可以直接指定节点服务器的RIP,而不使用变量获取RIP的值。

好了,LVS服务器配置完毕,我们来查一下集群信息:

图中可见到转发类型为Tunnel,即隧道模式。

我们在来给web节点服务器配置VIP。同样给web节点主机编写脚本

vi /mnt/web.sh

#!/bin/bash

VIP=192.168.10.100

ifconfig tunl0 down ---注意,此处的tunl0最后两个字符是小写L和零

ifconfig tunl0 up ---重启隧道接口

ifconfig tunl0 $VIP broadcast $VIP netmask255.255.255.255 up

echo 1 >/proc/sys/net/ipv4/conf/tunl0/arp_ignore

echo 2 >/proc/sys/net/ipv4/conf/tunl0/arp_announce

echo 0 > /proc/sys/net/ipv4/conf/tunl0/rp_filter

echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore

echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

route add -host $VIP dev tunl0

以上脚本中,先是创建了隧道接口tunl0,为了避免与曾经做过的隧道冲突,所以先重启了一下,然后给隧道接口绑定VIP,再下面的六行与arp相关的代码,是关闭arp功能的,上节我们讲过,LVS与节点主机都绑定VIP会被arp协议报ip冲突错误,所以关闭arp协议后就可以了。最后增加一条路由指定隧道通信。

chmod a+x /mnt/web.sh

./mnt/web.sh ---执行脚本

两台web节点都运行上面的脚本,即可成功完成节点配置。

然后使用客户端多次访问http://192.168.10.100站点,即会发现是轮流访问到两台节点主机了。

2.4.4 DR直连模式

直连模式,使用上图中网络环境,共五台虚拟机。同样我们先配置好网络参数,然后配置好两台节点服务器的web服务。

然后我们仍然以编辑脚本的方式配置LVS服务器:

vi /mnt/lvs-dr.sh

#!/bin/bash

VIP=192.168.10.100

RIP1=192.168.10.2

RIP2=192.168.10.3

ifconfig ens33:0$VIP netmask 255.255.255.0 up

route add -host $VIP devens33:0

ipvsadm -C

ipvsadm -A -t $VIP:80 -swlc

ipvsadm -a -t $VIP:80 -r$RIP1:80 -g -w 1

ipvsadm -a -t $VIP:80 -r$RIP2:80 -g -w 1

chmod a+x lvs-nat.sh

./lvs-dr.sh ---执行脚本

脚本中的配置思路,与TUN模式十分类似。

ipvsadm -L ---查看集群,可见Forward列显示是Route,表示直连模式

再来编写web节点服务器的脚本:

vi /mnt/web2.sh

#!/bin/bash

VIP=192.168.10.100

ifconfig lo:0 $VIPnetmask 255.255.255.255 broadcast $VIP

route add -host $VIP devlo:0

echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce

echo 0 > /proc/sys/net/ipv4/conf/lo/rp_filter

echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore

echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

chmod a+x web2.sh

./web2.sh ---执行脚本

这个脚本中,并未启动隧道接口,而是把VIP绑定给了主机内部的回环测试接口(loopback,即127.0.0.1接口)的子接口,增加的路由也是指定的lo的子接口。同样关闭了arp响应。

两台节点主机都执行web2.sh脚本后,即可以正常工作了。

然后可以使用客户机,多次访问http://192.168.10.100,证明LVS的均衡成功。

当然,一台节点服务器加入集群后,工作模式也是可以更改的,我们可以在LVS服务器上输入如下命令:

ipvsadm -e -t 192.168.10.100:80 -r 192.168.10.2:80 -i -w 1

但由于更改模式后,其他相关配置也需要相应的更改,不甚方便,所以这种操作使用较少。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 教主小筑 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于ASP.NET core的MVC站点开发笔记 0x01
先到上面提供的下载地址,下载对应平台的dotnet装上,然后在命令行窗口输入dotnet --version查看输出是否安装成功。
CN_Simo
2020/07/07
8930
Asp.Net Core中的静态文件-12
在这个视频中我们将讨论如何使 ASP.NET Core 应用程序,支持静态文件,如 HTML,图像,CSS 和 JavaScript 文件。
角落的白板报
2019/05/05
1.5K0
Asp.Net Core中的静态文件-12
ASP.NET Core开发人员异常页面-13
如果我们使用上面的代码运行我们的应用程序,我们看不到异常,而是看到“来自 Default.html 页面中的 Hello”。如果您了解 asp.net Core 请求处理管道的工作原理,那么您可能已经知道我们没有看到我们抛出的异常的原因。
角落的白板报
2019/05/15
8270
ASP.NET Core3.X 终端中间件转换为端点路由运行
前几天.NET Core3.1发布,于是我把公司一个基础通用系统升级了,同时删除了几个基础模块当然这几个基础模块与.NET Core3.1无关,其中包括了支付模块,升级完后静文(同事)问我你把支付删除了啊?我说是啊,没考虑好怎么加上(感觉目前不太好,我需要重新设计一下)。
HueiFeng
2020/01/22
1.1K0
asp.net core 系列之用户认证(1)-给项目添加 Identity
对于没有包含认证(authentication),的项目,你可以使用基架(scaffolder)把 Identity的程序集包加入到项目中,并且选择性的添加Identity的代码进行生成。
Vincent-yuan
2019/09/10
1.2K0
asp.net core 系列之用户认证(1)-给项目添加 Identity
asp.net core 系列之Startup
而在 Program 中,当 host builder 上的 Build 被调用时,应用的 host 被 built 。
Vincent-yuan
2019/09/10
5370
asp.net core 系列之Startup
ASP.NET Core Startup类 Configure()方法 | ASP.NET Core 中间件详细说明
ASP.NET Core 应用使用 Startup 类,按照约定命名为 Startup 。 Startup 类:
痴者工良
2019/08/08
3.6K0
ASP.NET Core Startup类 Configure()方法 | ASP.NET Core 中间件详细说明
ASP.NET Core静态文件的使用方法
静态文件(HTML,CSS,图片和Javascript之类的资源)会被ASP.NET Core应用直接提供给客户端。
米米素材网
2022/07/23
1.5K0
ASP.NET Core静态文件的使用方法
ASP.NET Core 应用程序Startup类介绍
Startup类配置服务和应用程序的请求管道。 Startup 类 ASP.NET Core应用程序需要一个启动类,按照惯例命名为Startup。在主程序的Web Host生成器(WebHostBuilderExtensions)的 UseStartup <TStartup> 扩展方法中指定启动类名称。 您可以为不同的环境定义不同的Startup类,并在运行时选择适当的Startup类。如果在Web Host配置或选项中指定startupAssembly(启动程序集),托管将加载该启动程序集并搜索 Star
晓晨
2018/06/22
9070
IdentityServer4学习及简单使用
要学习IdentityServer,需要了解下基于Token的验证体系,其中涉及到Token, OAuth&OpenID,JWT,协议规范等。
Vincent-yuan
2019/09/10
1.5K0
IdentityServer4学习及简单使用
Asp.Net Core 中间件应用实战中你不知道的那些事
这篇文章主要分享Endpoint 终结点路由的中间件的应用场景及实践案例,不讲述其工作原理,如果需要了解工作原理的同学, 可以点击查看以下两篇解读文章:
Jlion
2022/04/07
8970
Asp.Net Core 中间件应用实战中你不知道的那些事
手把手教你写dotnet core(MVC)
上一篇手把手教你写dotnet core(入门篇)我们已经简单在dotnet core里面跑了个”hello world!”和累加程序.
李国宝
2020/01/02
1.1K0
手把手教你写dotnet core(MVC)
C# .NET面试系列七:ASP.NET Core
在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务:
GoodTime
2024/03/08
4530
C# .NET面试系列七:ASP.NET Core
【ASP.NET Core 基础知识】--中间件--什么是中间件
本篇文章作为中间件单元的开篇文章,通过这篇文章可以了解什么是中间件、内置中间件的使用以及怎么创建自定义中间件。我们先来看一下中间件的角色、目的和重要性。
喵叔
2024/01/14
9891
ASP.NET Core 入门教程 9、ASP.NET Core 中间件(Middleware)入门
本篇代码以下代码进行调整:https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-02
KenTalk
2019/04/01
1.3K0
ASP.NET Core 入门教程 9、ASP.NET Core 中间件(Middleware)入门
ASP.Net Core 5.0 MVC AppSettings配置文件读取,Startup 类中ConfigureServices 方法、Configure 方法的使用
ASP.NET Core 应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:
明志德道
2023/10/21
4840
ASP.Net Core 5.0 MVC  AppSettings配置文件读取,Startup 类中ConfigureServices 方法、Configure 方法的使用
ASP.NET Core快速入门(第4章:ASP.NET Core HTTP介绍)--学习笔记
课程链接:http://video.jessetalk.cn/course/explore
郑子铭
2021/01/13
7180
ASP.NET Core快速入门(第4章:ASP.NET Core HTTP介绍)--学习笔记
ASP.NET Core 2.1 : 十四.静态文件与访问授权、防盗链
我的网站的图片不想被公开浏览、下载、盗链怎么办?本文主要通过解读一下ASP.NET Core对于静态文件的处理方式的相关源码,来看一下为什么是wwwroot文件夹,如何修改或新增一个静态文件夹,为什么新增的文件夹名字不会被当做controller处理?访问授权怎么做?
FlyLolo
2018/12/18
1.4K0
ASP.NET Core 中间件(Middleware)详解
什么是中间件(Middleware)? 中间件是组装到应用程序管道中以处理请求和响应的软件。 每个组件: 选择是否将请求传递给管道中的下一个组件。 可以在调用管道中的下一个组件之前和之后执行工作。 请求委托(Request delegates)用于构建请求管道,处理每个HTTP请求。 请求委托使用Run,Map和Use扩展方法进行配置。单独的请求委托可以以内联匿名方法(称为内联中间件)指定,或者可以在可重用的类中定义它。这些可重用的类和内联匿名方法是中间件或中间件组件。请求流程中的每个中间件组件都负责调用
晓晨
2018/06/22
1.4K0
.NET Core微服务之基于IdentityServer建立授权与验证服务
  要学习IdentityServer,事先得了解一下基于Token的验证体系,这是一个庞大的主题,涉及到Token,OAuth&OpenID,JWT,协议规范等等等等,园子里已经有很多介绍的文章了,个人觉得solenovex的这一篇文章《学习IdentityServer4的预备知识》言简意赅,可以快速的看看。另外savaboard的《ASP.NET Core 之 Identity 入门(一)》和《ASP.NET Core 之 Identity 入门(二)》这两篇也可以一看,对Claims和Identity的基本知识讲的比较通俗易懂,深入浅出,有故事情节,哈哈。
Edison Zhou
2018/08/07
1.8K0
.NET Core微服务之基于IdentityServer建立授权与验证服务
推荐阅读
相关推荐
基于ASP.NET core的MVC站点开发笔记 0x01
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档