keepalived配置Nginx高可用

keepalived基于VRRP协议,组件免费,可以解决单点故障,实现高可用HA机制。keepalived可以用于解决Nginx高可用问题。

  • 云服务器不采用keepalived,云服务厂商可能不提供虚拟IP服务,可以直接使用云负载均衡服务。

1 keepalived

1.1 VRRP协议与原理

虚拟路由冗余协议 VRRP,是解决内网单机故障的路由协议,构建有多个路由器MASTER BACKUP,采用虚拟IP机制(用户访问虚拟ip,渲染出主节点;当主节点故障,心跳检测到故障,虚拟IP指向备用节点)。

配置高可用主备节点,机器配置需要相同。备用节点配置过低,大量请求进来会瞬间宕机,无法保证高可用。

VRRP原理

VRRP将局域网内的一组路由器划分在一起,称为一个备份组。备份组由一个Master路由器和多个Backup路由器组成,功能上相当于一台虚拟路由器。

VRRP备份组具有以下特点:

  • 虚拟路由器具有IP地址,称为虚拟IP地址。局域网内的主机仅需要知道这个虚拟路由器的IP地址,并将其设置为缺省路由的下一跳地址。
  • 网络内的主机通过这个虚拟路由器与外部网络进行通信。
  • 备份组内的路由器根据优先级,选举出Master路由器,承担网关功能。其他路由器作为Backup路由器,当Master路由器发生故障时,取代Master继续履行网关职责,从而保证网络内的主机不间断地与外部网络进行通信。

2 安装keepalived与配置双机主备

官网下载https://www.keepalived.org/download.html

# 解压缩
cd keepalived-2.0.18/
# 安装依赖
yum -y install libnl libnl-devel
# 初始配置路径
./configure --prefix=/usr/local/keepalived --sysconf=/etc
# 编译,安装
make && make install
  • prefix: 安装位置
  • sysconf:核心配置文件位置,固定位置。改为其它,启动报错。

配置192.168.233.130/131两台机器的核心配置

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

vrrp_instance VI_1 {
    # 表示节点是MASTER,还是BACKUP
    state MASTER
    # 该实例绑定的网卡
    interface ens33
    # 保证主备节点一致即可
    virtual_router_id 51
    # 权重,主节点挂掉后,选举出优先级更高的节点作为主节点
    priority 100
    # 心跳间隔,主备节点之间同步检查时间间隔,默认1s
    advert_int 1
    # 认证权限密码,防止非法节点进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 设置虚拟ip,可以多个
    virtual_ipaddress {
        192.168.233.120
    }
}
  • 131节点的配置文件与主节点配置基本一致,需要修改路由id、state改为BACKUP、调低权重。

启动keepalived,查看ip addr可以看到虚拟网卡信息。ps查看进程信息。

inet 192.168.233.120/32 scope global ens33

ps -ef | grep keepalived

将keepalived注册为服务

# 将源码目录下文件拷贝到启动目录
cp init.d/keepalived /etc/init.d/
cp sysconfig/keepalived /etc/sysconfig/

systemctl daemon-reload
systemctl start keepalived.service

当主节点MASTER和备用节点BACKUP同时运行起来,只有MASTER的网卡信息中有虚拟IP。当MASTER宕机(主机keepalived挂掉)时,BACKUP启用,网卡中出现虚拟IP;在MASTER修复重新启动后,运行主机切换为原MASTER。

针对于访问哪台节点,可以监控nginx访问日志:tail access.log -f 。

参考资料

https://www.jianshu.com/p/4b46586e79aa

版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:https://www.cnblogs.com/dtyy/p/14249320.html