• Keepalived+Nginx高可用集群


      Keepalived简介

      Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

      keepalived工作原理

      keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议

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

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

      

      keepalived三个主要功能

      管理LVS负载均衡软件

      实现LVS集群节点的健康检查中

      作为系统网络服务的高可用性(failover)

      PS:本次主要介绍高可用功能

      

      Keepalived安装配置

      安装环境查看

      本次试验使用yum安装

    yum -y install keepalived
    

      查看版本

      配置文件为/etc/keepalived/keepalived.conf

      全局配置文件

    lobal_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id lb01
       vrrp_skip_check_adv_addr
    #   vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    

      用来配置router_id(全局唯一) 以及邮箱等信息

      PS:配置邮件用于出现故障发送邮件,工作中这个工作一般交由监控软件zabbix等负责,可以不配置

      vrrp配置部分

    vrrp_instance VI_1 {
        state MASTER            #设备状态是主
        interface eth0           #绑定的网络接口是eth0
        virtual_router_id 55        #虚拟路由ID 主备这个ID必须一致 
        priority 150                     #优先级数值越高优先级越高,备的优先级需低于此数值 
        advert_int 1            #主备同步间隔单位是秒
        authentication {
            auth_type PASS
            auth_pass 1111         #主备认证方式,主备密码需要一致
        }
        virtual_ipaddress {        #虚拟IP地址以及绑定的网卡
            192.168.56.22/24 dev eth0 label eth0:1
        }
    }
    

      用于配置主备状态,接口,优先级,认证方式IP信息等

      

      高可用服务单实例实战

      图示

      192.168.56.11的keepalived配置

    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         liuym@abc.com
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id lb01
    #  vrrp_strict
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 55
        priority 150
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.56.22/24 dev eth0 label eth0:1
        }
    }
    

      192.168.56.12的keepalived配置

    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         liuym@abc.com
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id lb02
    #  vrrp_strict
    }
    
    vrrp_instance VI_1 {
        state BACKEND
        interface eth0
        virtual_router_id 55
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.56.22/24 dev eth0 label eth0:1
        }
    }
    

      说明:router_id不一样  

                主备状态不一样(一台是MASTER一台是BACKEDN在配置文件里必须是大写)

         优先级不一样

      PS:vrrp_strict是默认的配置需要注释,否则会导致VIP不通

       

      启动keepalived验证两台主机均启动

     systemctl start keepalived
    

      192.168.56.11生产了虚拟IP

      192.168.56.12没有虚拟IP

      停止主keepalived责备机接管虚拟VIP

      主节点没有了虚拟VIP

      主节点再次启动keepalived 因为主节点优先级别高又会自动接管虚拟VIP

      keepalived+nginx实现高可用集群

      图示如下

      1,对外提供的VIP是192.168.56.22

      2,其中正常工作是由11提供服务

      3,11宕机的情况VIP会漂移至22主机,用户无感知

      

      11和12主机分别安装nginx并设置反向代理,这里为了方便仅仅反向代理一台主机,生产中是有多台主机的

      nginx.conf配置如下(两台主机nginx配置一样反向代理了11的8080生产中是其他应用的多台主机)

    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        log_format access_log_json '{"user_ip":"$http_x_forwarded_for","lan_ip":"$remote_addr","log_time":"$time_iso8601","user_rqp":"$request","http_code":"$status","body_bytes_sent":"$body_bytes_sent","req_time":"$request_time","user_ua":"$http_user_agent"}';
        sendfile        on;
        keepalive_timeout  65;
        upstream www_server_pools {
            server 192.168.56.11:8080;
        }
        server {
            listen       192.168.56.22:80;
            server_name  www.liuym.com;
            access_log  /data/logs/nginx/http-access.log  access_log_json;
            error_log /data/logs/nginx/http-error.log;
            location / {
                proxy_pass http://www_server_pools;
                proxy_set_header Host $host;
                proxy_set_header x-Forwarded-For $remote_addr;
            }
        }
    }
    

      注意这里server_name指定了VIP加端口进行绑定,其他配置为nginx基础知识

      客户端设置hosts指向的ip是VIP192.168.56.22 生产中是DNS地址

      web界面通过域名访问(这里使用一个8080端口启动的jenkins作为示例)

      测试VIP漂移

      在master停止keepalived客户端还是可以继续访问该页面

      PS:备节点nginx配置了VIP绑定,但是实际主机并没有该VIP在启动nginx的时候会报错

      解决办法,修改内核参数/etc/sysctl.conf增加一条

    net.ipv4.ip_nonlocal_bind = 1
    

      执行生效

    sysctl -p
    

      

      默认情况下是keepalived软件是在对方宕机或者keepalived停止情况下才接管业务,假如是主节点的Nginx业务有问题呢

      可以写一个脚本监控Nginx如果nginx停止服务就停止keepalived

      check_nginx.sh

    #!/bin/bash
    while true
        do
            if [ ` netstat -lntup|grep nginx|wc -l` -ne 1 ];then
    	    systemctl stop keepalived
            fi
    	    sleep 5
        done
    

      检测如果nginx宕机则停止keepalived

      后台运行即可

     sh check_nginx.sh &
    

      

  • 相关阅读:
    OutOfMemoryError异常
    synchronized四种锁状态的升级
    题解LeetCode--三数之和
    JDK 8的HashMap源码解析
    LinkedList原理分析
    队列与LinkedList原理实现
    Java中的递归以及不死神兔实例(斐波那契数列)
    递归问题1
    排序的第二天_快速排序与归并排序
    yum源遇到的问题
  • 原文地址:https://www.cnblogs.com/minseo/p/9216499.html
Copyright © 2020-2023  润新知