keepalived搭建高可用nginx负载均衡集群

本文详细介绍了如何使用Keepalived和Nginx搭建高可用的负载均衡集群,包括软件的安装、配置文件的编写、检测脚本的编辑以及服务的启动过程。通过主从和双主配置,确保了系统的稳定性和高可用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

keepalived搭建高可用nginx负载均衡集群

1、nginx的安装

nginx编译需要使用一些插件,不然编译报错,所以在安装前先执行如下命令:
1、yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

2、wget http://nginx.org/download/nginx-1.13.0.tar.gz下载nginx压缩文件。
在这里插入图片描述
3、tar -zxvf nginx-1.13.0.tar.gz -C ./ 建议下载的nginxgz包
4、进入nginx解压后的目录执行 ./configure --prefix=/usr/local/nginx,如下:
在这里插入图片描述
5、make & make install 安装nginx
在这里插入图片描述
在这里插入图片描述
6、/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf启动nginx。

2、keepalived的安装

keepalived下载地址:https://www.keepalived.org/download.html
下载后通过ftp或其它方式上传到服务器制定目录下。
执行命令
1、tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/
2、yum install -y openssl openssl-devel(需要安装一个软件包)
3、cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived
4、make && make install

编译出现这个警告的话*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.
则执行yum -y install libnl libnl-devel

3、keepalived配置文件

高可用有2种方式。
1、Nginx+keepalived 主从配置

这种方案,使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候,永远处于浪费状态,对于服务器不多的网站,该方案不经济实惠。

2、Nginx+keepalived 双主配置

这种方案,使用两个vip地址,前端使用2台机器,互为主备,同时有两台机器工作,当其中一台机器出现故障,两台机器的请求转移到一台机器负担,非常适合于当前架构环境。

本次例子是使用主从配置。

主keepalived配置文件 vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {#全局配置
        notification_email {#指定keepalived在发生切换时需要发送email到的对象,一行一个
            root@localhost #指定收件人邮箱
        }
        notification_email_from root@localhost #指定发件人
        smtp_server 127.0.0.1 #指定smtp服务器地址
        smtp_connect_timeout 30 #指定smtp连接超时时间
        router_id LVS_MASTER #此处注意router_id为负载均衡标识,在局域网内应该是唯一的。
}
  
  
vrrp_script chk_http_port {      
    script "/opt/chk_nginx.sh"   #这里通过脚本监测
    interval 2                   ## 检测时间间隔
    weight -5                    ## 如果条件成立,权重-5
    fall 2                    # 失败两次后判定故障
    rise 1                # 成功一次后判定成功
}
  
vrrp_instance VI_1 {   
    state MASTER    #指定那个为master,那个为backup,如果设置了nopreempt这个值不起作用,主备考priority决定
    interface eth0      #设置实例绑定的网卡
    virtual_router_id 55         #VPID标记
    priority 101 #优先级,高优先级竞选为master
    advert_int 1               #检查间隔,默认1秒  
    authentication {             #设置认证,两个节点必须一致
        auth_type PASS           #认证方式,类型主要有PASS、AH 两种
        auth_pass root           #认证密码
    }
    virtual_ipaddress {          #虚拟 IP 池, 两个节点设置必须一样
        10.150.28.107        #设置vip
    }
 
    track_script {                      #用于追踪脚本判断nginx是否正常,不正常关闭keepalived
        chk_http_port                    
    }
}

备keepalived配置文件 vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived    
  

global_defs {
        notification_email {
            root@localhost
        }
        notification_email_from root@localhost
        smtp_server 127.0.0.1
        smtp_connect_timeout 30
        router_id LVS_MASTER
}
 
  
vrrp_script chk_http_port {         
    script "/opt/chk_nginx.sh"   
    interval 2                      
    weight -1                       
    fall 2                   
    rise 1                  
}
  
vrrp_instance VI_1 {            
    state BACKUP           
    interface eth0
    virtual_router_id 55
    priority 99
    advert_int 1               
    authentication {            
        auth_type PASS         
        auth_pass root          
    }
    virtual_ipaddress {        
        10.150.28.107
    }
 
    track_script {                     
        chk_http_port                 
    }
 
}

4、编辑nginx检测脚本

vi /opt/chk_nginx.sh (需要在主备机器上都生成脚本文件)
chmod a+x chk_nginx.sh(赋予脚本执行权限)
工作过程中,keepalived连接到nginx异常后,启动脚本检测nginx是否挂掉,如果挂掉后,尝试重新启动nginx,等待2s继续查看nginx是否正常,如果不正常则剔除本台机器的keepalived服务。

#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
    /usr/sbin/nginx -c /etc/nginx/nginx.conf
    sleep 2
    counter=$(ps -C nginx --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
        systemctl stop keepalived.service
    fi
fi

启动keepalived服务:systemctl start keepalived.service
需要关闭防火墙或开放端口!!!
此时本地通过访问vip即可看到nginx页面,如下:
在这里插入图片描述
这时候,其实访问的只有主keepalived+nginx,你可以通过停止systemctl stop keepalived.service后继续访问vip,发现页面正常,这时候使用的就是备用keepalive。
脚本校验则把主keepalived的那台机器上的nginx停掉,发现几秒后nginx自动启动了(保证keepalived服务正常)则脚本正常。脚本没有重启nginx可以尝试使用setenforce 0命令,这个命令时临时的,重启不生效,需要sed -i “s/^SELINUX=.*/SELINUX=disabled/g” /etc/selinux/config永久关闭,然后重启服务器生效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值