Keepalived+nginx最简应用(Linux)

本文详细介绍了如何在两台Nginx服务器上通过Keepalived实现高可用性,包括Keepalived的基本概念、源码安装、配置文件编写以及故障检查。在主备服务器上分别配置Keepalived,确保VIP在主服务器宕机时能自动漂移到备用服务器。同时,文章提到了在Keepalived关闭后VIP未释放的问题,解决方案是手动删除VIP并重启服务。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


环境

环境:两台nginx需要通过keepalived做高可用
主: 192.168.6.48
备: 192.168.6.49
VIP: 192.168.6.58

一、keepalived是什么?

简介: Keepalived 是一个用 C 语言编写的路由软件。这个项目的主要目标是为 Linux 系统和基于 Linux 的基础设施提供简单而强大的负载平衡和高可用性设施。负载平衡框架依赖于众所周知且广泛使用的Linux 虚拟服务器 (IPVS) 内核模块,提供第 4 层负载平衡。Keepalived 实现了一组检查器,以根据其健康状况动态和自适应地维护和管理负载平衡的服务器池。另一方面,高可用性是通过 VRRP实现的协议。VRRP 是路由器故障转移的基础。此外,Keepalived 实现了一组到 VRRP 有限状态机的钩子,提供低级和高速协议交互。为了提供最快的网络故障检测,Keepalived 实现了BFD协议。VRRP 状态转换可以考虑 BFD 提示来驱动快速状态转换。Keepalived 框架可以单独使用,也可以一起使用,以提供弹性基础架构。

二、安装并配置

1.源码包下载

二进制源码包下载地址: keepalived官方download地址


2.安装

将包上传至/data/software

#安装依赖
[root@mankel ~] yum install -y libnfnetlink-devel
[root@mankel ~] cd  /data/software
[root@mankel software] tar -xvf  keepalived-2.2.7.tar.gz
[root@mankel software] cd keepalived-2.2.7
#选择安装目录(可自定义)
[root@mankel keepalived-2.2.7] ./configure --prefix=/data/keepalived
[root@mankel keepalived-2.2.7] make && make install

3.编写配置文件(主)

#192.168.6.48

[root@mankel ~] mkdir /etc/keepalived
[root@mankel ~] cp /data/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
[root@mankel ~] vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id nginx_master
}

vrrp_script check {
   script "/data/script/chk_nginx.sh"
   interval 2
   weight 2
}

vrrp_instance VI_1 {
    state MASTER
    interface ens160
    virtual_router_id 120
    priority 100
    advert_int 3
    mcast_src_ip 192.168.6.48
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.6.58 dev ens160 label ens160:1
    }
    track_script {
       check
    }
}
#启动
[root@mankel ~] /data/keepalived/sbin/keepalived -f /etc/keepalived/keepalived.conf
#查看是否有VIP
[root@mankel ~] ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.6.48  netmask 255.255.255.0  broadcast 192.168.6.255
        inet6 fe80::5bf5:f08c:e9fe:68a0  prefixlen 64  scopeid 0x20<link>
        inet6 fe80::f9b4:e2ff:1bcd:1649  prefixlen 64  scopeid 0x20<link>
        inet6 fe80::6a1d:12e0:bbff:1d43  prefixlen 64  scopeid 0x20<link>
        ether 00:50:56:9b:5b:80  txqueuelen 1000  (Ethernet)
        RX packets 7988711  bytes 645561335 (615.6 MiB)
        RX errors 0  dropped 93  overruns 0  frame 0
        TX packets 2179554  bytes 1056218418 (1007.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens160:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.6.58  netmask 255.255.255.255  broadcast 0.0.0.0
        ether 00:50:56:9b:5b:80  txqueuelen 1000  (Ethernet)

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 12  bytes 8579 (8.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 12  bytes 8579 (8.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

4.编写配置文件(备)

#192.168.6.49

[root@mankel ~] mkdir /etc/keepalived
[root@mankel ~] cp /data/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
[root@mankel ~] vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id nginx_master
}

vrrp_script check {
   script "/data/script/chk_nginx.sh"
   interval 2
   weight 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens160
    virtual_router_id 120
    priority 80
    advert_int 3
    mcast_src_ip 192.168.6.49
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.6.58 dev ens160 label ens160:1
    }
    track_script {
       check
    }
}
#启动
[root@mankel ~] /data/keepalived/sbin/keepalived -f /etc/keepalived/keepalived.conf
#查看是否有VIP
[root@mankel ~] ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.6.49  netmask 255.255.255.0  broadcast 192.168.6.255
        inet6 fe80::5bf5:f08c:e9fe:68a0  prefixlen 64  scopeid 0x20<link>
        inet6 fe80::f9b4:e2ff:1bcd:1649  prefixlen 64  scopeid 0x20<link>
        inet6 fe80::6a1d:12e0:bbff:1d43  prefixlen 64  scopeid 0x20<link>
        ether 00:50:56:9b:61:6f  txqueuelen 1000  (Ethernet)
        RX packets 6240842  bytes 529353225 (504.8 MiB)
        RX errors 0  dropped 305  overruns 0  frame 0
        TX packets 727106  bytes 919279619 (876.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 54  bytes 21494 (20.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 54  bytes 21494 (20.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

5.检查脚本

#当发现nginx挂了之后,停止keepalived服务,使VIP漂移至可用nginx上

[root@mankel ~] vim /data/script/chk_nginx.sh
#!/bin/bash

A=`ps -Cnginx --no-header|wc -l`
if [ $A -eq 0 ]; then
killall -9 keepalived
fi

问题

1.缺少依赖

在这里插入图片描述

#漏了这一步
[root@mankel ~] yum install -y libnfnetlink-devel

2.keepalived关闭后VIP未释放

最简单的方法:
关闭keepalived服务,手动将主上的VIP给去掉,然后重启

[root@mankel ~] ip addr del 192.168.6.58 dev ens160:1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值