标签:负载均衡集群介绍 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