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

负载均衡集群介绍

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

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

•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、DR、IP Tunnel

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

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

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

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

•rs需要设定网关为分发器的内网ip

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

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

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

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

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

•rs接收数据包后,会还原原始数据包,这样目标IP为vip,因为所有rs上配置了这个vip,所以它会认为是它自己

LVS DR模式

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

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

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

•rs接收数据包后,会还原原始数据包,这样目标IP为vip,因为所有rs上配置了这个vip,所以它会认为是它自己

LVS的调度算法
•轮询 Round-Robin rr

•加权轮询 Weight Round-Robin wrr

•最小连接 Least-Connection lc

•加权最小连接 Weight Least-Connection wlc

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

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

•目标地址散列调度 Destination Hashing dh

•源地址散列调度 Source Hashing sh


LVS NAT模式搭建

准备3台机器
A机器为分发器,也叫调度器(简写为dir)
A机器 192.168.177.7 外网地址为192.168.153.55

B机器 192.168.177.100
C机器 192.168.177.200
B机器和C机器的网关需要设置为192.168.177.7

关闭防火墙,三台机器执行如下的命令

systemctl stop firewalld
systemc disable firewalld
systemctl start  iptables
iptables -F
service iptables save
setenforce 0

分发器上安装ipvsdam
yum install -y ipvsdam

分发器上编辑脚本
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
#注意区分网卡名字,我的两个网卡分别为ens33和ens37
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.177.0/24 -j MASQUERADE
#director设置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.153.55:80 -s wlc -p 3
$IPVSADM -a -t 192.168.153.55:80 -r 192.168.177.100:80 -m -w 1
$IPVSADM -a -t 192.168.153.55:80 -r 192.168.177.200:80 -m -w 1

两台rs都需要安装rs,并且设置两台rs的主页,做一个区分,也就是说直接curl两台rs的ip时,得到不同的结果
这是我的实验结果,成功分发
[root@localhost yang]# curl 192.168.153.55
backup backup this is backup.
[root@localhost yang]# curl 192.168.153.55
master master this is master
[root@localhost yang]# curl 192.168.153.55
backup backup this is backup.
[root@localhost yang]# curl 192.168.153.55
master master this is master
[root@localhost yang]# curl 192.168.153.55
backup backup this is backup.

猜你喜欢

转载自blog.51cto.com/13658403/2135862