zoukankan      html  css  js  c++  java
  • Keepalive介绍及工作原理

    注:keepalive和Nginx和高可用没有关联。

    1.什么是高可用,为什么要设计高可用?

    1.两台业务系统启动着相同的服务,如果有一台故障,另一台自动接管,我们将中国称之为高可用。
    2.系统可用率算法例:
    -1个9:(1-90%)*365=36.5天 ----> 表示该系统1年时间里最多可能的业务中断时间是36.5天
    -2个9:(1-99%)*365=3.65天 ----> 表示该系统1年时间里最多可能的业务中断时间是36.5天

    2.高可用的目的?

    保证系统可实时不间断的使用。

    3.高可用使用什么工具来实现?

    软件:keepalive

    4.keepalive如何实现高可用?

    keepalive是通过vrrp(虚拟路由冗余协议)实现高可用。


     
    VRRP协议原理

    5.keepalive使用场景

    通常业务系统需要保证7X24小时不down机。比如公司内部OA系统,每天公司人员都需要使用,则不允许down机。作为业务系统来说随时随地地都要求可用。


     
    场景及原理说明

    6.keepalive安装与配置

    1.安装

    yum install -y keepalive
    

    2.配置[root@lb01 ~]#

    **lb01配置**:
    cat /etc/keepalived/keepalived.conf
    global_defs {     
        router_id lb01     #标识信息
    }
    
    vrrp_instance VI_1 {
        state MASTER
        priority 150                      #优先级
        interface eth0                    #绑定的网卡
        virtual_router_id 50              #同一个虚拟的路由
        advert_int 1                      #心跳的间隔时间
        authentication {
            auth_type PASS      #两个主机之间的密语
            auth_pass 1111          #心跳密码
    }
        virtual_ipaddress {
            10.0.0.3     #虚拟IP地址(可以绑定多个虚拟IP地址)
        }
    }
    **lb02配置**:
    #lb02配置如下
    global_defs {
        router_id lb02
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        priority 100
        interface eth0
        virtual_router_id 50
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            10.0.0.3         #虚拟IP地址
        }
    }
    

    3.启动

    systemctl  start keepalive
    

    4.测试:keepalive高可用地址漂移
    (1)keepalive提供一个VIP(虚拟IP)和vmac(虚拟Mac地址)


     
    虚拟IP地址

    (2)抓包测试


     
    抓包测试

    7.keepalive高可用抢占式和非抢占式

    (1)默认配置为抢占式:
    master挂掉,backup上台,master重新启动则讲IP抢占过去。
    (2)非抢占式配置:
    两台均为backup,在优先级上做区分,如master挂掉,backup上台,则backup变成master,master变为backup。
    a.两个节点的state均为backup(官方建议)
    b.两个节点都在vrrp_instance中添加nopreempt
    c.其中一个节点的优先级要高于另外一个节点
    两台服务器角色都启用了nopreempt后,必须修改角色状态统一为backup,唯一的区别就是优先级不同。

    #Master
        vrrp_instance VI_1 {
            state BACKUP
            priority 150
            nopreempt    
        }
    
    #Backup
        vrrp_instance VI_1 {
            state BACKUP
            priority 100
            nopreempt
        }
    

    8.keepalive高可用与Nginx集成

    • PS: 有Nginx负载均衡,并不一定必须要装Keepalived
    • Nginx负载均衡实现高可用,需要借助Keepalived地址漂移功能
    • 比如:第一次 keepalived绑定在Master上, 通过vip地址访问到这台master上的所有服务
    • 因为所有的服务都是 listen port;

    9.keepalive问题

    keepalive高可用故障脑裂
    由于某些原因,导致两台keepalive高可用服务器在指定时间内,无法检测到对方的心跳消息,各自取得资源及服务的所有权,而此时的两台高可用服务器又都还活着。
    a.服务器网线松动等网络故障
    b.服务器硬件故障发生损坏现象而奔溃
    c.主备服务器都开启了firewalld防火墙
    解决方法:

    • 如果Nginx宕机, 会导致用户请求失败, 但Keepalived并不会进行地址漂移
    • 所以需要编写一个脚本检测Nginx的存活状态, 如果不存活则kill nginx和keepalived
    # 脚本如下
    [root@lb01 ~]# cat  /server/scripts/check_www.sh
    #!/bin/sh
    nginxpid=$(ps -C nginx --no-header|wc -l)
    #1.判断Nginx是否存活,如果不存活则尝试启动Nginx
    if [ $nginxpid -eq 0 ];then
        systemctl start nginx
        sleep 3
        #2.等待3秒后再次获取一次Nginx状态
        nginxpid=$(ps -C nginx --no-header|wc -l) 
        #3.再次进行判断, 如Nginx还不存活则停止Keepalived,让地址进行漂移,并退出脚本  
        if [ $nginxpid -eq 0 ];then
            systemctl stop keepalived
       fi
    fi
    [root@lb01 ~]# chmod +x /server/scripts/check_www.sh
    

    配置keepalived使用

    [root@lb01 ~]# cat /etc/keepalived/keepalived.conf
    global_defs {     
        router_id lb01   
    }
    
    #定义脚本所在的位置,以及执行时间
    vrrp_script  check_www {
        script "/server/scripts/check_www.sh"
        interval 5
    }
    
    
    vrrp_instance VI_1 {
        state BACKUP
        priority 150
        nopreempt
        interface eth0
        virtual_router_id 50
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
    }
        virtual_ipaddress {
            10.0.0.3
        }
    
        #调用脚本
        track_script {
            check_www
        }
    }


    作者:张福帅19
    链接:https://www.jianshu.com/p/ea412143e017
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    RStudio快捷键
    R语言中"NA"与"NULL"的区别
    R httr 文档
    使用 Setup 将Python 代码 打包
    mysql中运用条件判断筛选来获取数据
    mysql的事物,外键,与常用引擎
    mysql数据库终端上的增删改查及权限等相关操作
    清华源和豆瓣源
    saltstack 自动化运维
    redis的主从复制,以及使用sentinel自动处理主机宕机问题,集群
  • 原文地址:https://www.cnblogs.com/lgj8/p/13468539.html
Copyright © 2011-2022 走看看