• 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

    [root@server04 ~]# service nginx stop

    查看此时master上的IP信息

    backup主机(192.168.211.112)上ip信息

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

  • 相关阅读:
    浮动
    关于在windows下同时安装两个mysql,并用Navicat工具同时连接
    关于Springboot项目打包部署运行,命令行运行jar提示没有主清单属性
    If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.(个人笔记)
    关于IDEA解决默认的javacompile以及Language level自动默认jdk1.5的问题
    你真的精通JavaWeb吗?
    Java8新特性(个人笔记待续)
    Netty(个人笔记待续)
    初识网络编程(1)
    走进shiro
  • 原文地址:https://www.cnblogs.com/golinux/p/10920484.html
Copyright © 2020-2023  润新知