美文网首页
Haproxy实现MQ负载均衡

Haproxy实现MQ负载均衡

作者: Vincentook | 来源:发表于2021-01-07 10:41 被阅读0次
用haproxy来实现rabbitmq的反向代理与负载均衡,当然实际上我们也可以利用nginx,主流均以haproxy来做

一、基于Haproxy构建RabbitMQ反向代理

使用keepalived创建虚拟IP 让客户访问自动寻找正常工作中的haproxy,从而让haproxy负载均衡找到相应空闲的MQ

#创建镜像 (镜像需要keepalived))

# Dockerfile文件
FROM haproxy:2.3-dev3-alpine
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
  && apk add keepalived
  
  
  # 生成镜像
docker build -t haproxy .

二、构造dockerfile

# 编排php,redis,nginx容器
version: "3.6" # 确定docker-composer文件的版本
services: # 代表就是一组服务 - 简单来说一组容器
  # server
  haproxy_server_173_3: # 这个表示服务的名称,课自定义; 注意不是容器名称
    image: haproxy # 指定容器的镜像文件
    ports: # 配置容器与宿主机的端口
      - "8103:8100" # web监听端口
      - "5603:5600" # 反向代理 mq 的端口
    networks: ## 引入外部预先定义的网段
       haproxy:
         ipv4_address: 173.200.7.3   #设置ip地址
    privileged: true # 让程序在root下运行
    volumes:
      - "/www/wwwroot/srm/05/public/haproxy:/haproxy"
      - "/www/wwwroot/srm/05/public/haproxy/keepalived/3:/keepalived"
    container_name: haproxy_server_173_3 # 这是容器的名称
    command: haproxy -f /haproxy/haproxy.cfg
  haproxy_server_173_2: # 这个表示服务的名称,课自定义; 注意不是容器名称
    image: haproxy # 指定容器的镜像文件
    ports: # 配置容器与宿主机的端口
      - "8102:8100"
      - "5602:5600"
    networks: ## 引入外部预先定义的网段
       haproxy:
         ipv4_address: 173.200.7.2   #设置ip地址
    privileged: true
    volumes:
      - "/www/wwwroot/srm/05/public/haproxy:/haproxy"
      - "/www/wwwroot/srm/05/public/haproxy/keepalived/2:/keepalived"
    container_name: haproxy_server_173_2 # 这是容器的名称
    command: haproxy -f /haproxy/haproxy.cfg
  # docker run -itd --name nginx_haproxy_173_5 -v /www/wwwroot/srm/05/public/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -p 5600:5600 --network haproxy_haproxy -ip=173.200.7.5
  # nginx_haproxy:
  #   image: nginx1.19 # 指定容器的镜像文件.
  #   ports: # 配置容器与宿主机的端口
  #     - "5600:5600"
  #   networks: ## 引入外部预先定义的网段
  #      haproxy:
  #        ipv4_address: 173.200.7.5   #设置ip地址
  #   volumes:
  #     - "/www/wwwroot/srm/05/public/nginx/conf:/etc/nginx"
  #   container_name: nginx_haproxy_173_5 # 这是容器的
    # command: nginx -c /nginx/conf/nginx.conf
# 设置网络模块
networks:
  # 自定义网络
  haproxy:
    driver: bridge
    ipam: #定义网段
      config:
        - subnet: "173.200.7.0/24"

三、配置文件(放共享目录)

#haproxy.cfg

global
  #日志输出配置,所有日志都记录在本机,通过local0输出
  log 127.0.0.1 local0 info
  #最大连接数
  maxconn 10240
  #以守护进程方式运行
  daemon

defaults
  #应用全局的日志配置
  log global
  mode http
  #超时配置
  timeout connect 5000
  timeout client 5000
  timeout server 5000
  timeout check 2000

listen http_front #haproxy的客户页面
  bind 0.0.0.0:8100
  mode http
  option httplog
  stats uri /haproxy
  stats auth root:0000 # web界面的用户和密码
  stats refresh 5s
  stats enable

listen rabbimq_ha #负载均衡的名字
  bind 0.0.0.0:5600 #对外提供的虚拟的端口
  option tcplog
  mode tcp
  #轮询算法
  balance roundrobin
  server rabbit1 192.168.10.251:5672 check inter 5000 rise 2 fall 2
  server rabbit2 192.168.10.251:5673 check inter 5000 rise 2 fall 2
  server rabbit3 192.168.10.251:5674 check inter 5000 rise 2 fall 2
# keepalived.conf

# 2
vrrp_instance  VI_1 {
    state  MASTER
    interface  eth0
    virtual_router_id  100
    priority  100
    advert_int  1
    authentication {
        auth_type  PASS
        auth_pass  0000
    }
    virtual_ipaddress {
        173.200.7.100
    }
}

# 3
vrrp_instance  VI_1 {
    state  BACKUP
    interface  eth0 # centos eth33  alpine系统是eth0
    virtual_router_id  100
    priority  100
    advert_int  1
    authentication {
        auth_type  PASS
        auth_pass  0000
    }
    # 虚拟的网络ip
    virtual_ipaddress {
        # 一定是在 haproxy 网络ip段里面
        173.200.7.100
    }
}

1、登录web查看

http://192.168.10.251:8103/haproxy

账号密码: root 0000

2、进入容器运行keepalived,添加虚拟IP

keepalived -f /keepalived/keepalived.conf

# ip a 查询是否有 173.200.7.100/32 添加上
## 如果添加失败,手动添加
ifconfig eth0:0 173.200.7.100 netmask 255.255.255.0 up

四、PHP调试端口

运行 php HAProxy.php

# HAProxy.php


<?php
require "vendor/autoload.php";


use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;

$con = new AMQPStreamConnection('173.200.7.100', 5600, 'guest', 'guest');
// var_dump($con);
$re = $con->channel();
var_dump($re);

相关文章

  • Haproxy实现MQ负载均衡

    用haproxy来实现rabbitmq的反向代理与负载均衡,当然实际上我们也可以利用nginx,主流均以hapro...

  • HAProxy

    HAProxy 负载均衡实现代理 HAProxy vs Nginx 技术项目 Nginx vs HAProxy v...

  • 使用HAProxy实现4层和7层代理

    HAProxy是一款负载均衡软件,LVS只实现了4层负载调度,而HAProxy实现了4层和7层的负载调度,它具有以...

  • 使用Haproxy

    使用Haproxy Haproxy是目前比较流行的一种集群调度工具 四层负载均衡;七层负载均衡;Haproxy 与...

  • lvs

    nginx,haproxy,lvs 的比较 共同点:都能实现负载均衡 不同点 负载均衡vs反向代理 lvs介绍 L...

  • CentOS 安装 HAProxy 实现 TCP 负载均衡

    HAProxy可以实现 TCP 负载均衡 关闭防火墙systemctl stop firewalldsystemc...

  • haproxy详解(下)

    通过HAProxy的ACL规则实现智能负载均衡 由于HAProxy可以工作在七层模型下, 因此,要实现HAProx...

  • Haproxy 基础

    3、Haproxy 基础 软件:haproxy---主要是做负载均衡的7层,也可以做4层负载均衡apache也可以...

  • 第十八周作业

    1、运用haproxy实现nginx服务负载均衡 测试环境: Nginx1: 172.16.100.151 por...

  • 第十九周

    1、运用haproxy实现nginx服务负载均衡 测试环境: Nginx1: 172.16.100.151 por...

网友评论

      本文标题:Haproxy实现MQ负载均衡

      本文链接:https://www.haomeiwen.com/subject/jslooktx.html