1. keepalived

    keepalived的诞生本是为lvs提供高可用的,但是现在keepalived可以当成一组独立的高可用组件来使用,其主要是通过VRRP协议实现高可用(VRRP是什么这里不做过多介绍),而keepalived实现故障转移主要是通过优先级抢占来实现的(也可通过down掉其中一个keepalived),通常情况下是一主一备(当然也可以双主),

  2. 下面是官网的keepalived设计图

    keepalived+nginx实现双机热备_第1张图片

    2.1Scheduler -I/O Multiplexer

         keepalived是使用I/O复用实现管理通信的.

    2.2 Memory Mngt

          keepalived自己实现内存管理,包括内存分配,内存再分配,内存释放等.

    2.3 Control Plane

         配置管理的东东,只需要按照默认的配置文件格式即可

    2.4 Watch Dog

        keepalived启动时会生成三个进程,其中主进程就靠这个Watch Dog去监控两个子进程,如果子进程挂了,会尝试去重启子进程,如果启动失败,就会把服务转移到备用节点上.

    2.5 VRRP Stack

        keepalived的一个重要功能,高可用的主要实现之一,VRRP协议主要是实现路由冗余的,keepalived就是靠VRRP在后端的两台real server虚拟一个vip和一个vmac地址,当一台的keepalived(或者使用Checkers监控的服务)挂了的时候可以把vip和vmac转移到另一台real server上,实现高可用.

    2.6Checkers

     这也是keepalived的一个重要功能,主要对后端real server的服务进行健康状态检测的,如果检测到当前定义的检测项dead了的话,通过降低主服务器的优先级来实现故障转移.内置了tcp,http,ssl等检测手段,当然,这些还不够的话,可以使用自定义脚本,

    2.7SMTP

     这个是邮件模块,主要是当服务发生转移或者其它定义的条件被触发时通知管理员使用的.

    2.8 System Call

      自定义对服务检测的脚本

  3. keepalived+nginx(配置如下),ngxinngxin自行定义

    master:


    ! Configuration File for keepalived


    global_defs {  #全局配置段

       notification_email {

         [email protected]

         [email protected]

         [email protected]

       }

       notification_email_from [email protected]

       smtp_server 127.0.0.1

       smtp_connect_timeout 30

       router_id LVS_DEVEL

    }

    vrrp_script check_down {  #通过检测nginx服务是否在线,动态调整优先级

      script "`killall -0 nginx ` &> /dev/null && exit 0 || exit 1"

      interval 1

      weight -2

    }


    vrrp_instance VI_1 {

        state MASTER

        interface eth0

        virtual_router_id 51

        priority 100 #master进程优先级

        advert_int 1 #检测时长间隔

        authentication {

            auth_type ldf #和backup的验证机制

            auth_pass 1212

        }

        virtual_ipaddress {

            192.168.128.222 #vip

        }

        track_script { #追踪上面定义的检测脚本名

          check_down 

           }

    }

  4. backup


    ! Configuration File for keepalived


    global_defs {

       notification_email {

         [email protected]

         [email protected]

         [email protected]

       }

       notification_email_from [email protected]

       smtp_server 127.0.0.1

       smtp_connect_timeout 30

       router_id LVS_DEVEL

    }

    vrrp_script check_down {

      script "`killall -0 nginx ` &> /dev/null && exit 0 || exit 1"

      interval 1

      weight -2

    }


    vrrp_instance VI_1 {

        state BACKUP #backup

        interface eth0

        virtual_router_id 51 #虚拟mac地址,不能超过255

        priority 99 #backup优先级

        advert_int 1

        authentication {

            auth_type ldf

            auth_pass 1212

        }

        virtual_ipaddress {

            192.168.128.222

        }

        track_script {

          check_down

           }

    }