keepalived安装及组合nginx配置负载实现高可用

目录

1. Keepalived安装配置

1.1 官网下载tar包

https://www.keepalived.org/

1.2 上传到指定目录安装

./configure --prefix=/usr/local/keepalived --sysconf=/etc

*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.

如果出现上述提示,则执行下面命令安装libnl:
yum install -y libnl

make && make install

1.3 配置文件

cd /etc/keepalived
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf

配置文件内容如下:

! Configuration File for keepalived
#全局配置
global_defs {
   # 负载均衡标识,在局域网内应该是唯一的。一般为主机名。
   router_id 主机名称
}

vrrp_script chk_http_port {
    # 检测心跳执行的脚本
    script "/usr/local/src/nginx_check.sh"
    # 检测脚本执行间隔,单位:秒
    interval 4
    weight 2
}

#定义实例
vrrp_instance VI_1 {
    # 指定keepalived的角色,MASTER为主,BACKUP为备
    state MASTER
    # 当前进行vrrp通讯的网络接口卡(当前centos的网卡)
    interface ens33
    # 指定VRRP实例ID(虚拟路由编号),范围是0-255,主从要一致
    virtual_router_id 202
    # 优先级,数值越大,获取处理请求的优先级越高, 优先级高的将成为MASTER。
    priority 100
    # 指定发送VRRP通告的间隔,默认为1s(vrrp组播周期秒数)
    advert_int 1
    # 设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
    authentication {
        # 指定认证方式。PASS简单密码认证(推荐),AH:IPSEC认证(不推荐)。
        auth_type PASS
        # 指定认证所使用的密码。最多8位。
        auth_pass 2020
    }
    # 调用检测脚本
    track_script {
        chk_http_port
    }
    # 定义虚拟ip(VIP),可多设,每行一个
    virtual_ipaddress {
        192.168.199.143
    }
}

1.4 配置nginx检测脚本文件

cd /usr/local/src
vim nginx_check.sh

脚本内容:

#!/bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx-1.18.0/sbin/nginx
    sleep 4
    if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

1.5 keepalived 启动/重启/停止/查看状态

systemctl start/restart/stop/status keepalived

注:启动keepalived会执行nginx检测脚本,此时如果nginx未启动则会同时启动nginx。

1.6 查看日志

tail -f /var/log/messages

1.7 浏览器访问虚拟IP地址

192.168.199.143

2. nginx负载均衡配置

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    upstream minio-server {
        # weight:默认为1。weight越大,负载的权重就越大。
        # backup:其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
        # max_fails:允许请求失败的次数默认为1,当超过最大次数时,返回 proxy_next_upstream 模块定义的错误。
        # fail_timeout:Nginx基于连接探测,如果发现后端异常,在单位周期为fail_timeout设置的时间中达到max_fails次数,这个周期次数内,如果后端同一个节点不可用,那么把节点标记为不可用,并等待下一个周期(同样时常为fail_timeout)再一次去请求,判断是否连接是否成功。
        server 192.168.199.140:9000 weight=2 max_fails=3 fail_timeout=10s;
        server 192.168.199.141:9000 max_fails=3 fail_timeout=30s;
    }
    server {
        listen       80;
        server_name  192.168.199.143;

        charset utf-8;

        location / {
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-For $remote_addr;
            # 传输文件缓存大小及单次请求大小
            client_body_buffer_size 10M;
            client_max_body_size 1G;
            # 宕机检测,如果设置时间内无响应,则直接切换到其它服务
            proxy_connect_timeout 4;
            proxy_send_timeout 4;
            proxy_read_timeout 4;

            proxy_pass http://minio-server;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

此配置下 nginx + keepalived 在多台服务器上搭建,可以实现高可用负载均衡。