zoukankan      html  css  js  c++  java
  • lvs和keepalived

    LVS调度算法参考

    RR:轮询
    WRR :加权轮询
    DH :目标地址哈希
    SH:源地址hash
    LC:最少连接
    WLC:加权最少连接,默认
    SED:最少期望延迟
    NQ:从不排队调度方法
    LBLC:基于本地的最少连接
    LBLCR:带复制的基于本地的最少连接  

    ipvsadm命令参考

    ipvsadm -A|E -t|u virutal-service-address:port [-s scheduler]
    #-A:添加虚拟服务器记录
    #-E:修改虚拟服务器记录
    #-t:tcp服务
    #-u:udp服务
    #-s:调度算法,默认wlc
    
    ipvsadm -D -t|u|f virtual-service-address
    #-D:删除虚拟服务器记录
    
    ipvsadm -C
    #-C:清空lvs规则
    
    ipvsadm -R
    #-R:重载lvs配置
    
    ipvsadm -S [-n] > ipvs.save
    #-S:保存lvs配置
    #-n:不解析地址
    
    ipvsadm -a|e -t|u service-address:port -r real-server-address:port [-g|i|m] [-w weight]
    #-a:添加真实服务器记录
    #-e:修改真实服务器记录
    #-r:对应的真实服务器地址
    #-g:指定lvs工作模式为DR,默认
    #-i:指定lvs工作模式为tunnel
    #-m:指定lvs工作模式为NAT
    #-w:手工指定权重
    
    ipvsadm -d -t|u|f service-address -r server-address
    #-d:删除真实服务器记录
    
    ipvsadm -Ln [options]
    #-L:显示lvs运行状态
    #-n:不解析地址
    #-c:显示ipvs连接
    #--stats:统计数据
    #--rate:速率
    #--exact:精确值
     
    ipvsadm -Z [-t|u|f service-address]
    #-Z:清空lvs计数器
    
    ipvsadm -h
    #-h:显示帮助信息

    NAT模型

     NAT模型可以做端口映射

    1.首先在两台真实服务器上安装http服务
    2.开启lvs服务器的转发功能
    echo 1 > /proc/sys/net/ipv4/ip_forward
    3.配置lvs服务
    #定义一个lvs服务,指定vip和端口,指定调度方式为轮询
    ~]# ipvsadm -A -t VIP:PORT -s rr   
    #添加第一台真实服务器,并指定为NAT模型
    ~]# ipvsadm -a -t VIP:PORT -r RIP1:PORT -m
    #添加第二台真实服务器,并指定为NAT模型
    ~]# ipvsadm -a -t VIP:PORT -r RIP2:PORT -m 
    #查看ipvs定义的规则
    ~]# ipvsadm -L -n 

    DR模型 

    三台服务器的所有ip地址都指向路由器的网关接口,DR模式不能做端口映射,也就是lvs服务器的端口和RS服务器端口必须对应

    arp_announce:arp通告
        0:全部通告(默认)
        1:尽量避免通告非本网段地址
        2:不通告非本网段地址

    arp_ignore:arp应答
        0:有的话就应答(默认)
        1:不在请求的接口就不应答

    1.RS服务器添加vip到lo口,并关闭lo口和其他接口的arp通告和应答,添加vip路由到lo口,下面是相应脚本,只需要更改对应vip即可
    
    #!/bin/bash
    #description:start realserver
    vip=192.168.159.111
    source /etc/rc.d/init.d/functions
    case $1 in
    start)
            echo "Start Realserver"
            ip addr add $vip/32 dev lo
            ip route add  $vip/32 dev lo
            echo "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
    ;;
    stop)
            echo "Stop Realserver"
            ip addr del $vip/32 dev lo
            ip route del  $vip/32
            echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
            echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
            echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
            echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
    ;;
    *)
            echo "Usage: $0 (start | stop)"
    exit 1
    esac
    
    2.在RS上开启相应服务
    ~]# systemctl start nginx
    
    3.在lvs服务器上添加vip到eth0:0口,并开启转发功能
    
    #添加vip
    ~]# ip addr add vip/32 dev eth0:0
    
    #开启转发
    ~]# echo 1 > /proc/sys/net/ipv4/ip_forward 
    
    #添加路由
    ~]# ip route add  vip/32 dev eth0:0
    
    4.添加ipvs记录,DR模式不能做端口映射
    ~]# ipvsadm -A -t VIP:80 -s rr
    ~]# ipvsadm -a -t VIP:80 -r RIP1 -g 
    ~]# ipvsadm -a -t VIP:80 -r RIP2 -g 
    

    keepalived:配置文件不能有中文注释!停止keepalived使用systemctl kill keepalived

    [root@localhost roles]# cat /etc/keepalived/keepalived.conf
    ! Configuration File for keepalived
    
    global_defs {
       #notification_email {
       #  acassen@firewall.loc
       #  failover@firewall.loc
       #  sysadmin@firewall.loc
       #}
       #notification_email_from Alexandre.Cassen@firewall.loc
       #smtp_server 192.168.200.1
       #smtp_connect_timeout 30
       router_id LVS_DEVEL
       vrrp_skip_check_adv_addr
       #vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface ens33
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.2.88
        }
    }
    

    注释,不要复制下面的内容,请复制上面的内容对应更改

    global_defs {                   #全局配置
       router_id mmm             #路由器标识,全局唯一
    }
     
    vrrp_instance VI_1 {        #高可用实例1
        state MASTER              #状态为主节点
        interface eno16777736 #使用哪块网卡
        virtual_router_id 51      #虚拟路由器标识,同一个高可用内要相同
        priority 100                  #优先级,主节点要高于备用节点
        advert_int 1                  #监听时间间隔
        authentication {            #认证功能
            auth_type PASS        #明文认证
            auth_pass 1111        #认证密码
        }
        virtual_ipaddress {        #虚拟出来的ip地址
            192.168.1.30
        }
    } 
    #备节点不一样的字段为
    #router_id nnn
    #state BACKUP
    #priority 99
    #interface视网卡而定  

    Keepalived+lvs  

    RS节点同样需要做lvs DR模型的配置

    1.RS服务器添加vip到lo口,并关闭lo口和其他接口的arp通告和应答,添加vip路由到lo口,下面是相应脚本,只需要更改对应vip即可
    
    #!/bin/bash
    #description:start realserver
    vip=192.168.159.111
    source /etc/rc.d/init.d/functions
    case $1 in
    start)
            echo "Start Realserver"
            ip addr add $vip/32 dev lo
            ip route add  $vip/32 dev lo
            echo "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
    ;;
    stop)
            echo "Stop Realserver"
            ip addr del $vip/32 dev lo
            ip route del  $vip/32
            echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
            echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
            echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
            echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
    ;;
    *)
            echo "Usage: $0 (start | stop)"
    exit 1
    esac
    
    2.在RS上开启相应服务
    ~]# systemctl start nginx  

    主节点

    ! Configuration File for keepalived
    
    global_defs {
       router_id master
       vrrp_mcast_group4 224.0.0.7
    }
    
    vrrp_instance DR1 {
        state MASTER
        interface ens33
        virtual_router_id 77
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.159.111
        }
    }
    virtual_server 192.168.159.111 8888 {
        delay_loop 6
        lb_algo rr
        lb_kind DR
        persistence_timeout 0
        protocol TCP
        sorry_server 192.168.159.130 8888
        real_server 192.168.159.132 8888 {
            TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 8888
             }
        }
        real_server 192.168.159.133 8888 {
            HTTP_GET {
                 url {
                    path / 
                    status_code 200
            }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3 
           }
       }
    }  

    备节点

    ! Configuration File for keepalived
    
    global_defs {
       router_id slave
       vrrp_mcast_group4 224.0.0.7
    }
    
    vrrp_instance DR1 {
        state BACKUP
        interface ens33
        virtual_router_id 77
        priority 99
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.159.111
        }
    }
    virtual_server 192.168.159.111 8888 {   #虚拟地址组,就是上面虚拟出来的ip加上业务端口
        delay_loop 6                                     #健康检查周期,单位为秒
        lb_algo rr                                          #调度算法
        lb_kind DR                                        #调度模型 
        persistence_timeout 0                        #同一ip在多少秒内发来的请求都送给同一realserver
        protocol TCP
        sorry_server 192.168.159.130 8888   #当realserver都挂掉的时候,将请求发送给谁
        real_server 192.168.159.132 8888 {   #rs1的检查
            TCP_CHECK {                                #检查方法,有HTTP_GET,SSL_GET,TCP_CHECK
                connect_timeout 3                     #连接超时时间
                nb_get_retry 3                          #重试次数
                delay_before_retry 3                  #重试时间间隔
                connect_port 8888                    #连接端口
             }
        }
        real_server 192.168.159.133 8888 {
            HTTP_GET {
                 url {                                       #检查方法
                    path /                                  #请求路径
                    status_code 200                   #返回状态码为200代表正常
            }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3 
           }
       }
    }
    

      

      

      

     

    初学linux,每学到一点东西就写一点,如有不对的地方,恳请包涵!
  • 相关阅读:
    Python3 使用requests请求,解码时出错:'utf8' codec can't decode byte 0x83 in position 1: invalid start byte
    快速上手阿里云oss SDK
    peewee 通俗易懂版
    gunicorn开启、关闭和重启
    Vector和ArrayList区别
    Hibernate与MyBatis
    redis缓存
    Innodb学习
    基本数据结构-图
    基本数据结构-树
  • 原文地址:https://www.cnblogs.com/forlive/p/10004278.html
Copyright © 2011-2022 走看看