rabbitmq集群(二进制)

深藏阁楼爱情的钟 2023-06-15 04:53 136阅读 0赞

一、RabbiMQ简介

RabbiMQ是用Erang开发的,集群非常方便,因为Erlang天生就是一门分布式语言,但其本身并不支持负载均衡。

RabbiMQ模式

RabbitMQ模式大概分为以下三种:
(1)单一模式。
(2)普通模式(默认的集群模式)。
(3) 镜像模式(把需要的队列做成镜像队列,存在于多个节点,属于RabbiMQ的HA方案,在对业务可靠性要求较高的场合中比较适用)。
要实现镜像模式,需要先搭建一个普通集群模式,在这个模式的基础上再配置镜像模式以实现高可用。

RabbiMQ特点

RabbitMQ的集群节点包括内存节点、磁盘节点。RabbitMQ支持消息的持久化
也就是数据写在磁盘上,最合适的方案就是既有内存节点,又有磁盘节点。

环境

使用3台服务器进行搭建,采用rabbitmq镜像模式






























操作系统 主机名 ip地址 用途
centos7.4 centos7_01 192.168.31.149 rabbitmq001(磁盘节点)
centos7.4 centos7_02 192.168.31.186 rabbitmq002(内存节点)
centos7.4 centos7_02 192.168.31.238 rabbitmq003(内存节点)

注意,这里三台服务器都连接上互联网,另外RabbitMQ集群节点必须在同一网段里,如果是跨广域网,效果会变差。

整体架构

1341090-20191119144400353-2117369518.png

修改主机名

如果主机名正确,请忽略此步骤

  1. hostnamectl set-hostname centos7_01
  2. hostnamectl set-hostname centos7_02
  3. hostnamectl set-hostname centos7_03

添加hosts

  1. vi /etc/hosts

内容如下:

  1. 192.168.31.149 centos7_01
  2. 192.168.31.186 centos7_02
  3. 192.168.31.238 centos7_03

二、安装erlang

  1. mkdir -p /data/software
  2. yum install -y wget epel-release
  3. cd /data/software
  4. wget http://download.51yuki.cn/esl-erlang_21.3.6-1_centos_7_amd64.rpm
  5. yum -y install esl-erlang_21.3.6-1_centos_7_amd64.rpm
  6. yum clean all

erlang检查

  1. # erl -version
  2. Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 10.3.4

三、rabbitmq安装

  1. cd /data/software
  2. wget http://download.51yuki.cn/rabbitmq-server-generic-unix-3.7.15.tar.xz
  3. tar xvf rabbitmq-server-generic-unix-3.7.15.tar.xz -C /data/
  4. mv /data/rabbitmq_server-3.7.15 /data/rabbitmq
  5. echo 'export PATH=/data/rabbitmq/sbin:$PATH'>> /etc/profile
  6. source /etc/profile
  7. which rabbitmqctl

四、配置rabbitmq

修改配置文件

  1. vi /data/rabbitmq/etc/rabbitmq/rabbitmq-env.conf

内容如下:

  1. RABBITMQ_NODENAME=rabbitmq001@centos7_01
  2. RABBITMQ_NODE_IP_ADDRESS=192.168.31.149
  3. RABBITMQ_NODE_PORT=5672
  4. RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
  5. RABBITMQ_LOG_BASE=/data/rabbitmq/logs

说明:




































属性 描述 默认值
RABBITMQ_NODENAME rabbitmq节点名称,集群中要注意节点名称唯一 linux 默认节点名为 rabbit@$hostname
RABBITMQ_NODE_IP_ADDRESS 绑定的网络接口 默认为空字符串表示绑定本机所有的网络接口
RABBITMQ_NODE_PORT 端口 默认为5672
RABBITMQ_MNESIA_BASE mnesia所在路径 $RABBITMQ_HOME/var/lib/rabbitmq/mnesia
RABBITMQ_LOG_BASE 日志所在路径 $RABBITMQ_HOME/var/log/rabbitmq

更多属性,请参考官网链接:
http://www.rabbitmq.com/man/rabbitmq-env.conf.5.html

编辑配置文件

  1. mkdir -p /data/rabbitmq/data
  2. mkdir -p /data/rabbitmq/logs
  3. vi /data/rabbitmq/etc/rabbitmq/rabbitmq.config

内容如下:

  1. [
  2. {rabbit,
  3. [
  4. {tcp_listeners, [5672]},
  5. {dump_log_write_threshold, [1000]},
  6. {vm_memory_high_watermark, 0.5},
  7. {disk_free_limit, "200MB"},
  8. {hipe_compile,true}
  9. ]
  10. }
  11. ].

注意:[]. 后面有一个点

说明:






























Key Documentation
tcp_listeners 用于监听 AMQP连接的端口列表(无SSL). 可以包含整数 (即”监听所有接口”)或者元组如 {“127.0.0.1”, 5672} 用于监听一个或多个接口.Default: [5672]
dump_log_write_threshold 更改mnesia的转储日志写入阈值 Default: [100]
vm_memory_high_watermark 流程控制触发的内存阀值.相看memory-based flow control 文档.Default: 0.4
disk_free_limit RabbitMQ存储数据分区的可用磁盘空间限制.当可用空间值低于阀值时,流程控制将被触发.此值可根据RAM的总大小来相对设置 (如.{mem_relative, 1.0}).此值也可以设为整数(单位为bytes)或者使用数字单位(如.”50MB”).默认情况下,可用磁盘空间必须超过50MB.参考 Disk Alarms 文档.Default: 50000000
hipe_compile 将此选项设置为true,将会使用HiPE预编译部分RabbitMQ,Erlang的即时编译器.这可以增加服务器吞吐量,但会增加服务器的启动时间.

更多参考,请参考链接:
https://blog.csdn.net/Super_RD/article/details/70327712

修改权限

  1. useradd -u 1020 -s /sbin/nologin rabbitmq
  2. chown -R rabbitmq:rabbitmq -R /data/rabbitmq

另外2台服务器,按以上方式安装rabbitmq和erlang

五、基于镜像队列的集群

登录到第一台主机,启动rabbitmq服务
注意:必须要切换到普通用户

  1. su -s /bin/bash - rabbitmq
  2. nohup /data/rabbitmq/sbin/rabbitmq-server start &

查看输出信息

  1. tail -f nohup.out

输出如下:

  1. HiPE compiling: |---------------------------------------------------------|
  2. |#########################################################|
  3. Compiled 57 modules in 302s
  4. ## ##
  5. ## ## RabbitMQ 3.7.15. Copyright (C) 2007-2019 Pivotal Software, Inc.
  6. ########## Licensed under the MPL. See https://www.rabbitmq.com/
  7. ###### ##
  8. ########## Logs: /data/rabbitmq/logs/centos7_01.log
  9. /data/rabbitmq/logs/centos7_01_upgrade.log
  10. Starting broker...
  11. completed with 0 plugins.

注意:出现completed with,表示启动成功

查看cookie文件是否存在

注意:此文件必须存在

  1. ls .erlang.cookie

查看端口,是否存在

  1. ss -tunlp|grep 5672

拷贝第一台服务器rabbitmq的家目录下.erlang.cookie文件到另外2台服务器rabbitmq的家目录下

  1. scp -P 22 /home/rabbitmq/.erlang.cookie root@192.168.31.186:/home/rabbitmq/
  2. scp -P 22 /home/rabbitmq/.erlang.cookie root@192.168.31.238:/home/rabbitmq/

登录另外2台服务器,修改属主和属组

  1. chown -R rabbitmq.rabbitmq /home/rabbitmq/.erlang.cookie
  2. chmod 600 /home/rabbitmq/.erlang.cookie

启动另外2台rabbitmq服务器

  1. su -s /bin/bash - rabbitmq
  2. nohup /data/rabbitmq/sbin/rabbitmq-server start &

等待几分钟,查看nohup.out输出,确保正常启动了。

查看端口

  1. # ss -tunlp|grep 5672
  2. tcp LISTEN 0 128 *:25672 *:* users:(("beam.smp",pid=11461,fd=66))

安装插件

3台都安装一下

  1. rabbitmq-plugins enable rabbitmq_management

创建用户及授权

登录第一台服务器执行

  1. rabbitmqctl add_user mqadmin "Nwvh3#vu@kqLP&FdHt"
  2. rabbitmqctl set_permissions -p / mqadmin . . .
  3. rabbitmqctl set_user_tags mqadmin administrator

加入集群

登录第一台服务器,查看集群状态

  1. # rabbitmqctl cluster_status
  2. Cluster status of node centos7_01@centos7_01 ...
  3. [{nodes,[{disc,[centos7_01@centos7_01]}]},
  4. {running_nodes,[centos7_01@centos7_01]},
  5. {cluster_name,<<"centos7_01@centos7_01">>},
  6. {partitions,[]},
  7. {alarms,[{centos7_01@centos7_01,[]}]}]

登录rabbitmq002rabbitmq003,加入集群
必须先关闭app

  1. rabbitmqctl stop_app

再加入

  1. rabbitmqctl join_cluster --ram rabbitmq001@centos7_01

最后启动app

  1. rabbitmqctl start_app

查看集群状态
登录到任意节点查询

  1. rabbitmqctl cluster_status

输出如下:

  1. Cluster status of node rabbitmq001@centos7_01 ...
  2. [{nodes,[{disc,[rabbitmq001@centos7_01]},
  3. {ram,[rabbitmq003@centos7_03,rabbitmq002@centos7_02]}]},
  4. {running_nodes,[rabbitmq002@centos7_02,rabbitmq003@centos7_03,
  5. rabbitmq001@centos7_01]},
  6. {cluster_name,<<"rabbitmq001@centos7_01">>},
  7. {partitions,[]},
  8. {alarms,[{rabbitmq002@centos7_02,[]},
  9. {rabbitmq003@centos7_03,[]},
  10. {rabbitmq001@centos7_01,[]}]}]

注意:确保nodes,running_nodes,alarms有3台节点信息

六、前端nginx反向代理

  1. yum install -y nginx
  2. vi /etc/nginx/nginx.conf

增加一行

  1. include /etc/nginx/conf.d/vhosts/*.conf;

创建目录

  1. mkdir /etc/nginx/conf.d/vhosts/
  2. mkdir -p /data/log/nginx/

编辑配置文件

  1. vi /etc/nginx/conf.d/vhosts/rabbitmq.xx.com.conf

内容如下:

  1. upstream rabbitmq {
  2. server 192.168.31.149:15672 max_fails=2 fail_timeout=1;
  3. server 192.168.31.186:15672 max_fails=2 fail_timeout=1;
  4. server 192.168.31.238:15672 max_fails=2 fail_timeout=1;
  5. }
  6. server {
  7. listen 80;
  8. server_name rabbitmq.xx.com;
  9. charset utf-8;
  10. access_log /data/log/nginx/rabbitmq.xx.com.access.log main;
  11. error_log /data/log/nginx/rabbitmq.xx.com.error.log;
  12. location / {
  13. root html;
  14. index index.html index.htm;
  15. proxy_pass http://rabbitmq;
  16. proxy_set_header Host $host;
  17. proxy_set_header X-Real-IP $remote_addr;
  18. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  19. proxy_connect_timeout 300s;
  20. proxy_send_timeout 300s;
  21. proxy_read_timeout 300s;
  22. }
  23. error_page 404 /404.html;
  24. location = /40x.html {
  25. }
  26. error_page 500 502 503 504 /50x.html;
  27. location = /50x.html {
  28. root html;
  29. }
  30. }

启动nginx

  1. nginx -t
  2. nginx

测试访问

  1. http://rabbitmq.xx.com
  2. 用户名:mqadmin
  3. 密码:Nwvh3#vu@kqLP&FdHt

1341090-20191119154414398-686926388.png

效果如下:

1341090-20191119154441986-1155346021.png

本文参考链接:
https://www.cnblogs.com/shihaiming/p/11014257.html

发表评论

表情:
评论列表 (有 0 条评论,136人围观)

还没有评论,来说两句吧...

相关阅读

    相关 RabbitMQ

    RabbitMQ集群 在RabbitMQ集群里,运行时状态包含交换器、队列、绑定器、用户、虚拟主机以及策略,它们对所有节点都可用。 这种共享运行时状态的特性,使得集群

    相关 RabbitMQ安装

    一、准备两台虚拟机 1、设置一台的别名为A,:`vi /etc/hostname` 2、设置另一台的别名为B:`vi /etc/hostname` 3、修改每一个虚

    相关 rabbitmq 部署

    rabbitmq 目前的主要功能是: 1.用作消息队列,发送消息,接受消息 2.用作websocket主动推送引擎,与web端建立长链接 为什么要用到rabbitmq 集

    相关 RabbitMQ

    一、RabbitMQ集群概述 rabbitmq有三种模式:单机模式,普通集群模式,镜像集群模式 1、单机模式: 本地测试用、生产环境不会用 2、普通集

    相关 rabbitmq简介

    rabbitmq自带内建集群,其旨在rabbitmq的高可用,允许消费者和生产者在rabbitmq节点崩溃的情况下继续运行,以及通过添加更多节点的方式来线性扩展消息的吞吐量。但