高可用集群架构 Keepalived+Lvs+Nginx


  • 服务器与IP约定

    LVS1-Master:
    DIP:192.168.1.151(内网IP)
    VIP:192.168.1.150(虚拟IP)
    LVS2-Backup:
    DIP:192.168.1.152(内网IP)
    VIP:192.168.1.150(虚拟IP)

    Nginx-RS-1:

    RIP:192.168.1.171(内网IP)
    VIP:192.168.1.150(虚拟IP)

    Nginx-RS-2:

    RIP:192.168.1.172(内网IP)
    VIP:192.168.1.150(虚拟IP)

1. 配置 LVS Master

192.168.1.151

    1. 安装 keepalived 可参考文章:高可用集群架构 Keepalived
  • 安装 Keepalived

    1. 上传 keepalived
    2. ./configure
    3. make
    4. make install
    5. 把 Keepalived 注册到系统服务
  • 配置 Keepalived

global_defs {
    router_id LVS_151
}

varrp_instance VI_1 {
    state MASTER
    interface ens33 # 需根据具体网卡名
    virtual_router_id 41
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.150
    }
}

# LVS 配置
# 配置集群地址访问的IP+端口,端口和Nginx保持一致,都是80
virtual_server 192.168.1.150 80 {
    # 健康检查的时间,单位:秒
    delay_loop 6
    # 配置负载均衡的算法,默认:轮询
    lb_algo rr
    # 设置 LVS 的模式 NAT|TUN|DR
    lb_kind DR
    # 设置会话持久化的时间,默认:50秒
    persistence_timeout 5
    # 协议 -t
    protocol TCP

    # 负载均衡的真实服务器
    real_server 192.168.1.171 80 {
        weight 1
        # 设置健康检查
        TCP_CHECK {
            # 检查80端口
            connect_port 80
            # 超时时间 2s
            connect_timeout 2
            # 重试次数 2次
            nb_get_retry 2
            # 间隔时间 3s
            delay_before_retry 3
        }
    }
    real_server 192.168.1.172 80 {
        weight 1
        # 设置健康检查
        TCP_CHECK {
            # 检查80端口
            connect_port 80
            # 超时时间 2s
            connect_timeout 2
            # 重试次数 2次
            nb_get_retry 2
            # 间隔时间 3s
            delay_before_retry 3
        }
    }
}
  • 清除原有的LVS规则(如有)
# 查看规则
ipvsadm -Ln
# 清楚
ipvsadm -C
  • 重启 Keepalived
systemctl restart keepalived

2. 配置 LVS Backup

192.168.1.152

  • 进入 keepalived 配置文件
cd /etc/keepalived
vim keepavlived.conf
  • 配置(可复制Master,再进一步修改)
global_defs {
    # 节点名
    router_id LVS_152
}

varrp_instance VI_1 {
    state BACKUP
    interface ens33 # 需根据具体网卡名
    virtual_router_id 41
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.150
    }
}

# LVS 配置
# 配置集群地址访问的IP+端口,端口和Nginx保持一致,都是80
virtual_server 192.168.1.150 80 {
    # 健康检查的时间,单位:秒
    delay_loop 6
    # 配置负载均衡的算法,默认:轮询
    lb_algo rr
    # 设置 LVS 的模式 NAT|TUN|DR
    lb_kind DR
    # 设置会话持久化的时间,默认:50秒
    persistence_timeout 5
    # 协议 -t
    protocol TCP

    # 负载均衡的真实服务器
    real_server 192.168.1.171 80 {
        weight 1
        # 设置健康检查
        TCP_CHECK {
            # 检查80端口
            connect_port 80
            # 超时时间 2s
            connect_timeout 2
            # 重试次数 2次
            nb_get_retry 2
            # 间隔时间 3s
            delay_before_retry 3
        }
    }
    real_server 192.168.1.172 80 {
        weight 1
        # 设置健康检查
        TCP_CHECK {
            # 检查80端口
            connect_port 80
            # 超时时间 2s
            connect_timeout 2
            # 重试次数 2次
            nb_get_retry 2
            # 间隔时间 3s
            delay_before_retry 3
        }
    }
}
  • 清除原有的LVS规则(如有)
# 查看规则
ipvsadm -Ln
# 清楚
ipvsadm -C
  • 重启 Keepalived
systemctl restart keepalived
# 查看规则
ipvsadm -Ln

3. 测试 LVS

  1. 进入到主节点Master 192.168.1.151
# 停止 keepavlied
systemctl stop keepavlived
# 查看 虚拟ip 192.168.1.150 是否还存在
ip addr

虚拟ip 192.168.1.150 不存在,说明已解绑当前节点

  1. 进入到备用节点 Backup 192.179.1.152
# 查看 虚拟ip 192.168.1.150 是否存在

虚拟ip 192.168.1.150 存在,说明已绑定当前节点(也叫IP漂移技术~)

  1. 再恢复主节点 Mater 192.168.1.151
# 停止 keepavlied
systemctl start keepavlived
# 查看 虚拟ip 192.168.1.150 是否还存在
ip addr

虚拟ip 192.168.1.150 存在,说明已重新绑定当前节点

  1. 再进入到备用节点 Backup 192.168.1.152
# 查看 虚拟ip 192.168.1.150 是否存在

虚拟ip 192.168.1.150 不存在,说明已解绑当前节点

    1. 总结

      当其中任一 LVS 停止,或者恢复,都会被 Keepalived结合LVS 的健康检查监测,从而剔除和恢复节点
      通过测试

3. 测试 Nginx(RS真实服务器)

  1. 进入两台中任一一台 RS,如(192.168.1.171)停止 Nginx 服务(模拟宕机)

    cd /usr/local/nginx/sbin
    ./nginx -s stop

    停止以后观察用户请求,只会请求到 192.168.1.172

  2. 查看 LVS 规则

    进入到 LVS 服务器,如 192.168.1.151,查看目前节点规则

    ipvsadm -Ln

    发现目前真实服务器节点只有一个 192.168.1.172(原来为两个)

  3. 再恢复上面停止的 Nginx(192.168.1.171),观察 LVS 节点规则

    发现目前真实服务器节点已恢复至原来的两个节点 192.168.1.171 和 192.168.1.172

  4. 总结

    当前 Nginx 停止,或者恢复,都会被 Keepalived结合LVS 的健康检查监测,从而剔除和恢复节点
    通过测试

4. 总结

以上,我们就完成了 Keepalived+Lvs+Nginx 实现的高可用构架。


文章作者: 小动物不困
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小动物不困 !
评论
 上一篇
Redis 安装与配置 Redis 安装与配置
1. 安装 Redis Redis 支持在 Linux、Windows、Mac 安装本文以 Linux 系统为例 下载安装包Redis官网 上传安装包至服务器 # 解压 tar -zxvf redis-5.0.5.tar.gz
2020-09-15
下一篇 
高可用集群架构 LVS 负载均衡 高可用集群架构 LVS 负载均衡
1. LVS 负载均衡 Linux Virtual Server章文嵩博士主导的开源的负载均衡项目LVS(ipvs)已被集成到Linux内核中负载均衡调度器 2. 为什么要使用 LVS + Nginx? LVS 基于四层负载均衡,工作效率
2020-09-14
  目录