rabbitmq+nginx负载服务部署文档

打印 上一主题 下一主题

主题 841|帖子 841|积分 2523

前言

  1. rabbitmq普通集群部署后,存在服务单点承压的情况,故,需要通过前端负载解决单点承压的问题;将采用nginx作为负载器,对流量进行负载分发到各个集群节点,解决服务单点负载的问题
复制代码
情况

虚拟机4台,如下列表
主机名主机ip用途备注nginx-lsb10.0.3.132负载器rabbitmq0110.0.3.133rabbitmq-node1rabbitmq0210.0.3.134rabbitmq-node2rabbitmq0310.0.3.135rabbitmq-node3 同一个网络中
资源

名称版本范例备注centos7.9.2009操作体系docker26.1.4软件rpm部署bitnami/rabbitmqlatest容器镜像容器id:80583c0e1b06nginx1.27.0容器镜像容器id:e0c9858e10edpivotalrabbitmq/perf-testlatest容器镜像容器id:3804df61f5ba 部署

体系情况预备(四个主机均要实行)

关闭防火墙
  1.   systemctl stop firewalld
  2.   systemctl disable firewalld
复制代码
关闭selinux
  1.   sed -i 's~SELINUX=enforcing~SELINUX=disabled~' /etc/selinux/config
  2.   setenforce 0
复制代码
新增一个数据目录(最好和体系盘分离)
  1.   mkdir /data/docker
复制代码
docker服务预备(四个主机)

  1.   rm -rf /etc/yum.repos.d/*
  2.   curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
  3.   yum -y remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
  4.   yum install -y yum-utils device-mapper-persistent-data lvm2
  5.   yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  6.   yum install -y docker-ce docker-ce-cli containerd.io
  7.   mkdir /etc/docker/
  8.   cat >> /etc/docker/daemon.json << EOF
  9.   {
  10.     "data-root": "/data/docker",
  11.     "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","http://hub-mirror.c.163.com"]
  12.   }
  13.   EOF
  14.   systemctl restart docker
  15.   systemctl enable docker
  16.   wget https://github.com/docker/compose/releases/download/v2.28.0/docker-compose-linux-x86_64
  17.   chmod 755 docker-compose-linux-x86_64
  18.   \cp -fp ddocker-compose-linux-x86_64 /usr/bin/docker-compose
复制代码
镜像预备

  1.   #在负载均衡(10.0.3.132)的虚机上执行
  2.   docker pull nginx:1.27.0
  3.   docker pull pivotalrabbitmq/perf-test
  4.   #在rabbitmq的三个节点上执行
  5.   docker pull bitnami/rabbitmq
  6.   docker pull pivotalrabbitmq/perf-test
复制代码
服务启动文件预备

nginx负载均衡的服务管理文件

  1. mkdir -p /usr/yunji/nginx_4_lsb/conf.d
  2. cat > /usr/yunji/nginx_4_lsb/docker-compose.yml << EOF
  3. services:
  4.   web:
  5.     image: nginx:1.27.0
  6.     container_name: nginx-web
  7.     ports:
  8.       - "5672:5672"
  9.     volumes:
  10.       - "$PWD/conf.d:/etc/nginx/conf.d"
  11.       - "$PWD/nginx.conf:/etc/nginx/nginx.conf:ro"
  12.     restart: no
  13. EOF
  14. cat > /usr/yunji/nginx_4_lsb/nginx.conf << EOF
  15. user  root;
  16. worker_processes  auto;
  17. error_log  /var/log/nginx/error.log notice;
  18. pid        /var/run/nginx.pid;
  19. events {
  20.     worker_connections  1024;
  21. }
  22. #http {
  23. #    include       /etc/nginx/mime.types;
  24. #    default_type  application/octet-stream;
  25. #
  26. #    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  27. #                      '$status $body_bytes_sent "$http_referer" '
  28. #                      '"$http_user_agent" "$http_x_forwarded_for"';
  29. #
  30. #    access_log  /var/log/nginx/access.log  main;
  31. #
  32. #    sendfile        on;
  33. #    #tcp_nopush     on;
  34. #
  35. #    keepalive_timeout  65;
  36. #
  37. #    #gzip  on;
  38. #
  39. #    include /etc/nginx/conf.d/*.conf;
  40. #}
  41. stream {
  42.     log_format proxy '$remote_addr [$time_local] '
  43.                  '$protocol $status $bytes_sent $bytes_received '
  44.                  '$session_time "$upstream_addr" '
  45.                  '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
  46.     access_log  /var/log/nginx/access.log  proxy;
  47.     open_log_file_cache off;
  48.     upstream rabbitTcp {
  49.         server 10.0.3.133:5672;
  50.         server 10.0.3.134:5672;
  51.         server 10.0.3.135:5672;
  52.     }
  53.     server {
  54.         listen 5672;
  55.         proxy_connect_timeout 5s;
  56.         proxy_timeout 30s;
  57.         proxy_pass rabbitTcp;
  58.     }
  59.     include /etc/nginx/conf.d/*.stream;
  60. }
  61. EOF
复制代码
rabbitmq的服务管理文件(网络直接利用宿主机的)

节点一(10.0.3.133)

  1.   mkdir -p /usr/yunji/rabbitmq-server
  2.   cat > /usr/yunji/rabbitmq-server/docker-compose.yml << EOF
  3.   # Copyright Broadcom, Inc. All Rights Reserved.
  4.   # SPDX-License-Identifier: APACHE-2.0
  5.   
  6.   version: '2'
  7.   
  8.   services:
  9.     rabbitmq:
  10.       image: docker.io/bitnami/rabbitmq
  11.       container_name: rabbitmq01
  12.   #    ports:
  13.   #      - '4369:4369'
  14.   #      - '5551:5551'
  15.   #      - '5552:5552'
  16.   #      - '5672:5672'
  17.   #      - '25672:25672'
  18.   #      - '15672:15672'
  19.       network_mode: "host"
  20.       environment:
  21.         - RABBITMQ_NODE_TYPE=stats
  22.         - RABBITMQ_NODE_NAME=rabbit@rabbitmq01
  23.         - RABBITMQ_ERL_COOKIE=s3cr3tc00ki3
  24.   #      - RABBITMQ_SECURE_PASSWORD=yes
  25.         - RABBITMQ_LOGS=-
  26.       extra_hosts:
  27.         - "rabbitmq01:10.0.3.133"
  28.         - "rabbitmq02:10.0.3.134"
  29.         - "rabbitmq03:10.0.3.135"
  30.       volumes:
  31.         - 'rabbitmq_data:/bitnami/rabbitmq/mnesia'
  32.   volumes:
  33.     rabbitmq_data:
  34.       driver: local
  35.   EOF       
复制代码
节点二(10.0.3.134)

  1.   mkdir -p /usr/yunji/rabbitmq-server
  2.   cat > /usr/yunji/rabbitmq-server/docker-compose.yml << EOF
  3.   # Copyright Broadcom, Inc. All Rights Reserved.
  4.   # SPDX-License-Identifier: APACHE-2.0
  5.   
  6.   version: '2'
  7.   
  8.   services:
  9.     rabbitmq:
  10.       image: docker.io/bitnami/rabbitmq
  11.       container_name: rabbitmq02
  12.   #    ports:
  13.   #      - '4369:4369'
  14.   #      - '5551:5551'
  15.   #      - '5552:5552'
  16.   #      - '5672:5672'
  17.   #      - '25672:25672'
  18.   #      - '15672:15672'
  19.       network_mode: "host"
  20.       environment:
  21.         - RABBITMQ_NODE_TYPE=queue-disc
  22.         - RABBITMQ_NODE_NAME=rabbit@rabbitmq02
  23.         - RABBITMQ_CLUSTER_NODE_NAME=rabbit@rabbitmq01
  24.         - RABBITMQ_ERL_COOKIE=s3cr3tc00ki3
  25.   #      - RABBITMQ_SECURE_PASSWORD=yes
  26.         - RABBITMQ_LOGS=-
  27.       extra_hosts:
  28.         - "rabbitmq01:10.0.3.133"
  29.         - "rabbitmq02:10.0.3.134"
  30.         - "rabbitmq03:10.0.3.135"
  31.       volumes:
  32.         - 'rabbitmq_data:/bitnami/rabbitmq/mnesia'
  33.   volumes:
  34.     rabbitmq_data:
  35.       driver: local
  36.   EOF       
复制代码
节点三(10.0.3.135)

  1.   mkdir -p /usr/yunji/rabbitmq-server
  2.   cat > /usr/yunji/rabbitmq-server/docker-compose.yml << EOF
  3.   # Copyright Broadcom, Inc. All Rights Reserved.
  4.   # SPDX-License-Identifier: APACHE-2.0
  5.   
  6.   version: '2'
  7.   
  8.   services:
  9.     rabbitmq:
  10.       image: docker.io/bitnami/rabbitmq
  11.       container_name: rabbitmq03
  12.   #    ports:
  13.   #      - '4369:4369'
  14.   #      - '5551:5551'
  15.   #      - '5552:5552'
  16.   #      - '5672:5672'
  17.   #      - '25672:25672'
  18.   #      - '15672:15672'
  19.       network_mode: "host"
  20.       environment:
  21.         - RABBITMQ_NODE_TYPE=queue-ram
  22.         - RABBITMQ_NODE_NAME=rabbit@rabbitmq03
  23.         - RABBITMQ_CLUSTER_NODE_NAME=rabbit@rabbitmq01
  24.         - RABBITMQ_ERL_COOKIE=s3cr3tc00ki3
  25.   #      - RABBITMQ_SECURE_PASSWORD=yes
  26.         - RABBITMQ_LOGS=-
  27.       extra_hosts:
  28.         - "rabbitmq01:10.0.3.133"
  29.         - "rabbitmq02:10.0.3.134"
  30.         - "rabbitmq03:10.0.3.135"
  31.       volumes:
  32.         - 'rabbitmq_data:/bitnami/rabbitmq/mnesia'
  33.   volumes:
  34.     rabbitmq_data:
  35.       driver: local
  36.   EOF       
复制代码
起服务

rabbitmq服务启动

节点一(10.0.3.133)

  1. cd /usr/yunji/rabbitmq-server
  2. docker-compose -f docker-compose.yml up -d --no-deps
复制代码
节点二(10.0.3.134)

  1.   cd /usr/yunji/rabbitmq-server
  2.   docker-compose -f docker-compose.yml up -d --no-deps
复制代码
节点三(10.0.3.135)

  1.   cd /usr/yunji/rabbitmq-server
  2.   docker-compose -f docker-compose.yml up -d --no-deps
复制代码
验证集群是否成功

利用欣赏器访问url: http://10.0.3.133:15672,确认节点是否都可以看到;如果是,则确认集群成功。
用户授权参考如下链接内容
  RabbitMQ3.13.x之四_RabbitMQ脚色说明及创建用户与授权
nginx负载服务启动

  1.   cd /usr/yunji/nginx_4_lsb/
  2.   docker-compose -f docker-compose.yml up -d --no-deps
复制代码
测试



  • 单点直连rabbitmq的第一个节点压测测试
    1.   docker run -it --rm pivotalrabbitmq/perf-test:latest -h "amqp://admin:admin@10.0.3.133:5672" -x 2 -y 4 -u "perf-test1" -a --id "test1" -s 4000
    复制代码
    结果:

    • 访问rabbitmq的管理后台(http://10.0.3.133:15672),发现一个节点均衡生产和消耗数据

  • 单点直连rabbitmq的三个节点压测测试
    1.   docker run -it --rm pivotalrabbitmq/perf-test:latest -H "amqp://admin:admin@10.0.3.133:5672,amqp://admin:admin@10.0.3.134:5672,amqp://admin:admin@10.0.3.135:5672" -x 2 -y 4 -u "perf-test1" -a --id "test1" -s 4000
    复制代码
    结果:

    • 访问rabbitmq的管理后台(http://10.0.3.133:15672),发现三个节点均衡生产和消耗数据

  • 单点直连nginx负载的压测测试
    1.   docker run -it --rm pivotalrabbitmq/perf-test:latest -h "amqp://admin:admin@10.0.3.132:5672" -x 2 -y 4 -u "perf-test1" -a --id "test1" -s 4000
    复制代码

    • 结果:
      访问rabbitmq的管理后台(http://10.0.3.133:15672),发现三个节点均衡生产和消耗数据

结果

增长nginx负载均衡的本领,实现了流量负载的本领,确实可以办理单节点负载的问题。
问题和思考



  • rabbitmq节点宕机一个之后,该节点得到的消息是否仍然可以消耗?

    • 答: 否,由于当前的消息仍然是放在接收的节点上,只有其他节点主动获取消息,其他rabbitmq才气让消耗端消耗数据。

  • nginx单点部署,是否存在单点故障的问题

    • 答: 是,由于单点部署,无法保证该负载出现服务非常之后的后端服务对外提供服务的本领,还必要其他比方keepalive等服务补充支持

  • 后端一个rabbitmq的节点宕机,nginx是否可以感知到,并且将后续的消息转向另外的节点?

    • 答:必要配置文件里面设置链接超时的内容,然后nginx会依照超时的重试间隔和重试时间举行重毗连,这个大概会导致部分业务出现链接非常的问题。以是还必要通过其他配置或者服务补充支持该非常的处理情况。

  • rabbitmq节点宕机一个之后,该节点得到的消息是否仍然可以消耗?

    • 答: 否,由于当前的消息仍然是放在接收的节点上,只有其他节点主动获取消息,其他rabbitmq才气让消耗端消耗数据。

  • nginx单点部署,是否存在单点故障的问题

    • 答: 是,由于单点部署,无法保证该负载出现服务非常之后的后端服务对外提供服务的本领,还必要其他比方keepalive等服务补充支持

  • 后端一个rabbitmq的节点宕机,nginx是否可以感知到,并且将后续的消息转向另外的节点?

    • 必要配置文件里面设置链接超时的内容,然后nginx会依照超时的重试间隔和重试时间举行重毗连,这个大概会导致部分业务出现链接非常的问题。以是还必要通过其他配置或者服务补充支持该非常的处理情况。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张国伟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表