Keepalived入门笔记

Keepalived

很重要的参考文章《nginx高可用方案》

使用一台 Nginx 实现集群功能时,这台总览全局的 Nginx 也就有坏的可能性,一旦这台 Nginx 所在的服务器宕机了,那么后果就可想而知,这时可以想出的解决方案是使用一台 Nginx 备用机当这台主机发生故障的时候,替代它工作,那么这样就可以实现了 Nginx 的高可用(HA (High Availability))。

Keepalived 用于 解决单点故障,在上述例子中,它可以监听 Nginx 的状态,如果 Nginx 发生故障,它会切换到备用机,同时通知管理员, 它基于 VRRP 协议(Virtual Router Redundancy Protocol 虚拟路由冗余协议),从而可以实现 Nginx 高可用 HA 机制。

虚拟路由冗余协议 是解决内网单机故障的路由协议,通过这个协议可以构建多个路由器(这里可看做为一个 Nginx 节点)组成 路由器组,在路由器组里就分为 MASTERBACKUP 两种,每个路由器都创建的时候都需要绑定一个 虚拟IPVIP (Virtual IP Address))。

当路由器绑定了虚拟IP后,使用 ip addr 命令可以看到当前服务器有两个IP地址,一个是内网IP,一个是虚拟IP

它的原理如下图,两台处于同一内网中的 Nginx 服务器分别安装配置了 Keepalived ,并且绑定了一个共同的虚拟IP,当用户进行域名访问时,首先会通过 DNS 解析获取到一个公网IP,而这个公网IP会映射到上述 Keepalived 绑定设置的虚拟IP上,而这个虚拟IP在所有服务器正常运作的情况下,会指向主节点 MASTER 从而实现响应请求。
主节点会定时地向备用机发送 心跳,如果主节点发生故障,备用机就会认为主节点发生故障,从而接替绑定 VIP,从而为用户开启服务;当主节点恢复正常运作,就会重新向备用机发送 心跳,此时备用机就会解绑 VIP,让主节点接替为用户服务。
在这里插入图片描述

1 Keepalived 安装

下载网址,我这里下载的是 Version 2.0.18
使用 tar 命令解压:

tar -zxvf keepalived-2.0.18.tar.gz

进入解压后的 keepalived 目录,为安装 Keepalived 做配置,以下命令是配置了安装路径和核心配置文件存放的路径,配置成功后会生成出一个 Makefile 文件(安装文件)

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

有时候可能会报这个错误信息,此时只需要安装 libnl/libnl-3 依赖即可,输入 yum -y install libnl libnl-devel

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

检查生成了 Makefile 文件后可以输入以下命令进行安装

make && make install

Keepalived 并不像 Nginx 一样提供关闭指令,要关闭 Keepalived,需要杀死对应进程,ps -ef|grep keepalived 查看进程ID,kill -9 进程ID 关闭 Keepalived。
这样做很麻烦,所以可以将 Keepalived 作为服务注册到 Linux 系统,具体操作:
将解压后的 keepalived-2.0.18/keepalived/etc/init.d/keepalived 文件和 keepalived-2.0.18/keepalived/etc/sysconfig 文件拷贝到当期系统中:

# 拷贝 init.d/keepalived
cp /home/software/keepalived-2.0.18/keepalived/etc/init.d/keepalived /etc/init.d/
# 拷贝 etc/sysconfig
cp /home/software/keepalived-2.0.18/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

随后重新刷新服务

systemctl daemon-reload

此时就可以使用 systemctl start keepalived.servicesystemctl stop keepalived.servicesystemctl restart keepalived.service 去管理 Keepalived 服务了。

2 配置 Keepalived

很重要的参考文章《nginx高可用方案》

输入 vim /etc/keepalived/keepalived.conf 主配置文件中修改配置:

  • 配置 Master
# 全局的配置
global_defs {
   # 路由id,当前安装 keepalived 节点主机的标识符,全局唯一
   router_id master_router_id
}

# 计算机节点
vrrp_instance VI_1 {
    # 表示的状态,MASTER/BACKUP
    state MASTER
    # 当前实例绑定的网卡,需要输入 ifconfig 查看网卡名称填入
    interface ens33
    # 虚拟路由id,保证主备节点一致
    virtual_router_id 51
    # 权重,一般Master设置为100,备用机设置为50
    priority 100
    # 主备之间发送心跳即同步检查的时间间隔
    advert_int 1
    # 认证授权的密码,防止非法节点进入,主备之间要一致
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟ip设置
    virtual_ipaddress {
        192.168.1.161
    }
}

配置完成之后,可以移动到 /usr/local/keepalived/sbin 目录下执行 ./keepalived 命令启动 Keepalived,启动之后输入 ip addr 命令可以查看到上述配置的虚拟ip 192.168.1.161,此时访问该虚拟IP即可访问到该 MASTER 节点的 Nginx 服务。

  • 配置 BACKUP
# 全局的配置
global_defs {
   # 路由id,当前安装 keepalived 节点主机的标识符,全局唯一
   router_id backup_router_id
}

# 计算机节点
vrrp_instance VI_1 {
    # 表示的状态,MASTER/BACKUP
    state BACKUP
    # 当前实例绑定的网卡,需要输入 ifconfig 查看网卡名称填入
    interface ens33
    # 虚拟路由id,保证主备节点一致
    virtual_router_id 51
    # 权重,一般Master设置为100,备用机设置为50
    priority 50
    # 主备之间发送心跳即同步检查的时间间隔
    advert_int 1
    # 认证授权的密码,防止非法节点进入,主备之间要一致
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟ip设置
    virtual_ipaddress {
        192.168.1.161
    }
}

配置完启动后,正常情况下访问 192.168.1.161 就会访问到 MASTER 主节点,当把 MASTER 主节点的 Keepalived 关闭后,再访问 192.168.1.161 就会访问到 BACKUP 备用机节点了。

2.1 Keepalived 配置 Nginx 自动重启

Keepalived 只有一整台节点宕机了才会唤醒备用节点替换主节点工作,即假如主节点只是 Nginx 挂掉了,Keepalived 并不会认为主节点发生错误,从而启动备用机。
此时就需要配置 Keepalived 监听 Nginx 状态。
编写监听脚本 vim /etc/keepalived/check_nginx_alive_or_not.sh

#!/bin/bash

A=`ps -C nginx --no-header |wc -l`
# 判断 nginx 是否宕机
if [ $A -eq 0 ];then
    # 如果nginx宕机,尝试重启
    /usr/local/nginx/sbin/nginx
    # 等待3秒再检查nginx有没有重启成功
    sleep 3
    if [ $A -eq 0 ];then
        # 如果没有启动成功,便停止keepalived,从而启动备用机
        killall keepalived
    fi
fi

同时配置权限:

chmod +x /etc/keepalived/check_nginx_alive_or_not.sh

Keepalived 配置 vrrp_scripttrack_script 实现监听脚本注册使用

! Configuration File for keepalived

# 全局的配置
global_defs {
   # 路由id,当前安装 keepalived 节点主机的标识符,全局唯一
   router_id keep_1
}

# 配置监听脚本
vrrp_script check_nginx_alive {
    script "/etc/keepalived/check_nginx_alive_or_not.sh"
    interval 2 # 每两秒运行一个次脚本
}

# 计算机节点
vrrp_instance VI_1 {
    # 表示的状态,MASTER/BACKUP
    state MASTER
    # 当前实例绑定的网卡,需要输入 ifconfig 查看网卡名称填入
    interface ens33
    # 虚拟路由id,保证主备节点一致
    virtual_router_id 51
    # 权重
    priority 100
    # 主备之间发送心跳即同步检查的时间间隔
    advert_int 1
    # 认证授权的密码,防止非法节点进入,主备之间要一致
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟ip设置
    virtual_ipaddress {
        192.168.1.161
    }
    # 注册脚本使用
    track_script {
        check_nginx_alive # 脚本名称
    }
}

最后重启 Keepalived 即可:

systemctl restart keepalived

2.2 实现双主热备

很重要的参考文章《nginx高可用方案》

双机主备会导致资源的浪费,假如主节点服务器一直都没有发生错误,那么备用机就会一直都无需工作,这样的情况就会导致资源的浪费,此时就需要实现双主热备。
双主热备的原理就是:
创建两个虚拟IP,比如 节点1 绑定 虚拟IP1 作为主节点,则 节点2 对于 虚拟IP1 来讲就是备用机;同时 节点2 绑定 虚拟IP2 作为主节点,则此时 节点1 对于 虚拟IP2 来讲就是备用机;
这两个虚拟IP分别对应两个公网IP,在 DNS 解析中有将用户的访问的域名解析到这两个公网IP中。
这么一来,就实现了两台节点互为主备,从而不会导致资源浪费。
具体操作配置与搭建主备节点时的配置差不多,就是多配置一个 vrrp_instance 绑定不同的虚拟IP、虚拟路由ID virtual_router_id 和状态 state

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值