高可用LB方案

博客讲述了线上LB服务因内存问题导致服务中断,提出优化措施,包括避免haproxy日志重启导致内存增长,设置阿里云监控与报警,以及探讨了haproxy+keepalive主从配置、LVS-DR和阿里云SLB三种高可用LB方案,以确保服务不因LB故障而中断。

前几天的碰到一个问题,线上的LB服务因为内存问题挂掉了,导致所有的生产环境服务都直接down掉了,因为没有专业的运维,线上环境都是研发直接来管理的,这里有几个问题:

1. 导致内存不停增长,是因为每次切割haproxy的日志的时候,会通过-st的命令重启haproxy,但是因为旧的进程会管理旧的连接直至连接断开才会退出,但是我们用haproxy来代理MQTT这种长连接,所以导致进程一直残留,相当于每天多了一个进程,最终内存不够倒是服务被kill

2. 线上环境服务器的资源使用情况没有监控及报警,就算没有这个问题最后也会有类似的问题产生

3. 架构设计LB没有任何冗余,所以只有LB挂了,那整个服务肯定都会全部失联

 

然后是针对既有的问题做优化

1. 测试切割haproxy日志时不需要重启haproxy也会继续记录日志,那就不需要根据教程讲的必须重启haproxy,这样也不会有服务一直变多的问题

2. 阿里云对ECS有提供监控与报警的方案,目前已经配置每台服务器CPU,内存使用超过一定阈值都会直接钉钉+短信报警,另外对主要的一些服务的进程也做了监控,找不到进程也会直接报警

3. 对目前的架构进行优化,保证LB的高可用

 

通过查找资料,有以下几个方案:

1. haproxy + keepalive 主从配置

如上图,两台服务器分别是101及102,两台服务器上都部署haproxy,配置一样,然后两台都部署keepalive,101作为主,102作为从,此时网关通过虚拟IP 192.168.1.2 的 ARM协议会被101进行解析到101的一个mac地址,之后消息都会被101解析

当101挂掉时,虚拟IP 192.168.1.2 的 ARM协议会被102进行解析到1

Keepalived 是一个广泛使用的高可用性解决方案,主要用于通过 **VRRP(Virtual Router Redundancy Protocol)** 实现高可用集群,确保服务在节点故障时仍能持续运行。以下是 Keepalived 高可用架构的配置指南。 ### 一、Keepalived 的核心原理与功能 Keepalived 的核心是基于 **VRRP 协议**,它允许多个节点共享一个虚拟 IP(VIP),当主节点(Master)发生故障时,备用节点(Backup)会自动接管 VIP,从而实现服务的无缝切换。[^2] 主要功能包括: - **VRRP 支持**:实现虚拟路由器组的冗余和故障转移。 - **健康检查机制**:对本地或远程服务进行健康状态检测。 - **IPVS 集成**:支持与 LVS(Linux Virtual Server)结合,实现负载均衡和高可用性。[^3] --- ### 二、Keepalived 高可用架构配置步骤 #### 1. 安装 Keepalived 在大多数 Linux 发行版中,可以通过包管理器安装 Keepalived: ```bash # CentOS/RHEL sudo yum install keepalived # Ubuntu/Debian sudo apt-get install keepalived ``` #### 2. 配置 Keepalived 主配置文件 编辑 `/etc/keepalived/keepalived.conf` 文件,配置主备节点的 VRRP 实例和虚拟 IP 地址。 以下是一个典型的单主模式配置示例: ```conf vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.25.254.55/32 } } ``` 在备用节点上,只需将 `state` 改为 `BACKUP`,并适当降低 `priority` 值: ```conf vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.25.254.55/32 } } ``` #### 3. 启动并启用 Keepalived 服务 ```bash sudo systemctl start keepalived sudo systemctl enable keepalived ``` #### 4. 验证高可用性 使用 `ip addr show` 查看虚拟 IP 是否绑定到主节点上。当主节点宕机后,虚拟 IP 应该自动切换到备用节点。 --- ### 三、结合 IPVS 实现负载均衡 Keepalived 可以与 IPVS(IP Virtual Server)结合,实现负载均衡和高可用性的双重保障。以下是一个简单的配置示例: ```conf virtual_server 172.25.254.55 80 { delay_loop 6 lb_algo rr lb_kind DR protocol TCP real_server 172.25.254.77 80 { weight 1 TCP_CHECK { connect_timeout 3 retry 3 delay_before_retry 3 } } real_server 172.25.254.88 80 { weight 1 TCP_CHECK { connect_timeout 3 retry 3 delay_before_retry 3 } } } ``` 该配置将请求分发到两个后端服务器,并通过 TCP 健康检查确保服务可用性。[^3] --- ### 四、高可用性验证与故障切换测试 - **主节点宕机测试**:关闭主节点的 Keepalived 服务,观察虚拟 IP 是否切换至备用节点。 - **网络中断测试**:模拟主节点网络中断,验证是否触发故障切换。 - **服务宕机测试**:停止后端服务(如 Nginx),验证 Keepalived 是否移除故障节点。 --- ### 五、日志与监控 Keepalived 的日志通常位于 `/var/log/messages` 或 `/var/log/syslog` 中。可以使用 `journalctl` 查看系统日志: ```bash journalctl -u keepalived.service ``` --- ### 六、常见问题与优化建议 - **避免脑裂(Split-Brain)**:确保网络稳定,配置仲裁机制(如使用额外的心跳线)。 - **虚拟 IP 冲突**:确保 VIP 不与其他 IP 冲突。 - **健康检查频率**:根据业务需求调整 `delay_loop` 和 `connect_timeout`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值