keepalived实现高可用

Posted golinux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keepalived实现高可用相关的知识,希望对你有一定的参考价值。

一.keepalived是什么

keepalived最初是为LVS负载均衡设计的,用于监控LVS集群系统中的各个节点的服务状态。后来又加入了基于VRRP的高可用功能,所以也可以作为nginx,mysql等服务的高可用解决方案使用。

VRRP(Virtual Router Redundancy Protocol)即虚拟路由冗余协议,VRRP的出现是为了解决静态路由单点故障问题的,当网络中的某一个节点挂掉时,可以保证路由的正常运行。

二.keepalived的组成和原理

技术图片

WatchDog:负责监控Checkers,VRRP进程的状态,当checkers或VRRP进程被杀掉时,可以启动一个新的进程来工作

Checkers:负责检查真实节点的健康状态,是keepalived的最主要功能。

VRRP Stack:负责master挂掉后的故障切换,保证服务的连续性,减少服务的不可用时间,当只有一个节点提供服务时,该进程可以不需要

IPVS wrapper:用户发送设定的规则到内核ipvs代码

Netlink Reflector:用来设定vrrp的vip地址等。

keepalived的原理

使用keepalived进行VIP的实现。

虚拟路由冗余协议, 可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

 三.安装配置keepalived

我使用的时centos6.9系统,直接安装自带的keepalived

yum -y install keepalived

相关文件如下

/etc/keepalived    
/etc/keepalived/keepalived.conf     #keepalived服务主配置文件
/etc/rc.d/init.d/keepalived         #服务启动脚本

keepalived的运行日志默认存放在/var/log/messages

四.搭建高可用

(1)准备两台主机,一台master主服务器(192.168.211.113),一台backup备用服务器(192.168.211.112),在两台服务器上都安装keepalived

(2)修改配置文件

master主机

vrrp_script check_nginx     # 自定义脚本check_nginx.sh,当nginx挂掉时,停掉keepalived,使虚拟IP切换到备机
    script /etc/keepalived/check_nginx.sh  # 执行check_nginx.sh脚本
    interval 3  # 每3s执行一次

vrrp_instance VI_1 
    state MASTER  # 标识为master
    interface eth0  # 虚拟ip绑定网卡名称
    virtual_router_id 51  # 虚拟路由id,同一组中所有的服务器需要保持一致
    nopreempt
    priority 100  # 优先级,默认越大优先级越高
    advert_int 1
    authentication   #鉴权配置
        auth_type PASS
        auth_pass 1111
    
    virtual_ipaddress   # 自定义虚拟ip,不能冲突
        192.168.211.201
    
    track_script   # 跟踪执行的脚本
        check_nginx
    
    unicast_src_ip 192.168.211.113   #发送单播消息的源ip
    unicast_peer 
        192.168.211.112  # 发送单播消息的目的IP
    

 backup主机

vrrp_script check_nginx     # 自定义脚本check_nginx.sh,当nginx挂掉时,停掉keepalived,使虚拟IP切换到备机
    script /etc/keepalived/check_nginx.sh  # 执行check_nginx.sh脚本
    interval 3  # 每3s执行一次

vrrp_instance VI_1 
    state BACKUP  # 标识为BACKUP
    interface eth0  # 虚拟ip绑定网卡名称
    virtual_router_id 51  # 虚拟路由id,同一组中所有的服务器需要保持一致
    nopreempt
    priority 100  # 优先级,默认越大优先级越高
    advert_int 1
    authentication   #鉴权配置
        auth_type PASS
        auth_pass 1111
    
    virtual_ipaddress   # 自定义虚拟ip,不能冲突
        192.168.211.201
    
    track_script   # 跟踪执行的脚本
        check_nginx
    
    unicast_src_ip 192.168.211.112   #设置发送单播消息的源ip
    unicast_peer 
        192.168.211.113  # 设置发送单播消息的目的IP
    
/etc/keepalived/check_nginx.sh内容如下,当nginx挂掉时,停掉keepalived,此时虚拟ip会自动切换
 #!/bin/bash
  
  nginx_status=$(netstat -ntlp|grep :80|wc -l)
  if [ $nginx_status -eq 0 ];then
          service keepalived stop
  fi

(3)启动两台服务器上的keepalived

直接直接keepalived命令即可,一般虚拟ip会挂在先启动的那台服务器上

查看虚拟ip如下

master主机(192.168.211.113)上

技术图片

backup主机(192.168.211.112)上

 技术图片

 停掉master主机(192.168.211.113)上的nginx

[[email protected] ~]# service nginx stop

查看此时master上的IP信息

技术图片

backup主机(192.168.211.112)上ip信息

技术图片

可以看到此时虚拟IP已经切换到backuo主机上

 

以上是关于keepalived实现高可用的主要内容,如果未能解决你的问题,请参考以下文章

Keepalived实现服务高可用认识

keepalived实现服务高可用

集群介绍keepalived介绍用keepalived配置高可用集群

keepalived实现服务高可用

Keepalived配置实现HaProxy高可用

keepalived实现服务高可用