美文网首页
Linux Cluser (LB, HA)

Linux Cluser (LB, HA)

作者: epiiplus1equal0 | 来源:发表于2019-04-10 10:10 被阅读0次

    [TOC]

    reference: 马哥教育视频

    一. 理论

    1. 系统扩展的方式

    scale up: 向上扩展 (换主机)

    scale out: 向外扩展 (加主机)

    硬件价格翻倍, 然而性能却不一定是翻倍的, 显然是加主机更合理一点

    2. 集群类型

    • LB: 负载均衡 load banlancing

    • HA: 高可用性 high availability

    ​ availability: 90%, 95%, 99%, 99.5%, 99.9%, 99.99%, 99.999%

    • HP: 高性能 high performancing

    • 大规模并行处理集群

    3. 对于一个稳定的系统来讲, 需要注意以下四点:

    • 可扩展性
    • 可用性
    • 容量 ( 容纳量)
    • 性能 (单位时间内的通过量 --> 响应时间)

    4. 系统运维的技术方向:

    可用 --> 标准化 --> 自动化

    5. 构建高扩展性系统的重要原则:

    在系统内部尽量避免串行化和交互

    6. GSLB与SLB

    • Global Service Load Balancing (全局)
    • Service Load Balancing (本地)

    7. 总结

    • 分层
    • 分割
    • 分布式
      • 分布式应用
      • 分布式静态资源
      • 分布式数据和存储
      • 分布式计算 (hadoop)

    8. LB集群的实现

    硬件:

    • F5, BIG-IP
    • Citrix --> NetScaler
    • A10 --> A10
    • Array
    • Redware

    软件:

    • lvs
    • haproxy
    • nginx
    • ats (apache traffic server)
    • perlbal

    9. 基于工作的协议层次划分:

    传输层:

    ​ lvs, haproxy (mode tcp)

    应用层:

    ​ haproxy, nginx, ats, perlbal

    二. LVS

    1. lvs

    • linux virtual server

    • l4: 四层交换, 四层路由

    • 根据报文的目标ip和port将其转发至后端主机集群中的某一台主机(根据挑选算法)

    netfilter:

    ​ PREROUTING --> INPUT (lvs在这一条链上做了操作, 强行转发至POSTROUTING)

    ​ PREROUTING --> FORWARD --> POSTROUTING

    ​ OUTPUT --> POSTROUTING

    2. lvs具体实现

    ipvsadm/ipvs

    ipvsadm:

    ​ 用户空间的命令行工具, 用于管理集群服务

    ipvs:

    ​ 工作在内核netfilter INPUT钩子上

    如何验证内核是否支持lvs功能?

    grep -i -A 10 'ipvs' /boot/config*

    支持TCP, UDP, AH, ESP, AH_ESP, SCTP等诸多协议

    3. lvs arch:

    ​ 调度器: director, dispatcher, balancer

    ​ RS: real server

    ​ 一些简称:

    ​ client ip: CIP

    ​ director virtual ip: VIP

    ​ director ip: DIP

    ​ real server ip: RIP

    4. lvs type

    • lvs-nat
    • lvs-tun (ip tunneliing)
    • lvs-fullnat (keepalived)
    • lvs-dr (direct routing)

    5. lvs-nat

    ​ 多目标的DNAT(iptables)

    ​ 通过修改请求报文的ip地址(同时可能会修改目标端口)至挑选出来的某real server的RIP地址实现转发

    ​ RIP和DIP必须在同一网段

    ​ (1) RS应和DIP使用私有地址, 且RS的网关要指向DIP

    ​ (2) 请求和相应的报文均要经由director转发, 在较高负载均衡中, director可能成为瓶颈

    ​ (3) 支持端口映射

    ​ (4) RS可使用任意OS

    ​ (5) RS的RIP和director的DIP必须在同一网络

    6. lvs-dr

    ​ direct routing (director与RS必须在同一物理网络)

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

    ​ (1) 保证前端路由器将目标ip为VIP的请求报文发送给director

    ​ 解决方案:

    ​ 静态绑定

    ​ arptables

    ​ 修改RS主机内核参数

    ​ (2) RS的RIP可使用私网或者公网地址

    ​ (3) RS和director必须在同一物理网络

    ​ (4) 请求报文经由director调度, 但响应报文一定不经由director

    ​ (5) 不支持端口映射

    ​ (6) RS可以使大多是OS

    ​ (7) RS的网关不能指向DIP

    7. lvs-tun

    ​ 不修改请求报文的首部, 而是在原有的ip首部 (cip -> vip)之外, 再封装一个ip首部 (dip -> rip)

    ​ (1) RIP, DIP, VIP全是公网地址

    ​ (2) RS的网关不能指向DIP

    ​ (3) 请求报文必须经由director调度, 但响应报文一定不经由director

    ​ (4) 不支持端口映射

    ​ (5) RS的OS必须支持隧道功能

    8. lvs-fullnat

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

    ​ (1) VIP: 公网地址. RIP和DIP: 私网地址, 且两者必须在同一网络中

    ​ (2) RS接收到请求报文的源地址为DIP, 因此要相应给DIP

    ​ (3) 请求和相应都经过director

    ​ (4) 支持端口映射

    ​ (5) RS可使用任意OS

    9. http (stateless)

    ​ session保持:

    ​ session绑定:

    ​ source ip hash

    ​ cookie

    ​ session集群(复制)

    ​ session服务器 (共享存储, 持久存储)

    10. lvs scheduler

    静态方法:

    ​ 仅根据算法本身进行调度

    • RR: round robin 轮循
    • WRR: weight round robin 加权轮循
    • SH: source hash 实现session保持的机制(有损负载均衡)
      • 将来自同一ip的请求始终调度至同一RS
    • DH: destination hash
      • 将对同一个目标的请求始终发送至同一个RS

    动态方法:

    ​ 根据算法及RS当前的负载状态进行调度

    ​ 当前负载: overhead

    • LC: least connection
      • overhead = active * 256 + inactive
    • WLC: weight least connection
      • overhead = (active * 256 + inactive) / weight
      • weight: 当前服务器的权重
    • SED: shorted expection delay 最短预期延迟
      • overhead = (active + 1) * 256 / weight
    • NQ: never queue
      • SED算法的改进, 类似于 RR + SED
    • LBLC: locality-based LC 基于本地的最少连接
      • 动态的DH算法, 正向代理情况下的cache server调度
    • LBLCR: locality-based least connection with replication
      • 带复制的LBLC算法

    11. ipvsadm集群服务:

    ipvsadm作用:

    • 管理集群服务

    • 管理集群中的RS

    (1) 一个ipvs主机可同时定义多个cluser service

    ​ tcp, udp

    (2) 一个cluser service上至少应该有一个real server

    ​ 定义时: 指明lvs-type以及lvs scheduler

    一些基本概念以及命令中的用法:

    service-address 集群服务地址

    ​ tcp: -t ip:port

    ​ udp: -u ip:port

    ​ fwm: -f mark (用作防火墙标记)

    server-address RS地址

    ​ ip[:port]

    lvs-type:

    ​ -g: gateway, dr (默认)

    ​ -i: ipip, tun

    ​ -m: masquerade, nat

    -s scheduler

    ​ 默认为WLC

    FWM:

    # 将两种集群定义成一个进行调度(功用: 将共享一组RS的集群服务器统一进行定义):
        # OSTROUTING:
            # -j MARK --set-mark 10
        # ipvs:
            # -A -f 10
    
    # 示例: 在director的netfilter的mangle表的PREROUTING定义"打标"规则
    # 先打标记:
    iptables -t mangle -A PREROUTING -d 192.168.0.10 -p tcp --dport 80 -j MARK --set-mark 10
        # 上面的192.168.0.1为VIP
    iptables -t mangle -L -n
    # 再定义集群服务:
    ipvsadm -A -f 10 -s rr
    ipvsadm -a -f 10 -r 172.16.100.21 -g
    ipvsadm -a -f 10 -r 172.16.100.22 -g
    # 最后:
    iptables -t mangle -A PREROUTING -d 192.168.0.10 -p tcp --dport 22 -j MARK --set-mark 10
    

    管理集群服务:

    ipvsadm -A|E -t|u|f service-address [-s scheduler]
    ipvsadm -D -t|u|f service-address
    ipvsadm -C # 清空集群服务和集群服务中的RS
    ipvsadm -L|l [options]
    

    管理集群服务中的RS:

    ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
    ipvsadm -d -t|u|f service-address -r server-address
    ipvsadm -C # 清空集群服务和集群服务中的RS
    ipvsadm -L|l [options]
    

    保存和重载:

    ipvsadm -S [-n]
    ipvsadm -R
    

    置零计数器:

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

    相关文章

      网友评论

          本文标题:Linux Cluser (LB, HA)

          本文链接:https://www.haomeiwen.com/subject/dawgiqtx.html