欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

第十周LINUX 学习笔记

程序员文章站 2022-04-28 21:38:10
LVS集群nat丶DR HA:高可用 平均无故障时间/(平均无故障时间+平均修复时间) 负载均衡次序lb(负载)——>ha()LB tcp:lvs,haproxy 应用层:nginx haproxy ats 缓存:varnish squiedHA:heartbeat,corosync keepliv ......

                                    lvs集群nat丶dr

ha:高可用
    平均无故障时间/(平均无故障时间+平均修复时间)
    
    负载均衡

次序
lb(负载)——>ha()
lb
  tcp:lvs,haproxy
  应用层:nginx haproxy ats
  缓存:varnish squied

ha:heartbeat,corosync keeplived iscsi gfs2 drdb
mogilefs
nosql:mongodb


集群类型:
    lb:load banlancing(负载)
        扩展容量,实现伸缩性
    ha:high availability(高可用)
        服务可用性
    hp:high performace(高性能)
        向量机
        并发处理集群

开源方案
    lb:lvs,haproxy,nginx,ats
    ha:
       heartbeat
       corosync+pacemaker
       cman+rgmanager
       cman+pacemaker
       keepalived
       ultramonkey
    hp:hadoop


lb:解决方案
    硬件:
        f5 big-ip
        思杰 citrix netscaler
        a10 a10
        array
        redware
    软件:lvs
     linux virtual server
         章文嵩:正明

    ipvs相当于netfilter,将用户转发
       框架,需要依赖以规则完成转发
       ipvs集群服务
         定义一个或多个后端的服务器

    ipvsadm

lvs:四层交换、四层路由

vip:
keepalived
cip
director:负载均衡器
real server
dip:跟real server交互
rip

cip<-->vip--dip<-->rip

lvs类型:
    nat:-->(dnat)
    dr
    tun
    fullnat

lvs nat的特性
    1.rs的应该使用私有地址
    2.rs的网关必须指向dip
    3.rip和dip必须在同一网段内
    4.请求和响应的报文都得经过director,在高负载场景中,director很可能成为性能凭借
    5.支持端口映射
    6.rs可以使用任意支持集群服务的os
lvs dr类型
    1.让前段路由将请求发往vip时,只能是dirctor上的vip
        解决方案
        1.静态地址绑定
            未必有路由器的配置权限
            director调用时静态地址绑定将难以使用
        2.arptables
        3.修改linux内核参数,将rs上的vip配置在lo接口的别名上,限制linux仅对对应接口的arp请求做相应

lvs dr类型的特性
    1.rs可以使用私有地址,还可以使用公网地址,此时可以直接通过互联网连入rs,以实现配置、监控等
    2.rs的网关一定不能指向dip
    3.rs跟dirctory要在同一物理网络内(不能有路由器分隔)
    4.请求报文经过directory,但响应报文一定不经过director
    5.不支持端口映射
    6.rs可以使用大多数的操作系统

lvs tun类型:ip隧道
     1.rip,dip,vip都得是公网地址
     2.rs的网关不会指向也不可能指向dip
     3.请求报文经过directory,但响应报文一定不经过director
     4.不支持端口映射
     5.rs的os必须得支持隧道功能

lvs的调度方法:10种
 
下午:回顾
  lvs-nat,dnat
  lvs-dr(direct routing)
  lvs-tun:(ipip)
  lns-fullnat


lvs的调度方法:10种
     静态方法:仅根据算法本身进行调度
         rr:round robin 轮询
         wrr:weighted rr 权重轮询
         sh:source hashing    源地址hash
         dh:destination hashing 目标地址hash
      动态方法:根据算法及rs当前的复制状态
          lc:least connection 最少连接
              计算当前的负载overhead=active*256+inactive来实现
          wlc:weighted lc
              overhead=(active*256+inactive)/weight
          sed:shortest expect delay  最短期望延迟
            overhead=(active+1)*256/weight          
        aq:nerver queus: 永不排队

        lblc:locality-based least connection 基于本地的最少连接
        相当于dh+lc

        lblcr:基于复制的基于本地的最少连接 replicated and locality-based least connection


session持久机制
    1.session绑定:始终将统一请求者的连接定向至统一rs(第一次请求时仍有调度选择):没有容错哦能力,有损均衡效果
    2.session复制:在rs之间同步session,因此,每个rs持集群中所有的session;对于大服务器集群环境不适用
    3.session服务器:利用单独部署的服务器来统一管理session


lns-fullnat:


lvs的集群服务:
    四层交换,四层路由
    根据请求目标套接字(包括端口的协议类型tcp,udp)来实现转发


ipvsadm

集群服务相关

-a:添加一个集群服务
    -t:tcp
    -u:udp
    -f: firewall make 通常应用于将两个或以上的服务绑定为一个服务进行处理时使用
    service-address
      -t ip:port
      -u ip:port
      -f firewall_mark
    -s 调度算法,默认为wlc
    -p: timeout persistent connection 持久连接
-e:修改定义过的集群服务

-d -t|u|f service-address:删除指定的集群服务

rs相关

    -a:向指定的cs中添加rs
        -t|-u|-f service-address:指明将rs添加至那个cluster service 中

        -r:指定rs,可以包含{ip[:port]},只有支持端口映射的lvs类型才允许此处使用跟集群服务中不同的端口

        lvs类型:
            -g:gateway,dr
            -i:ipip,tun
            -m:masquerade(地址伪装),nat
            默认为dr

           指定rs权重
               -w
           上限下限:
            -x:下限
            -y:上限

    -e:修改指定的rs属性

    -d  -t|u|f  service-address  -r  server-address:在指定的集群服务中删除一个指定的rs

情况所有的集群服务:
    -c

保存规则(使用输出重定向):
    ipvsadm-save
    ipvaadm -s

载入指定的规则:(使用输入重定向)
     ipvsadmin-restore
     ipvasdm -r

查看ipvs规则等
     -l [options]
         -n 使用数字格式显示ip地址,不反解
         -c:查看连接数相关信息
         --stats:显示统计数据
         --rate:数据传输速率
         --timeout:显示tcp会话时长
         --daemon:守护进程的信息
         --sort:对虚拟服务进行排序,默认为升序
         --exact:精确显示,不做单位换算

-z:计数器清零


lvs-dr模型
    director两个地址:vip,dip
    rs有两个地址:vip,rip


    禁止rs响应对bip的arp广播请求
        1.在前端路由上实现静态mac地址vip的绑定
            前提:得有路由器的配置权限
            缺点:directory故障转移时,无法更新此绑定
        2.arptables
            前提:在各rs在安装arptables程序i,并编写arptables规则
            缺点:依赖于独特功能的应用程序
        3.修改linux内核参数
            前提:rs必须是linux
            缺点:适用性差
            两个参数:
                arp_announce:定义通告模式
                arp_ignore:定义收到arp请求的响应模式
            配置专用路由,以使得响应报文首先通过vip所篇日志的lo上的别名接口

            linux的工作特性:ip地址是属于主机,而非特定网卡
lvs-dr配置架构根据其vip与rip是否在同一个网络内有两种情况

在directory 和rs上配置vip,要使用如下格式
ifconfig alias vip netmask 255.255.255.255 broadcast vip

route add -host vip dev



lvs-dr的配置
 director
     iptables -t filter -f
     ifconfig eth0:0 vip netmask 255.255.255.255 broadcast vip up
     route add -host vip dev eth0:0

rs:
    echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce
    echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

    ifconfig lo:0 vip netmask 255.255.255.255 broadcast vip up
     route add -host vip dev eth0:0

director:
ipvsadm -a -t ip:port -s scheduler
ipvsadm -a -t ip:port -r rs1 -g

 

                          lvs持久连接、dr、防火墙标记  

 


vip 与dip 不在同一网段
dip 和rip在同一网段

lvs持久连接

源地址hash

ipvs的连接模板 可以通过ipvsadm -l -c


持久连接
持久客户端连接 pcc:在固定时间内将来自于同一个客户端发往vip的所有请求统统定向至同一个rs
0表示所有端口
持久端口连接 ppc:将来着余同一个客户端发往某vip的某端口的所有请求统统定向至同一个rs
-p 指定时间

持久防火墙标记连接pfmc:port affinity
    基于防火墙标记,将两个或以上的端口绑定为同一个服务

    iptables -t mangle -a prerouting -d 172.16.100.8 -p tcp --dport 80 -j mark --set-mark 10
    iptables -t mangle -a prerouting -d 172.16.100.8 -p tcp --dport 443 -j mark --set-mark 10
    ipvsadm -a -f 10 -s rr
    ipvsadm -a -f 10 -r 172.16.100.11 -g
    ipvsadm -a -f 10 -r 172.16.100.11 -g

    ipvsadm -e -f 10 -s rr -p 1200



ipvs集群两个问题
    1.后端rs的监控状态检测?
        1.脚本
        2.keepalived,ldorectord

    2.director自身的可用性?
        1.ldirectord(heartabeat,corosync)
        2.keeplived

   手动脚本检测


   1.某rs故障时,要检测至少三次才能让且下线,而重新上线时,只需要检测一次
   2.如何让脚本有更好的适应性