• Keepalived 实现 nginx 高可用


     一、什么是 keepalived

      Keepalived是一个免费开源的,用C编写的类似于layer3, 4 & 7交换机制软件,具备我们平时说的第3层、第4层和第7层交换机的功能。主要提供loadbalancing(负载均衡)和 high-availability(高可用)功能,负载均衡实现需要依赖Linux的虚拟服务内核模块(ipvs),而高可用是通过VRRP协议实现多台机器之间的故障转移服务。 

     


      上图是Keepalived的功能体系结构,大致分两层:用户空间(user space)和内核空间(kernel space)。 
    内核空间:主要包括IPVS(IP虚拟服务器,用于实现网络服务的负载均衡)和NETLINK(提供高级路由及其他相关的网络功能)两个部份。 
    用户空间

    • WatchDog:负载监控checkers和VRRP进程的状况
    • VRRP Stack:负载负载均衡器之间的失败切换FailOver,如果只用一个负载均稀器,则VRRP不是必须的。
    • Checkers:负责真实服务器的健康检查healthchecking,是keepalived最主要的功能。换言之,可以没有VRRP Stack,但健康检查healthchecking是一定要有的。
    • IPVS wrapper:用户发送设定的规则到内核ipvs代码
    • Netlink Reflector:用来设定vrrp的vip地址等。

      Keepalived的所有功能是配置keepalived.conf文件来实现的。

      二、安装 keepalived

      下载keepalived地址:http://www.keepalived.org/download.html 

     wget  http://www.keepalived.org/software/keepalived-1.4.1.tar.gz
     #指定解压路径
     tar -zxvf keepalived-1.4.1.tar.gz -C /usr/local/
     #安装依赖的软件包
     yum install -y openssl openssl-devel
     #安装和编译
    cd /usr/local/keepalived-1.4.1/ && ./configure --prefix=/usr/local/keepalived

       make && make install

      keepalived安装成Linux系统服务

       keepalived的默认安装路径(默认路径:/usr/local)此处没有使用默认安装方式

    mkdir /etc/keepalived

    cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

    然后复制keepalived脚本文件:

    cp /usr/local/keepalived-1.4.1/keepalived/etc/init.d/keepalived /etc/init.d/ 

    (或 : cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/)

    cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

    ln -s /usr/local/sbin/keepalived /usr/sbin/

    ln -s /usr/local/keepalived/sbin/keepalived /sbin/

    可以设置开机启动:chkconfig keepalived on

      service keepalived start

      service keepalived stop

     三、配置nginx主备自动重启

      两台 linux 电脑安装了 nginx

      备注:nginx 已成功安装在默认路径   /usr/local/nginx

      修改 keepalived 的配置文件 vim /etc/keepalived/keepalived.conf

      可以备份源配置文件粘贴下面配置 mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

      vim /etc/keepalived/keepalived.conf      :wq

      vim /etc/keepalived/nginx_check.sh

      赋予可执行权限:chmod +x /etc/keepalived/nginx_check.sh

      

       /usr/local/nginx/sbin/nginx

        service keepalived start

        ps -ef | grep nginx

        ps -ef | grep keepalived

      

    ! Configuration File for keepalived
    
    vrrp_script chk_nginx {
        script "/etc/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
        interval 2 #检测时间间隔
        weight -20 #如果条件成立的话,则权重 -20
    }
    # 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
    vrrp_instance VI_1 {
        state MASTER #来决定主从
        interface enth1 # 绑定虚拟 IP 的网络接口,根据自己的机器填写
        virtual_router_id 121 # 虚拟路由的 ID 号, 两个节点设置必须一样
        mcast_src_ip 192.168.110.141 #填写本机ip
        priority 100 # 节点优先级,主要比从节点优先级高
        nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
        advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        # 将 track_script 块加入 instance 配置块
        track_script {
            chk_nginx #执行 Nginx 监控的服务
        }i
    
        viirtual_ipaddress {
            192.168.110.110 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。
        }
    }
    keepalived.conf
    nginx_check.sh

       实际配置如下:

      测试

       首先看一下俩台机器的ip a 命令下 都会出现一个虚拟ip,可以停掉一个机器的keepalived,然后测试,命令:service keepalived stop。结果发现当前停掉的机器已经不可用,keepalived 配置的虚拟 ip 会自动切换到另一台机器上。

      

      停止后:

       

      通过该虚拟 ip 可以进行访问 nginx

      

      四、测试 keepalived 重启 nginx

        强杀掉nginx进程即可,发现也会实现自动切换服务器节点。

      

      五、Keepalived高可用故障切换转移原理

         Keepalived高可用服务对之间的故障切换转移,是通过 VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)来实现的。

      在 Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活看,当主 Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及服务。而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。

      那么,什么是VRRP呢?

      VRRP ,全 称 Virtual Router Redundancy Protocol ,中文名为虚拟路由冗余协议 ,VRRP的出现就是为了解决静态踣甶的单点故障问题,VRRP是通过一种竞选机制来将路由的任务交给某台VRRP路由器的。

  • 相关阅读:
    全球疫情实时监控——约翰斯·霍普金斯大学数据大屏实现方案
    少儿编程崛起?2020年4月编程语言排名发布——Java,C,Python分列前三,Scratch挤进前20
    干货来了!阿里发布近300页Flink实战电子书
    Druid 0.17 入门(3)—— 数据接入指南
    Druid 0.17 入门(2)—— 安装与部署
    Flink 1.10 正式发布!——与Blink集成完成,集成Hive,K8S
    Druid入门(1)—— 快速入门实时分析利器-Druid_0.17
    程序员需要了解依赖冲突的原因以及解决方案
    每日一技|活锁,也许你需要了解一下
    Dubbo 服务 IP 注册错误踩坑经历
  • 原文地址:https://www.cnblogs.com/SacredOdysseyHD/p/8685140.html
Copyright © 2020-2023  润新知