配置Keepalive实现nginx高可用

搭建环境

  • 已关闭防火墙,关闭selinux;
  • 所用服务器IP地址如下:
IP地址服务器服务
192.168.91.129masterkeepalived、nginx
192.168.91.130backupkeepalived、nginx
192.168.91.254(VIP)master、backup----------------------

搭建步骤

配置keepalived

  • 配置192.168.91.129和192.168.91.130网络源
[root@master ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@master ~]# sed -i 's/$releasever/7/g' /etc/yum.repos.d/CentOS-Base.repo
[root@master ~]# yum -y install epel-release
[root@master ~]# yum -y install keepalived nginx
[root@master ~]# scp /etc/yum.repo/CentOS-Base.repo root@192.168.91.130:/etc/yum.repo.d/
[root@backup ~]# yum -y install epel-release
[root@backup ~]# yum -y install keepalived nginx
  • 启动192.168.91.129和192.168.91.130的nginx服务,并查看端口
[root@master ~]# systemctl start nginx
[root@master ~]# ss -ntl
State       Recv-Q Send-Q               Local Address:Port                 Peer Address:Port 
LISTEN      0      128                              *:80                              *:*      
LISTEN      0      128                             :::80                             :::*     
  • 在浏览器上进行访问

    • 192.168.91.129(master)上nginx的的测试页面
      在这里插入图片描述
    • 192.168.91.130(backup)上nginx的测试页面
      在这里插入图片描述
  • 配置192.168.91.129(master)的/etc/keepalived/keepalived.conf配置文件

[root@master ~]# cp -a  /etc/keepalived/keepalived.conf{,.bak}
[root@master ~]# cat > /etc/keepalived/keepalived.conf << EOF
! Configuration File for keepalived
global_defs {
   router_id 001
}

vrrp_instance VI_1 {
    state MASTER
    interface eno16777736
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.91.254
    }   
}
virtual_server 192.168.91.254 80 {
    delay_loop 6
    lb_algo rr 
    lb_kind DR
    persistence_timeout 50
    protocol TCP
    
    real_server 192.168.91.129 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.91.130 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
EOF
  • 配置192.168.91.129(backup)的/etc/keepalived/keepalived.conf配置文件(注:route_id不同)
[root@master ~]# cat > /etc/keepalived/keepalived.conf << EOF
! Configuration File for keepalived
global_defs {
   router_id 002
}

vrrp_instance VI_1 {
    state BACKUP				##修改初始状态为BACKUP
    interface eno16777736
    virtual_router_id 51
    priority 90					##低于MASTER优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.91.254
    }   
}
virtual_server 192.168.91.254 80 {
    delay_loop 6
    lb_algo rr 
    lb_kind DR
    persistence_timeout 50
    protocol TCP
    
    real_server 192.168.91.129 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.91.130 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
EOF
  • 启动master和backup上的keepalived服务,并设置开机自动启动
[root@master ~]# systemctl start keepalived
[root@master ~]# systemctl enable keepalived
ln -s '/usr/lib/systemd/system/keepalived.service' '/etc/systemd/system/multi-user.target.wants/keepalived.service'
  • 查看虚拟IP地址在哪个服务器上
## master上的IP地址 ##
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:47:34:cd brd ff:ff:ff:ff:ff:ff
    inet 192.168.91.129/24 brd 192.168.91.255 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet 192.168.91.254/32 scope global eno16777736
       valid_lft forever preferred_lft forever

## backup上的IP地址 ##
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:39:25:f5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.91.130/24 brd 192.168.91.255 scope global eno16777736
       valid_lft forever preferred_lft forever

脚本监控nginx

让keepalived监控nginx负载均衡机

  • 在192.168.91.129服务器(master)创建脚本存放位置,并编写脚本
[root@master ~]# mkdir /etc/keepalived/scripts
[root@master ~]# vim /etc/keepalived/scripts/check_n.sh
#!/bin/bash
nginx_status=$(ps aux | grep -Ev "grep|$0" | grep '\bnginx\b' | wc -l)
if [ $nginx_status -lt 1 ];then
        systemctl stop keepalived
fi

[root@master ~]# chmod +x /etc/keepalived/scripts/check_n.sh 
[root@master ~]# ll /etc/keepalived/scripts/check_n.sh
-rwxr-xr-x. 1 root root 146 Nov  1 02:45 /etc/keepalived/scripts/check_n.sh
[root@master ~]# vim /etc/keepalived/scripts/notify.sh
#!/bin/bash
VIP=$2
function sendmail () {
        subject="${VIP}'s server keepalived state is change."
        connect="$(date +'%F %T'): $(hostname)'s state change to master"
        echo $connect | mail -s "$subject" <收件人>
}
case "$1" in
        master)
                nginx_status=$(ps aux | grep -Ev "grep|$0" | grep '\bnginx\b' | wc -l)
                if [ $nginx_status -lt 1 ];then
                        systemctl start nginx
                fi
                sendmail
        ;;
        backup)
                nginx_status=$(ps aux | grep -Ev "grep|$0" | grep '\bnginx\b' | wc -l)
                if [ $nginx_status -gt 0 ];then
                        systemctl stop nginx
                fi
                sendmail
        ;;
        *)
                echo "Usage:$0 master|backup VIP"
        ;;
esac
[root@master ~]# chmod +x /etc/keepalived/scripts/notify.sh
[root@master ~]# ll /etc/keepalived/scripts/notify.sh
-rwxr-xr-x. 1 root root 596 Nov  1 02:55 /etc/keepalived/scripts/notify.sh8
  • 在192.168.91.130服务器(backup)创建脚本存放位置,并编写脚本
[root@backup ~]# mkdir /etc/keepalived/scripts
[root@backup ~]# vim /etc/keepalived/scripts/notify.sh
#!/bin/bash
VIP=$2
function sendmail () {
        subject="${VIP}'s server keepalived state is translate."
        content="$(date +'%F %T'): $(hostname)'s state change to master."
        echo $connect | mail -s "$subjecj" liyangwanjia@126.com
}
case "$1" in
        master)
                nginx_status=$(ps aux | grep -Ev "grep|$0" | grep '\bnginx\b' | wc -l)
                if [ $nginx_status -lt 1 ];then
                        systemctl start nginx
                fi
                sendmail
        ;;
        backup)
                nginx_status=$(ps aux | grep -Ev "grep|$0" | grep '\bnginx\b' | wc -l)
                if [ $nginx_status -gt 0 ];then
                        systemctl stop nginx
                fi
                sendmail
        ;;
        *)
                echo "Usage:$0 master|backup VIP"
        ;;

[root@backup ~]# chmod +x /etc/keepalived/scripts/notify.sh
[root@backup ~]# ll /etc/keepalived/scripts/notify.sh
-rwxr-xr-x. 1 root root 604 Nov  1 04:01 /etc/keepalived/scripts/notify.sh

配置keepalived加入监控脚本的设置

  • 配置192.168.91.129(master)的/etc/keepalived/keepalived.conf配置文件
global_defs {
   router_id 002
}

vrrp_script nginx_check {
        script "/etc/keepalived/scripts/check_n.sh"			##执行监控脚本
        interval 1				##1秒钟执行一次
        weight -20
}
......
    virtual_ipaddress {
        192.168.91.254
    }
    track_script {
        nginx_check
    }
    ## 执行脚本,发送邮件报警。当状态从BACKUP改变为MASTER时发送邮件 ##
    notify_master "/etc/keepalived/scripts/notify.sh master 192.168.91.254"
    ## 执行脚本,发送邮件报警。当状态从MASTER改变为BACKUP时发送邮件 ##
    notify_backup "/etc/keepalived/scripts/notify.sh backup 192.168.91.254"
......
  • 配置192.168.91.130(backup)的/etc/keepalived/keepalived.conf配置文件
[root@backup ~]# vim /etc/keepalived/keepalived.conf
......
    virtual_ipaddress {
        192.168.91.254
    }
    notify_master "/etc/keepalived/scripts/notify.sh master 192.168.91.254"
    notify_backup "/etc/keepalived/scripts/notify.sh backup 192.168.91.254"
......
  • 当master这台服务器中nginx服务挂掉后,keepalived服务监控到后会将自己停止掉
[root@master ~]# ip a
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:47:34:cd brd ff:ff:ff:ff:ff:ff
    inet 192.168.91.129/24 brd 192.168.91.255 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet 192.168.91.254/32 scope global eno16777736
       valid_lft forever preferred_lft forever
[root@master ~]# ps aux|grep -E "keepalived|nginx"
root      60367  0.0  0.2 121148  2092 ?        Ss   12:03   0:00 nginx: master process /usr/sbin/nginx
nginx     60368  0.0  0.3 121612  3312 ?        S    12:03   0:00 nginx: worker process
nginx     60369  0.0  0.3 121612  3312 ?        S    12:03   0:00 nginx: worker process
root      60376  0.0  0.1 119144  1376 ?        Ss   12:03   0:00 /usr/sbin/keepalived -D
root      60377  0.0  0.2 119264  2588 ?        S    12:03   0:00 /usr/sbin/keepalived -D
root      60378  0.0  0.2 121240  2464 ?        S    12:03   0:00 /usr/sbin/keepalived -D
[root@master ~]# systemctl stop nginx
[root@master ~]# ps aux|grep -E "keepalived|nginx"
root      65627  0.0  0.0 112640   992 pts/1    S+   12:16   0:00 grep --color=auto -E keepalived|nginx
  • 当master服务器出现问题后,VIP会跳到BACKUP上,并发送邮件
[root@backup ~]# ip a
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:39:25:f5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.91.130/24 brd 192.168.91.255 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet 192.168.91.254/32 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe39:25f5/64 scope link 
       valid_lft forever preferred_lft forever

在这里插入图片描述

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
keepalivenginx都与可用相关。keepalive是一个用于维持TCP连接的工具,它可以确保在网络中的连接保持活跃,从而提服务的可用性和可靠性。而nginx是一个性能的Web服务器和反向代理服务器,它可以处理大量的并发连接并分发请求到不同的后端服务器,从而提供可用性和负载均衡。在可用的部署中,我们可以将nginxkeepalive结合使用,通过配置keepalive来监控后端服务器的健康状态,并使用nginx实现负载均衡和故障转移,以保证系统的可用性。引用中的命令systemctl enable nginx keepalived用于启用nginxkeepalived服务,使其在系统启动时自动运行。引用中的命令systemctl enable kubelet用于启用kubelet服务,kubelet是Kubernetes集群中的一个核心组件,它负责管理节点上的容器和Pod。而引用中的命令vim /etc/nginx/nginx.conf用于编辑nginx配置文件,通过配置nginx的参数和指令可以实现可用性的设置,例如配置反向代理、负载均衡和健康检查等。因此,通过结合keepalivenginx的使用,我们可以实现可用的部署和管理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [keepalive+nginx可用K8S集群部署](https://blog.csdn.net/fzqdyyd/article/details/127340860)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值