码迷,mamicode.com
首页 > 编程语言 > 详细

六十二、负载均衡集群介绍、LVS介绍、LVS的调度算法、LVS NAT模式搭建

时间:2018-05-23 18:11:48      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:负载均衡集群介绍   LVS介绍   LVS的调度算法   LVS NAT模式搭建   

六十二、负载均衡集群介绍、LVS介绍、LVS的调度算法、LVS NAT模式搭建

一、负载均衡集群介绍

主流开源软件LVS、keepalived、haproxy、nginx等

其中LVS属于4层(网络OSI 7层模型),nginx属于7层,haproxy既可以认为是4层,也可以当做7层使用。

OSI简介:OSI采用了分层的结构化技术,共分七层,物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

keepalived的负载均衡功能其实就是lvs,内置的功能。

lvs这种4层的负载均衡是可以分发除80外的其他端口通信的,比如MySQL的,而nginx仅仅支持http,https,mail,haproxy也支持MySQL这种

相比较来说,LVS这种4层的更稳定,能承受更多的请求,而nginx这种7层的更加灵活,能实现更多的个性化需求。


二、LVS介绍

LVS是由国人章文嵩开发

流行度不亚于apache的httpd,基于TCP/IP做的路由和转发,稳定性和效率很高

LVS最新版本基于Linux内核2.6,有好多年不更新了

LVS有三种常见的模式:NAT、IP Tunnel、DR

LVS架构中有一个核心角色叫做分发器(Load balance),它用来分发用户的请求,还有诸多处理用户请求的服务器(Real Server,简称rs

LVS NAT模式

技术分享图片技术分享图片

Load Balance:分发器

过程:用户发送请求到分发器,分发器再分发任务给后端的rs服务器,rs服务器处理好了结果以后再把结果告诉分发器,分发器再反馈给用户。

因为分发器需要处理很多任务,所以请求量不能太大,一般的规模就十来台,或者十台以下,否则就可能力不从心了,除非配置很高。

这种模式借助iptables的nat表来实现

用户的请求到分发器后,通过预设的iptables规则,把请求的数据包转发到后端的rs上去

rs只需要设定网关为分发器的内网ip即可,因为不与外界通信。

用户请求的数据包和返回给用户的数据包全部需要经过分发器,所以分发器成为瓶颈。

在nat模式中,只需要分发器有公网ip即可,所以比较节省公网ip资源

LVS IP Tunnel模式

技术分享图片技术分享图片

这种模式,需要有一个公共IP配置在分发器和所有rs上,我们把它叫做vip

IP Tunnel实现原理:

1.客户端请求的目标IP为vip,分发器接收到请求数据包后,会对数据包做一个加工,会把目标IP改为某台rs的IP,这样数据包就到了rs上。

2.rs接收数据包后,会还原原始数据包,这样原来包里的目标IP为vip,因为所有rs上配置了这个vip,所以它会认为是它自己,数据包里有来源IP,然后rs处理好数据以后,通过公网IP直接把结果发送给用户;所以这里分发器就没有瓶颈了,就没那么累了。

LVS DR模式

技术分享图片技术分享图片

这种模式,也需要有一个公共的IP配置在分发器和所有rs上,也就是vip。

这里分发器叫director,NAT模式和IP Tunnel模式是叫Load balance。

分发器和rs服务器需要有一个内网

和IP Tunnel不同的是,它会把数据包的MAC地址修改为rs的MAC地址。

rs接收数据包后,会还原原始数据包,这样目标IP为vip,因为所有rs上配置了这个vip,所以它会认为是它自己,然后rs处理好数据,通过公网IP直接把结果发送给用户。


三、LVS调度算法

前面四种常用,重点:

轮询 Round-Robin  rr

//分发器均衡的把用户的请求发送到rs上。

加权轮询 Weight Round-Robin wrr

//带权重的轮询,配置好的rs权重就可以给高点,分配到的任务就多一些。

最小连接 Least-Connection lc

//将用户请求发送到请求量少的rs服务器上去,因为rs闲,就会处理更快。

加权最小连接 Weight Least-Connection wlc

基于局部性的最小连接 Locality-Based Least Connections lblc

带复制的基于局部性最小连接 Locality-Based Least Connections with Replication  lblcr

目标地址散列调度 Destination Hashing dh

源地址散列调度 Source Hashing  sh


四、LVS NAT模式搭建

准备工作:

三台机器

1)分发器,也叫调度器(简写为dir)

先把网卡2改成仅主机模式,然后进虚拟网路编辑器看一下子网地址的网段,再更改ens37的网络配置,设定好后启动网卡,用Windows的cmdping一下这个232.1看是否可以通信。

内网ens33:93.130,外网ens37:232.1(ens37改为仅主机模式)

2)rs1

内网:93.131,设置网关为93.130(分发器内网IP)

安装个iptables-services。

3)rs2

内网:93.132,设置网关为93.130

三台机器上都执行执行

systemctl stop firewalld; systemctl disable firewalld

systemctl start  iptables;systemctl enable iptables; iptables -F; service iptables save

关闭selinux。

开始搭建NAT模式:

dir(分发器)上安装ipvsadm

ipvsadm工具:实现LVS的一个重要工具。

yum install -y ipvsdam

在dir上编写脚本,LVS都是以脚本的方式执行的,方便维护。

# vim /usr/local/sbin/lvs_nat.sh//内容如下

#! /bin/bash

# director 服务器上开启路由转发功能,这个参数就是内核参数,实现路由转发。

echo 1 > /proc/sys/net/ipv4/ip_forward

# 关闭icmp的重定向

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

echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects

# 注意区分网卡名字,自己的网卡名是什么就写什么。

echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects

# director 设置nat防火墙

iptables -t nat -F

iptables -t nat -X                         //清空链

iptables -t nat -A POSTROUTING -s 192.168.93.2/24  -j MASQUERADE    //可以让同网段的内网去上网。

# director设置ipvsadm的功能

IPVSADM='/usr/sbin/ipvsadm'       //这里设置了一个变量,下面去引用这个变量($IPVSADM)。

$IPVSADM -C                             //清空规则

$IPVSADM -A -t 192.168.232.1:80 -s wlc -p 3     //这里的wlc是算法,可以写rr等;-A增加一条规则,指定是nat模式还是ip tunnel模式,还是DR模式;-t后跟的是分发器的外网IP;-s指定算法;-p指定它的超时时间,3秒之内一直访问到A服务器上去,可以设置0,如果设置0无法执行这个脚本,就去掉这个参数。

$IPVSADM -a -t 192.168.232.1:80 -r 192.168.93.131:80 -m -w 1

$IPVSADM -a -t 192.168.232.1:80 -r 192.168.93.132:80 -m -w 1

这里下面的两条规则:

-r:指定rs服务器

-m:说明是NAT模式

-w:权重

NAT模式效果测试

# sh /usr/local/sbin/lvs_nat.sh     //先执行这个脚本,没有输出就是没有错误

两台rs上都安装nginx

设置两台rs的主页,做一个区分,也就是说直接curl两台rs的ip时,得到不同的结果

# vim /usr/share/nginx/html/index.html      //对两台机器写上不同的内容进行区分,我这里因为第三台默认页是nginx的默认虚拟主机,所以在默认虚拟主机的index.html改内容:/data/wwwroot/default/index.html

测试:# curl 192.168.232.1

多访问几次看结果差异,可以发现访问的一直是rs1和rs2在切换访问。


扩展

lvs 三种模式详解 http://www.it165.net/admin/html/201401/2248.html 

lvs几种算法 http://www.aminglinux.com/bbs/thread-7407-1-1.html

关于arp_ignore和 arp_announcehttp://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

lvs原理相关的 http://blog.csdn.net/pi9nc/article/details/23380589


六十二、负载均衡集群介绍、LVS介绍、LVS的调度算法、LVS NAT模式搭建

标签:负载均衡集群介绍   LVS介绍   LVS的调度算法   LVS NAT模式搭建   

原文地址:http://blog.51cto.com/13576245/2119466

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!