LB集群实现

硬件

 F5
BIG-IP
Citrix NetScaler
A10
Redware

软件

1 lvs 

2 haproxy

3 nginx

4 ats apache traffic server

5 perlbal

基于工作协议层次划分

    传输层

        lvs,haproxy(mode tcp)

    应用层

        naproxy, nginx, ats, perlbar

LVS基础知识

工作在传输层的软件(TCP/IP协议栈),能基于TCP和UDP(目标IP和目标PORT)对请求进行负载均衡,也称四层交换、四层路由

能根据负载均衡算法发送至后端主机集群中某一台主机

netfilter链使用

    PREROUTING ---> INPUT ---> POSTROUTING

ipvsadm 

    用户空间命令行工具,定义集群规则,管理集群服务

ipvs

    工作在内核中netfilter INPUT钩子上

    ipvsadm通过系统调用将规则发送给ipvs

支持TCP、UDP、AH、EST、AH_EST、SCTP等诸多协议

查看内核编译IPVS情况

 grep -i -A 10 'IPVS' /boot/config-3.10.0-693.17.1.el7.x86_64

LVS Arch

 调度器:director, dispatcher, balancer
RS:Real Server

LVS Type

lvs-nat

MASQUERADE类型

多目标的DNAT模式(iptables):它通过修改请求报文的目标IP地址(必要时一并修改目标PORT)至挑选出的Real Server的IP地址实现转发

特性

    1. RealServer的IP地址和DIP使用私网地址

    2. 请求和响应报文都经由调度器转发,极高负载的场景中,调度器:director可能会成为系统瓶颈

    3. 支持端口映射

    4. RealServer可以使用任意OS

    5. RIP 和 DIP 最好在同一IP网络

lvs-dr (direct routing)

GATEWAY类型

它通过修改请求报文的目标mac地址进行转发

1. 保证前端路由器将目标IP为VIP的请求报文发送给Director

    静态绑定

    arptables

    修改RS主机的内核参数

2. RIP可以使用私网地址也可以使用公网地址,只要保证能和Director、公网通信

3. RealServer 和 Director 要在一个局域网中

4. 请求报文经由Director调度,但响应报文直接由Real Server发送

5. RealServer网关不能指向DIP

6. 不支持端口映射

7. RealServer可以用大多数OS

lvs-tun (ip tunneling)

IPIP类型

1. RIP,DIP,VIP全都是公网地址

2. RealServer的网关不能指向DIP

3. 请求报文必须由Director调度,但响应报文必须由RealServer发送

4. 不支持端口映射

5. RealServer必须支持隧道功能

lvs-fullnat

Director通过同时修改请求报文的目标地址和源地址进行转发

1. VIP是公网地址,RIP和DIP是私网地址,二者无须在同一网络中

2. Real Server 接收到请求报文的源地址为DIP,因此要响应给DIP

3. 请求报文和响应报文都经由Director

4. 支持端口映射机制

5. Real Server 可以使用任意OS

LVS Scheduler

静态方法:仅根据算法本身调度

    RR

        round robin,轮询

    WRR

        weight round robin,加权轮询

    DH

        destination hash,将对同一个目标的请求始终调度至同一RealServer

    SH

        source hash,session保持机制

动态方法:根据算法和各RealServer当前负载状态进行调度

    LC

        least connection,最少活动连接

        Overhead(负载) = Active * 256 + Inactive

    WLC

        weight least connection,加权最少活动连接

        Overhead = (Active * 256 + Inactive) / weight

    SED

        shortest expection delay,最短期望延迟

        Overhead = (Active + 1 ) * 256 

    NQ

        never queue,永不排队

        SED算法改进:第一轮用SED挑,挑一个排除一个,直到所有的RS都处理过一个请求,后续的使用SED处理 

    LBLC

        locality-based least connection,动态DH算法

        正向代理情形下的cache server调度

    LBLCR

        Locality-Based Least-Connection with Replication,带复制功能的LBLC

ipvs集群服务

1. 一个ipvs主机可以同时定义多个cluster service

2. 一个cluster service上至少应该有一个Real Server

3. 定义cluster service时,要同时指明lvs-type、lvs scheduler

ipvsadm用法

service-address

    tcp:-t ip:port

    udp:-u ip:port

    fwm:-f mark

server-address

    ip[:port]

lvs-type

    -g:gateway,dr

    -i:ipip,tun

    -m:masquerade,nat

scheduler

    -s:默认为wlc

管理集群服务

    ipvsadm -A|E -t|u|f service-address [-s scheduler]

    ipvsadm -D -t|u|f service-address

管理集群服务的RealServer

    ipvsadm -a|e -t|u|f service-address -r server-address

    ipvsadm -d -t|u|f service-address -r server-address

清空和查看

    ipvsadm -C

    ipvsadm -L|l [options]

        -n:numberic,以数字格式显示地址和端口

        -c:connection,显示当前TCP连接

        --stats,statistics,显示统计数据

        --rate:速率

        --sort:排序

        --exact:精确值

保存和重载

    ipvsadm -R

    ipvsadm -S [-n]

置零计数器

    ipvsadm -Z [-t|u|f service-address]

实例:lvs-nat

Director 

    VIP 192.168.111.128

    DIP 192.168.1.1

RealServer(Web Server)

    RIP1 192.168.1.2:8080

    RIP2 192.168.1.3:8080

ipvsadm -A -t 192.168.111.128:80 -s rr

ipvsadm -a -t 192.168.111.128:80 -r 192.168.1.2 -m

ipvsadm -a -t 192.168.111.128:80 -r 192.168.1.3 -m

ipvsadm -L -n

ipvsadm -E -t 192.168.111.128:80 -s sh 

ipvsadm -L -n

ipvsadm -e -t 192.168.111.128:80 -r 192.168.1.2:8080 -m

ipvsadm -e -t 192.168.111.128:80 -r 192.168.1.3:8080 -m 

ipvsadm -S > /etc/sysconfig/ipvsadm || ipvsadm-save

实例:lvs-dr

Director 

    VIP 192.168.111.10

    DIP 192.168.111.128

RealServer(Web Server)

    RIP1 192.168.111.11 gw 192.168.111.1

    VIP1(lo) 192.168.111.10

    RIP2 192.168.111.12 gw 192.168.111.1

    VIP2(lo) 192.168.111.10

LAN-ARP问题解决(多个VIP地址相同,IP地址必须唯一)

    修改RealServer两个内核参数

        arp_announce

            0 通告自身拥有的所有地址

            1 尽量避免把非本网络的地址往外通告

            2 总是使用最佳地址向外通告(能解决问题)

        arp_ignore

            0 通告自身拥有的所有地址

            1 请求报文从哪个接口进入,就用哪个接口的地址响应(能解决问题)

Director VIP Configure (alias broadcast intface_network)

    ifconfig ens33:0 192.168.111.10/32 broadcast 192.168.111.10 up 

    route add -host 192.168.111.10 dev ens33:0

Real Server Configure (defined kernel args)

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

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

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

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

    ifconfig lo:0 192.168.111.10/32 broadcast 192.168.111.10 up

    route add -host 192.168.111.10 dev lo:0

IPVS Rule

    ipvsadm -A -t 192.168.111.10:80 -s rr 

    ipvsadm -a -t 192.168.111.10:80 -r 192.168.111.11 -g

    ipvsadm -a -t 192.168.111.10:80 -r 192.168.111.12 -g 

多服务负载使用同一集群

    将共享同一组RS的集群服务同一进行定义

    Directior

        # 使用FWM定义集群

        iptables -t mangle -A PREROUTING -d 192.168.111.10 -p tcp -dport 80 -j MARK --set-mark 10 

        iptables -t mangle -A PREROUTING -d 192.168.111.10 -p tcp -dport 443 -j MARK --set-mark 10 

        # iptables -t mangle -A PREROUTING -d 192.168.111.10 -p tcp -dport 22 -j MARK --set-mark 10 

        # 基于FWM定义集群服务

        ipvsadm -A -f 10 -s rr 

        ipvs -a -f 10 -r 192.168.111.11

        ipvs -a -f 10 -r 192.168.111.12

实例:lvs-dr (RIP,DIP不在同一网段)

 加一台Route Host两个IP地址,一个能和公网通信,另一个是RIP的网关
这样即使RIP和DIP不在同一网段,也能通过这台路由器转发数据包
路由器既要对DIP到RIP的数据包进行转发,也要对VIP到CIP的数据包进行转发

RealServer高可用

防止:RS宕机而Director还继续对它进行调度

方法:让Director对其做健康状态检测机制,并根据检测的结果自动完成添加或移除等管理功能

总结

    1. 基于协议层检测

        网络层:icmp

        传输层:检测端口的开放状态

        应用层:请求获取关键性资源

    2. 检查频率

    3. 状态判断

        下线: success ---> failure ---> failure ---> failure

        上线:failure ---> success ---> success ---> success

    4. 日志问题

        做PV时,健康检测访问Web的日志不应该被算入正常请求日志

    5. back server, sorry server 

        所有RS宕机时,需要反馈用户一些信息

        默认sorry server weight为0,当所有RS宕机时sorry为1

解决Session保持问题

session绑定

    object

        source ip hash

        cookies hash

    lvs sh

        将来自同一个用户IP的请求都定向到同一个Real Server,自行维护一个会话追踪表

    lvs persistence

        无论ipvs使用何种调度方法,其都能实现将来自同一个Client的请求始终定向至上一次调度时挑选出的RS

        需求:持久连接模板,sourceip realserver timer,每个连接都有一个计数器, 存储在模板中,为LVS提供算法调度的参数

        持久连接的实现方式

            每个端口持久:PPC,单服务持久调度

            每个FWM持久:PFWMC,单FWM持久调度

                PORT AFFINITY

            每个客户端持久:PCC,单客户端持久调度

                Director会将用户的任何请求都识别为集群服务,并向RS进行调度

        使用:-p指定超时时间单位s

            ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

session复制

    ...

session集群

    ...

session服务器

    ...

lvs简单使用的更多相关文章

  1. lvs简单配置

    负载均衡服务器将会用到两块网卡,eth0为公网地址(此处将局域网ip作为公网地址),IP地址为192.168.1.104,eth0:1,IP地址为192.168.2.1在负载均衡器上添加一个ip别名, ...

  2. LVS简单介绍

    一.LVS简介 linux virtual server简称LVS,Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大量并发访问服务的能力,因此对于大负载的服务器 ...

  3. LVS简单实现NAT&DR模型

    LVS:Linux Virtual Server  一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org. 现在LVS已经是Linux标准内核的一部分 ...

  4. keepalived+lvs简单实现

    一,部署实战环节 01,服务架构图: 服务器镜像为centos6.9   02,服务安装: 10.0.0.10: 下载keeplived官方包--> http://www.keepalived. ...

  5. LVS简单理解

    LVS LVS(Linux Virtual Server)即Linux虚拟服务器 目前LVS已经被集成到Linux内核模块中.该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案 终端用户 ...

  6. LVS简单搭建(一)

    先说一个坑: 192.168.65.110为虚拟ip,在主节点设置(ifconfig  eth0:8 192.168.65.110/24),其他子节点要与主节点保持一致(ifconfig  lo:3  ...

  7. linux高级技巧:heartbeat+lvs(一)

    1.heartbeat一个简短的引论:        Heartbeat 项目是 Linux-HA project的一个组成部分,它实现了一个高可用集群系统.心跳服务和集群通信是高可用集群的两个关键组 ...

  8. Linux运维主流架构简单剖析

    随着IT运维的不断发展,尤其的Linux的飞速发展,越来越多的企业开始使用Linux操作系统平台,例如CentOS.RedHat.Ubuntu.Fedora等等,成千上亿个网站涌现在当今互联网,互联网 ...

  9. LVS详细介绍以及遇到的坑

    LVS详细介绍以及遇到的坑 一,概述 本文介绍了我搭建LVS集群的步骤,并且在使用LVS(Linux Virtual Server)过程中遇到的问题和坑, 二,LVS简单介绍 大家都知道,LVS中文意 ...

随机推荐

  1. Tomcat日志与Log4j日志

    一:日志作用 更好的调试,分析问题. 普通的一个请求处理10秒钟,日志10秒钟,总共就得20秒钟,这肯定是不行的,因为日志严重影响了性能.所以,我们就有必要了解日志的实现方式,以及它是如何降低IO的时 ...

  2. 洛谷 [P2766] 最长不下降子序列问题

    啊啊啊,再把MAXN和MAXM搞反我就退役 层次图求不相交路径数 第一问简单DP 第二问想办法把每一个不上升子序列转化成DAG上的一条路径,就转换成了求不相交路径数 因为每一个数只能用一次,所以要拆点 ...

  3. [dsu on tree]【学习笔记】

    十几天前看到zyf2000发过关于这个的题目的Blog, 今天终于去学习了一下 Codeforces原文链接 dsu on tree 简介 我也不清楚dsu是什么的英文缩写... 就像是树上的启发式合 ...

  4. Python数据结构之二——tuple(元组)

    Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ 列表和元组是Python中最常见的内建序列.元组与列表一样,但是tuple一旦创建就不能修改.创建元组的语法非常简单 ...

  5. 面向对象编程总结--Python

    万物皆为对象.自然环境赋予人类无尽的遐想,而面向对象编程之思想就是来自于大自然.自然界,类和对象比比皆是,比如:鸟类和麻雀,鱼和鲤鱼......其中鸟类就是各种鸟的总称,而麻雀只不过是其中之一(对象) ...

  6. mysql DML DDL DCL

    DML(data manipulation language):  它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言  D ...

  7. CocosCreator游戏开发---菜鸟学习之路(三)如何在CocosCreator中使用Pomelo

    PS(废话): 这段时间都在研究网易的Pomelo框架,作为新手小白,自然遇到了不少坑爹的事情.(当然也有可能是因为自己技术不过关的原因所以导致在很多基础的问题上纠结了很久.)网上也搜索了好久,但是基 ...

  8. Linux知识体系之路径属性与目录

    最近在看鸟哥的Linux私房菜,我觉得这本书还是很不错的.这里进行相关的总结. 1.Linux目录权限概念   Linux一般讲目录可存取的方式分为三个类别,分别是owner/group/other, ...

  9. vagrant系列教程(一):vagrant的安装与初识(转)

    [参考]https://github.com/astaxie/go-best-practice/blob/master/ebook/zh/01.1.md 阅读目录 下载一个合适的box 完成一个box ...

  10. Ubantu16.04 redis安装

    通过FTP方式将redis的安装包从windows上传到linux上 解压命令:$sudo tar -zxf ~/Downloads/redis-3.2.7.tar.gz -C /usr/local ...