高可用架构之keeplived

工作原理

keepalived高可用之间是通过VRRP通信的。
VRRP中文名字虚拟路由冗余协议,VRRP的出现是为了解决静态的单点故障。
VRRP是通过一种竞选协议机制来将路由任务交给某台VRRP路由器的 
VRRP用IP多播的方式(默认多播地址224.0.0.18)实现高可用对之间的通信

工作时主节点发包,备节点接包,当备节点接受不到主节点发的数据包的时候,就启动接管程序主节点的资源,备节点可以有多个,通过优先级竞选,但一般Keepalived就系统运维工作中是一对的
VRRP使用了加密协议加密数据,但Keepalived 官方目前还是推荐用明文的方式配置认证类型和密码

介绍完了VRRP,接下来在介绍一下Keepalived服务的工作原理
Keepalived高可用对之间是通过VRRP进行通信的,VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此工作时主会优先获取所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供访问。
在Keepalived服务对之间,只有作为住的服务会一直发s送VRRP广播包,告诉备它还活着,此时备不会抢占住,当主不可用时,即备监听不要发送的广播包时,就会启动相关服务接管资源,保证业务的连续性。接管速度最快可以小于1秒


组件介绍

keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护
及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式,vrrp模块是来实现VRRP协议的


主配置文件

[root@lb--01 keepalived]# vim keepalived.conf
  
! Configuration File for keepalived
 
global_defs {
   router_id lb01
}
 
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 666
    priority 199
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3
    }
}


备配置文件

[root@lb--02 keepalived]# vim keepalived.conf
  
! Configuration File for keepalived
 
global_defs {
   router_id lb02
}
 
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 666
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3
    }
}


这种配置检测不太准确,因为只是根据服务器宕机,来判定主备切换的话是不严谨的。(仅限小白使用)


公司级别keepalived  + haproxy  

主要实现方式是:  keepalived 中实时的在执行一个检查脚本,脚本主要内容是通过socket文件给haproxy监听的url 端口,发送1024数据包,判断当收到数据的值,如果这个收到的值为为0 的话就会返回2 ,反之就返回0,  然后keepalived中设置了 weight 的值,并且weight配置的值大于0,则优先级相应的增加。
 
keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加
如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少

cat /etc/keepalived/keepalived.conf 
global_defs {
   notification_email {
     keeplived@system.com
   }
   notification_email_from lcoalhost@system.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id test-10e150e71e180
}
 
vrrp_script chk_http_port {
    script "/etc/keepalived/check_haproxy.sh"
    interval 2
    weight 2
}
 
vrrp_instance VI_1 {
    interface eth0
    virtual_router_id 75
    priority 100
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 2376
    }
    virtual_ipaddress {
        10.150.71.191/22 dev eth0
    }
    virtual_routes {
        default via 192.168.247.1 dev eth0
    }
    unicast_src_ip 10.150.71.180
    unicast_peer {
         10.150.71.181
                 }
    track_script {
         chk_http_port
     }
    notify_master "/etc/keepalived/notify.sh 0"
    notify_backup "/etc/keepalived/notify.sh 1"
    notify_fault "/etc/keepalived/notify.sh 2"
}





上一篇:java.sql.SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required


下一篇:alpha-7