热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

阿里云环境迁移记录RabbitMQ集群搭建

RabbitMQ模式大概分为以下三种:(1)单一模式。(2)普通模式(默认的集群模式)。(3)镜像模式(把需要的队列做成镜像队列,存在于多个节点,属于R

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

RabbitMQ的集群节点包括内存节点、磁盘节点。
RabbitMQ支持消息的持久化也就是数据写在磁盘上,默认是磁盘节点。

RabbitMQ相关端口

4369 (epmd), 25672 (Erlang distribution)
5672, 5671 (AMQP 0-9-1 without and with TLS)
15672 (if management plugin is enabled)
61613, 61614 (if STOMP is enabled)
1883, 8883 (if MQTT is enabled)

RabbitMQ 集群节点设置

server103.example.com IP: 192.168.72.103 Node: disk
server105.example.com IP: 192.168.72.105 Node: disk
server106.example.com IP: 192.168.72.106 Node: disk

rabbitMQ单机安装配置

1. 安装erlang依赖
yum install -y epel-release
或者通过yum源安装
#添加EPEL源
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
添加Erlang源
rpm -Uvh http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm

2. 安装RabbitMQ Server
yum install -y rabbitmq-server
(默认安装目录为:/usr/lib/rabbitmq/bin/)

或者通过yum源安装

wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-3.6.1-1.noarch.rpm
rpm --import https://www.rabbitmq.com/rabbitmq-signing-key-public.asc
yum install rabbitmq-server-3.6.1-1.noarch.rpm

3. 单机配置
#调整系统限制

vi /etc/sysctl.conf
fs.file-max = 300000

#设置生效
sysctl -p
#查看
sysctl fs.file-max

#调整用户限制
vi /etc/security/limits.conf

* soft nofile 65536
* hard nofile 65536

#添加host
echo "192.168.72.103 server103" >> /etc/hosts

#防火墙打开端口

firewall-cmd --permanent --add-port=15672/tcp
firewall-cmd –-reload

#设置自动重启

chkconfig rabbitmq-server on
service rabbitmq-server start

#启动监控插件

rabbitmq-plugins list //查看插件安装情况
rabbitmq-plugins enable rabbitmq_management //启用rabbitmq_management服务

4. 用户管理
#添加用户

rabbitmqctl add_user admin admin
rabbitmqctl add_user travel 88gongxiangrbq

#设置用户角色

rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_user_tags travel administrator

#设置用户权限(设置admin用户配置、写、读的权限)

rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
rabbitmqctl set_permissions -p / travel ".*" ".*" ".*"

#删除guest用户
rabbitmqctl delete_user guest

rabbitmq从3.3.0开始禁止使用guest/guest权限通过除localhost外的访问。
如果想使用guest/guest通过远程机器访问,需要在rabbitmq配置文件中(/etc/rabbitmq/rabbitmq.config)中设置loopbackusers为[]。
[{rabbit, [{loopbackusers, []}]}].

#管理界面
在浏览器中打开http://192.268.72.104:15672

#默认配置说明
cat /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.1/sbin/rabbitmq-defaults

  • 系统prefix是空
  • 配置文件路径是 /etc/rabbitmq/rabbitmq.config (erlang会自动加上.config后缀)
  • 环境配置文件是 /etc/rabbitmq/rabbitmq-env.conf
  • 日志文件目录是 /var/log/rabbitmq
  • 插件文件目录是 安装目录下的plugins,这里RPM安装方式下是 /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.1/plugins

集群配置

1. 配置三台机器的主机名(三台机器分别执行)

hostnamectl set-hostname server103
hostnamectl set-hostname server105
hostnamectl set-hostname server106

查看效果:
hostname

配置三台机器的hosts解析(三台机器都添加如下配置)

vi /etc/hosts
192.168.72.103 server103
192.168.72.105 server105
192.168.72.106 server106

2. 设置每个节点COOKIE
Rabbitmq的集群是依赖于erlang的集群来工作的,所以必须先构建起erlang的集群环境。Erlang的集群中各节点是通过一个magic COOKIE来实现的,这个COOKIE存放在 /var/lib/rabbitmq/.erlang.COOKIE 中,文件是400的权限。所以必须保证各节点COOKIE保持一致,否则节点之间就无法通信

选择其中一台作为集群主节点,将其COOKIEcopy到另外两台机器上。

chmod 700 /var/lib/rabbitmq/.erlang.COOKIE
echo -n "YACWQCCKIKHSVKFFJYBL" > /var/lib/rabbitmq/.erlang.COOKIE
chmod 400 /var/lib/rabbitmq/.erlang.COOKIE

网上看到有些朋友,将其中一台的COOKIE,远程发送到其他节点服务器,这样容易导致COOKIE文件的属组变化,默认为rabbitmq,下面的一个错误会提到。

#修改COOKIE后需要重启mq

ps -ef | grep ^rabbitmq | awk '{print $2}' | xargs kill -9
service rabbitmq-server start

常见的启动失败:
Starting rabbitmq-server (via systemctl): Job for rabbitmq-server.service failed because the control process exited with error code. See "systemctl status rabbitmq-server.service" and "journalctl -xe" for details.

查看日志:

tail -f /var/log/rabbitmq/startup_log
{error_logger,{{2019,2,19},{16,10,19}},"Error when reading /var/lib/rabbitmq/.erlang.COOKIE: eacces",[]}
{error_logger,{{2019,2,19},{16,10,19}},crash_report,[[{initial_call,{auth,init,[&#39;Argument__1&#39;]}},{pid,<0.20.0>},{registered_name,[]},{error_info,{exit,{"Error when reading /var/lib/rabbitmq/.erlang.COOKIE: eacces",[{auth,init_COOKIE,0,[{file,"auth.erl"},{line,285}]},{auth,init,1,[{file,"auth.erl"},{line,139}]},{gen_server,init_it,6,[{file,"gen_server.erl"},{line,304}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,239}]}]},[{gen_server,init_it,6,[{file,"gen_server.erl"},{line,328}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,239}]}]}},{ancestors,[net_sup,kernel_sup,<0.10.0>]},{messages,[]},{links,[<0.18.0>]},{dictionary,[]},{trap_exit,true},{status,running},{heap_size,610},{stack_size,27},{reductions,643}],[]]}

主要是访问COOKIE失败导致的&#xff0c;可以尝试修改COOKIE的权限和属组&#xff1a;

cd /var/lib/rabbitmq/
chown rabbitmq:rabbitmq .erlang.COOKIE
chmod 400 .erlang.COOKIE

启动成功后查看状态&#xff1a;
rabbitmqctl status

状态显示可能会遇到链接不上的错误&#xff0c;如下&#xff1a;
Status of node rabbit&#64;server104 ...
Error: unable to connect to node rabbit&#64;server104: nodedown

DIAGNOSTICSattempted to contact: [rabbit&#64;server104]rabbit&#64;server104:* connected to epmd (port 4369) on server104* epmd reports node &#39;rabbit&#39; running on port 25672* TCP connection succeeded but Erlang distribution failed* suggestion: hostname mismatch?* suggestion: is the COOKIE set correctly?* suggestion: is the Erlang distribution using TLS?

原因&#xff1a;
RabbitMQ的erlang.COOKIE和用户的COOKIE冲突了&#xff0c;需要用rabbitmq的COOKIE去覆盖用户的COOKIE。
解决方式:
sudo cp /var/lib/rabbitmq/.erlang.COOKIE ~/.erlang.COOKIE
重启

  1. 加入集群
    将 server103、server105 、server106组成集群&#xff1a;
    默认是磁盘节点&#xff0c;如果是内存节点的话&#xff0c;需要加--ram参数
    在server103、server105上分别运行&#xff1a;

    rabbitmqctl stop_app
    rabbitmqctl join_cluster rabbit&#64;server106 --ram
    rabbitmqctl start_app

阿里云环境迁移记录 - RabbitMQ集群搭建

#将节点从集群中去掉
rabbitmqctl forget_cluster_node rabbit&#64;server104

节点恢复过程中把数据删掉很重要&#xff0c;恢复一单结点&#xff0c;再清数据
节点增加&#xff1a;

1. rabbitmq-server -detached --- .erlang.cooike的权限&#xff0c;400 属主rabbitmq
2. rabbitmqctl stop_app
3. rabbitmqctl join_cluster --ram rabbit&#64;rabbitmq1
4. rabbitmqctl start_app
5. rabbitmqctl cluster_status

节点删除

1. rabbitmq-server -detached
以上为基础&#xff0c;正常运行的mq节点直接进行2、3两步&#xff1b;4可省略或更改为rabbitmqctl stop
2. rabbitmqctl stop_app
3. rabbitmqctl reset
4. rabbitmqctl start_app

  1. 设置镜像策略
    rabbitmqctl set_policy ha-all "^" &#39;{"ha-mode":"all","ha-sync-mode":"automatic"}&#39;

如果想切换节点类型&#xff0c;譬如由disc-->ram&#xff0c;可以先恢复到单结点&#xff0c;重启&#xff0c;清数据&#xff0c;再添加集群。


转载于:https://blog.51cto.com/10705830/2351837


推荐阅读
  • 在Kubernetes上部署JupyterHub的步骤和实验依赖
    本文介绍了在Kubernetes上部署JupyterHub的步骤和实验所需的依赖,包括安装Docker和K8s,使用kubeadm进行安装,以及更新下载的镜像等。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Windows 7 部署工具DISM学习(二)添加补丁的步骤详解
    本文详细介绍了在Windows 7系统中使用部署工具DISM添加补丁的步骤。首先需要将光驱中的安装文件复制到指定文件夹,并进行挂载。然后将需要的MSU补丁解压并集成到系统中。文章给出了具体的命令和操作步骤,帮助读者完成补丁的添加过程。 ... [详细]
  • phpcomposer 那个中文镜像是不是凉了 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
  • 1.直接在cmd窗口运行pipinstalljieba2.使用conda自带的安装工具condainstalljieba3.有一些模块是无法使用以上两种方式安装上ÿ ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • BZOJ1233 干草堆单调队列优化DP
    本文介绍了一个关于干草堆摆放的问题,通过使用单调队列来优化DP算法,求解最多可以叠几层干草堆。具体的解题思路和转移方程在文章中进行了详细说明,并给出了相应的代码示例。 ... [详细]
author-avatar
ScilenceBill
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有