一 什么是负载均衡

负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

二 什么是LVS

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。LVS是负载均衡最著名的实现之一。

三 LVS基本工作原理

LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。

1. 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间
2. PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链
3. IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链
4. POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器

四 LVS的组成部分

1. ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。
2. ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)

五 IPVS的调度算法

ipvs scheduler:
根据其调度时是否考虑各RS当前的负载状态,可分为静态方法和动态方法两种:  
静态方法:仅根据算法本身进行调度
 RR:roundrobin,轮询
 WRR:Weighted RR,加权轮询
 SH:Source Hashing,实现session sticy,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
 DH:Destination Hashing;目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡         
动态方法:主要根据每个RS当前的负载状态及调度算法进行调度
 Overhead=
 LC:least connections
  Overhead=activeconns*256+inactiveconns
 WLC:Weighted LC
  Overhead=(activeconns*256+inactiveconns)/weight
 SED:Shortest Expection Delay
  Overhead=(activeconns+1)*256/weight
 NQ:Never Queue    
 LBLC:Locality-Based LC,动态的DH算法;
 LBLCR:LBLC with Replication,带复制功能的LBLC

六 LVS相关术语

1. DS:Director Server。指的是前端负载均衡器节点。
2. RS:Real Server。后端真实的工作服务器。
3. VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
4. DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
5. RIP:Real Server IP,后端服务器的IP地址。
6. CIP:Client IP,访问客户端的IP地址。

LVS有四种类型的集群方式:
lvs-nat:修改请求报文的目标IP;多目标IP的DNAT
lvs-dr:操纵封装新的MAC地址
lvs-tun:在原请求IP报文之外新加一个IP首部
lvs-fullnat:修改请求报文的源和目标IP

本文着重介绍lvs-nat和lvs-dr方式的实现。同时搭建两台后端lamp服务器,以期实现负载均衡。

七 LVS-NAT原理和特点

多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发
  
1. RIP和DIP必须在同一个IP网络,且应该使用私网地址;RS的网关要指向DIP
2. 请求报文和响应报文都必须经由Director转发;Director易于成为系统瓶颈
3. 支持端口映射,可修改请求报文的目标PORT
4. vs必须是Linux系统,rs可以是任意系统

八 后端服务器Real Server的LAMP简单实现

# yum install -y httpd mysql-server php
# service httpd start
# echo "RS1:192.168.86.135" > /var/www/html/index.html
# echo "RS2:192.168.86.136" > /var/www/html/index.html

九 实践LVS-NAT类型

1.实验环境
三台服务器,一台作为director,两台作为real server,director有一个外网网卡(172.18.67.11) 和一个内网ip(192.168.86.254),两个real server上只有内网 ip (192.168.86.135)和(192.168.86.136),并且需要把两个real server的内网网关设置为director的内网ip(192.168.86.254)

2.安装和配置
Director上安装ipvsadm并且配置规则

# yum install -y ipvsadm
# ipvsadm -A -t 172.18.67.11:80 -s rr
# ipvsadm -a -t 172.18.67.11 -r 192.168.86.135:80 -m -w 1
# ipvsadm -a -t 172.18.67.11 -r 192.168.86.136:80 -m -w 1

3.查看ipvsadm设置的规则

# ipvsadm -Ln

4.测试lvs-nat的效果
另找一台客户端访问

# curl http://172.18.67.11
RS1:192.168.86.135
# curl http://172.18.67.11
RS2:192.168.86.136

十 实践LVS-DR类型

1.实验环境
三台机器
Director节点: (eth0 192.168.86.100 vip eth0:0 192.168.86.38)
Real server1: (eth0 192.168.86.135 vip lo:0 192.168.86.38)
Real server2: (eth0 192.168.86.136 vip lo:0 192.168.86.38)
2.安装
两个real server上都安装nginx服务

# yum install -y nginx

Director上安装ipvsadm

# yum install -y ipvsadm

3.配置

# vim /usr/local/sbin/lvs_dr.sh
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/sbin/ipvsadm
vip=192.168.86.38
rs1=192.168.86.135
rs2=192.168.86.136 ifconfig eth0:0 down
ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev eth0:0
$ipv -C
$ipv -A -t $vip:80 -s wrr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 3
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1

执行脚本

# bash lvs_dr.sh

4.在两台RS上配置脚本

# vim /usr/local/sbin/lvs_dr_rs.sh
#! /bin/bash
vip=192.168.86.38 ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

在RS上分别执行脚本

# bash lvs_dr_rs.sh

5.测试lvs-dr效果
另找一台客户端访问

# for i in {1..4};do curl http://192.168.86.100;done
RS1:192.168.86.135
RS1:192.168.86.135
RS1:192.168.86.135
RS2:192.168.86.136

基于LVS的负载均衡实现的更多相关文章

  1. 集群之LVS(负载均衡)详解

    提高服务器响应能力的方法 scale on  在原有服务器的基础上进行升级或者直接换一台新的性能更高的服务器. scale out  横向扩展,将多台服务器并发向外响应客户端的请求.优点:成本低,扩展 ...

  2. LVS+keepalived负载均衡

    背景:         随着你的网站业务量的增长你网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如F5又太贵,你们又是创业型互联公司如何有效节约成本,节省不必要的浪费?同时实现商业硬件一样的高 ...

  3. Nginx/LVS/HAProxy 负载均衡软件的优缺点详解

    Nginx/LVS/HAProxy 负载均衡软件的优缺点详解   Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验 ...

  4. LVS+nginx负载均衡知识点1

    lvs+nginx负载均衡 1       学习目标 掌握什么是负载均衡及负载均衡的作用和意义. 了解lvs负载均衡的三种模式. 了解lvs-DR负载均衡部署方法. 掌握nginx实现负载均衡的方法. ...

  5. lvs+nginx负载均衡

    1       学习目标 掌握什么是负载均衡及负载均衡的作用和意义. 了解lvs负载均衡的三种模式. 了解lvs-DR负载均衡部署方法. 掌握nginx实现负载均衡的方法. 掌握lvs+nginx负载 ...

  6. 基于Docker的负载均衡和服务发现

    应用的容器化和微服务化带来的问题 在缺省网络模型中,容器每次重启后,IP会发生变动,在一个大的分布式系统保证IP地址不变是比较复杂的事情 IP频繁发生变动,动态应用部署无法预知容器的IP地址,clie ...

  7. 总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解

    总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解 PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使 ...

  8. Nginx/LVS/HAProxy负载均衡软件的优缺点详解【转】

    转自 (总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解http://www.ha97.com/5646.html PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均 ...

  9. 实现基于DNS的负载均衡

    转自:http://blog.sina.com.cn/s/blog_4e424e2101000c3g.html 如果你有一个很受欢迎的Web站点,你会发现当请求的连接数增加时,服务器的响应延时也会随之 ...

随机推荐

  1. Java实现数组去除重复数据的方法详解

    一.用List集合实现 int[] str = {5, 6, 6, 6, 8, 8, 7,4}; List<Integer> list = new ArrayList<Integer ...

  2. TCP粘包处理 参考spserver

    TCP粘包出现的原因就不在详细描述了.TCP粘包是在做TCP编程时经常会遇到的问题,网上相关的参考也不少,大都都是一个热心人士编写的, 若仅用于学习就算了,若用真正用于项目还有待考虑. 本文就简述一下 ...

  3. springboot项目执行controller方法时进入慢的问题

    今天在部署springboot项目到阿里云时,出现登录方法执行特别慢的问题.刚开始以为是卡死了,等了3,4分钟才进去,最后会出现如下信息: 2018-01-28 15:38:36.958 INFO 4 ...

  4. NLTK下载语言素材中碰到的certificate verify failed (_ssl.c:749)

    NLTK是什么? NLTK是一个开源的项目,包含:Python模块,数据集和教程,用于NLP的研究和开发. NLTK由Steven Bird和Edward Loper在宾夕法尼亚大学计算机和信息科学系 ...

  5. VS调试配置外网可访问

    1.首先找到项目的配置文件夹(一般是隐藏的) 2.在里面的config文件夹找到applicationhost.config配置文件,打开,在sites节点找到你项目的那个site配置,新建一个绑定:

  6. 使用 minio 搭建私有对象存储云。aws-php-sdk 操作object

    How to use AWS SDK for PHP with Minio Server aws-sdk-php is the official AWS SDK for the PHP program ...

  7. 【英语】Bingo口语笔记(83) - hell系列

  8. HihoCoder 1097 Prim算法

    1097 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以 ...

  9. Hibernate中 一 二级缓存及查询缓存(1)

    最近趁有空学习了一下Hibernate的缓存,其包括一级缓存,二级缓存和查询缓存(有些是参照网络资源的): 一.一级缓存     一级缓存的生命周期和session的生命周期一致,当前sessioin ...

  10. 【Xamarin】MonoTouch - iOS 使用 UIImagePickerController 打开图片库和相机选择图片修改头像

    Application tried to present modally an active controller <UIImagePickerController: 0x7b6ff400> ...