• 14.haproxy+keepalived负载均衡和高可用


    haproxy+keepalived负载均衡和高可用

    概述

    在这里插入图片描述

    • 多个rabbitmq服务形成集群,由haproxy来做负载均衡,haproxy会暴露出来一个端口,客户端可以通过haproxy所在的服务器的ip+端口来进行对rabbitmq的使用。
    • 但是如果是一个haproxy的话,当haproxy出现单点故障,那么整个rabbitmq就会出现不可用的场景,所以要对haproxy做主备,主主等操作来实现高可用
    • 通过keepalived实现haproxy的主备关系,当其中一台haproxy出现故障宕机了,另一台haproxy可以继续支持我们服务的运行,从而达到高可用的效果

    haproxy负载均衡

    • 准备条件

      • 三台已经集群的rabbitmq服务器
        • 172.16.140.130:5672
        • 172.16.140.131:5672
        • 172.16.140.132:5672
      • 安装haproxy的服务器172.16.140.130:5672
    • 安装haproxy

      yum install -y haproxy
      
      • 1
    • 创建配置文件

      mkdir -p /usr/local/config/haproxy
      cd /usr/local/config/haproxy
      vim haproxy.cfg
      
      • 1
      • 2
      • 3
    • 添加配置内容

      global
          log         127.0.0.1 local2
      
          chroot      /var/lib/haproxy
          pidfile     /var/run/haproxy.pid
          maxconn     4000
          user        haproxy
          group       haproxy
          daemon
      
      defaults
          log global
          mode tcp
          option tcplog
          option dontlognull
          retries 3
          option redispatch
          maxconn 2000
          timeout connect 5s
          timeout client 120s
          timeout server 120s
      
      
      listen rabbitmq_cluster
          bind 0.0.0.0:5671
          mode tcp
          balance roundrobin
              server rabbitmq_node1 172.16.140.130:5672 check inter 5000 rise 2 fall 2
              server rabbitmq_node2 172.16.140.131:5672 check inter 5000 rise 2 fall 2
              server rabbitmq_node3 172.16.140.132:5672 check inter 5000 rise 2 fall 2
      
      
      listen monitor
          bind 0.0.0.0:8100
          mode http
          option httplog
          stats enable
          stats uri /stats
          stats refresh 5s
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
    • 启动haproxy

      haproxy -f /usr/local/config/haproxy/haproxy.cfg
      
      • 1
    • 在代码中连接rabbitmq需要填写的地址为haproxy所在的地址,端口号为rabbitmq_cluster中配置的地址

    • 可以通过monitor中8100的端口查看当前服务的状态

    keepalived高可用

    在使用了haproxy之后,我们达成了负载均衡的目的,但是如果只是一个haproxy的话,那么当haproxy宕机,那么整个rabbitmq都会处于不可用状态,所以我们需要使用keepalived来实现主备模式

    • 准备工作

      • 三台已经集群的rabbitmq服务器
        • 172.16.140.130:5672
        • 172.16.140.131:5672
        • 172.16.140.132:5672
      • 两台安装haproxy的服务器
        • 172.16.140.130:5672
        • 172.16.140.131:5672
    • 效果预期:对两台haproxy提供主备的模式

    • 安装keepalived

      yum install -y keepalived
      
      • 1
    • 安装完成后,在/etc/keepalived/中有文件keepalived.conf文件,将原有的备份,新建一份配置文件。

    • 配置配置文件

      global_defs {                   #全局配置
          router_id lb01              #标识身份->名称
      }
      
      vrrp_instance VI_HAPROXY {
          state MASTER                #标识角色状态
          interface ens160            #网卡绑定接口
          virtual_router_id 51        #虚拟路由id
          priority 150                #优先级
          advert_int 1                #监测间隔时间
          authentication {            #认证
              auth_type PASS          #认证方式
              auth_pass 1111          #认证密码
          }
          virtual_ipaddress {         
              172.16.140.167                #虚拟的VIP地址
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
    • 启动keepalived

      systemctl start keepalived
      systemctl enable keepalived
      
      • 1
      • 2
    • 备机上也需要操作上面步骤,不同的是配置文件

      global_defs {
          router_id lb02
      }
      
      vrrp_instance VI_1 {
          state BACKUP        
          interface ens160
          virtual_router_id 51
          priority 100
          advert_int 1
          authentication {    
              auth_type PASS
              auth_pass 1111
          }
          virtual_ipaddress {
              172.16.140.167
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 查看keepalived日志

        tail -f /var/log/messages -n 200
        
        • 1
  • 相关阅读:
    CVPR2023新作:源数据集对迁移学习性能的影响以及相应的解决方案
    Ubuntu下载、安装QGIS软件的方法
    各位帅哥美女们,请问下面这种情况怎么解决呀,网上很多方法我都试过了,都没用
    模板特化 用法
    读<算法图解><笔记摘录>
    js获取文件名后缀
    代码随想录算法训练营第四十八天| LeetCode198. 打家劫舍、LeetCode213. 打家劫舍 II、LeetCode337. 打家劫舍 III
    计算机毕业设计(附源码)python租车信息管理系统
    树查找(暑假每日一题 18)
    【buildroot】buildroot使用笔记-04 | 重构的规则和方法
  • 原文地址:https://blog.csdn.net/qq_34932086/article/details/125995362