⑴ 如何让rabbitmq在命令行快速启动
首先保证软件包正确,然后解压后依次按下面步骤执行: 打开一个终端,su -成root用户 1>su root 正确切换到root用户,然后进入软件包解压路径 2>cd 软件解压包路径 执行软件解压包路径里的软件安装脚本 3> ./安装脚本
⑵ RabbitMQ集群
如果有一个消息生产者或者消息消费者通过amqp-client的客户端连接至节点1进行消息的发布或者订阅,那么此时的集群中的消息收发只与节点1相关。
如果消息生产者所连接的是节点2或者节点3,此时队列1的完整数据不在该两个节点上,那么在发送消息过程中这两个节点主要起了一个路由转发作用,根据这两个节点上的元数据转发至节点1上,最终发送的消息还是会存储至节点1的队列1上。
RabbitMQ 集群是一个或多个节点的逻辑分组,每个节点共享用户、虚拟主机、队列、交换器、绑定、运行时参数和其他分布式状态。
一些分布式系统 有leader和follower节点。 对于 RabbitMQ 来说, RabbitMQ集群中的所有节点都是平等的。
RabbitMQ 集群可以通过多种方式组成:
RabbitMQ 节点绑定到端口以接受客户端和 CLI 工具连接。其他进程和工具(例如 SELinux)可能会阻止 RabbitMQ 绑定到端口。发生这种情况时,节点将无法启动。
CLI工具、客户端库和 RabbitMQ 节点也会打开连接(客户端 TCP 套接字)。防火墙会阻止节点和 CLI 工具相互通信。确保可以访问以下端口:
RabbitMQ节点和 CLI 工具(例如 rabbitmqctl)使用 cookie 来确定它们是否被允许相互通信。为了让两个节点能够通信,它们必须具有相同的共享密钥,称为 Erlang cookie。cookie 只是一串最多 255 个字符的字母数字字符。 它通常存储在本地文件中。该文件必须只能由所有者访问(例如具有 600 或类似的 UNIX 权限)。每个集群节点必须具有相同的 cookie。
在 UNIX 系统上,cookie通常是位于/var/lib/rabbitmq/.erlang.cookie(由服务器使用)和$HOME/.erlang.cookie(由 CLI 工具使用)。
RabbitMQ 节点使用主机名相互寻址
<!== 所有主机执行 ==>
<!== 所有主机执行 ==>
<!== 所有主机执行 ==>
默认配置文件/usr/lib/rabbitmq/lib/rabbitmq_server-3.7.17/ebin/rabbit.app
<!== node01主机执行 ==>
<!== node02主机执行 ==>
<!== node03主机执行 ==>
<!== 所有主机执行 ==>
因RabbitMQ 集群元数据同步基于 cookie 共享方案实现
文件路径/var/lib/rabbitmq/.erlang.cookie
<!== node02、node03主机执行 ==>
<!== 任意主机执行 ==>
节点分为:磁盘节点及内存节点
RAM节点是一种特殊情况,可用于提高具有高队列、交换或绑定搅动的集群的性能。RAM节点不提供更高的消息速率。 官方建议在绝大多数情况下,仅使用磁盘节点。
如果一个集群中都是RAM节点,那么集群停止,将无法再次启动,并将丢失所有数据
官方提示:经典队列镜像将在未来版本中删除,考虑改用仲裁队列或非复制经典队列
每个镜像队列由一个领导副本和一个或多个镜像副本,leader被托管的节点成为leader节点。首先应用给定队列的所有操作 在队列的leader节点上,然后传播到镜像。
如果承载队列的leader节点出现故障,则只要已同步,最旧的镜像将升级为新的leader。根据队列镜像参数,也可以升级未同步的镜像。
队列通过策略启用了镜像,策略模式的说明如下:
每当队列的策略发生变化时,它都保持其现有的镜像尽可能适用新策略。
设置的镜像队列可以通过开启的网页的管理端Admin->Policies,也可以通过命令。
管理端界面:
命令行:
为避免集群中的某个节点托管大多数leader队列,因此导致高负载,leader队列应合理均匀的分布在集群节点上。控制leader队列分布节点策略有三种,可以在rabbitmq.conf文件中定义queue_master_locator参数设置
修改节点策略可能会导致现有的leader队列没有在新的策略中,为了防止消息丢失,RabbitMQ会保留现有的leader直到至少另一个镜像已同步,一旦发生同步,消费者将与leader断开连接,需要重新连接。
如果leader故障,其他镜像升级为leader过程如下:
如果消费者使用 自动确认模式 ,那么消息可能会丢失。这与非镜像队列没有什么不同:代理认为消息一旦以自动确认模式发送给消费者,就会被确认。
如果客户端突然断开连接,则可能永远不会收到消息。在镜像队列的情况下,如果leader死亡,那些正在以 自动确认模式 发送给消费者的消息可能永远不会被这些客户端接收,并且不会被新leader重新排队。由于消费客户端连接到存活节点的可能性,消费者取消通知有助于识别此类事件何时发生。 当然,在实践中,如果数据安全性不如吞吐量重要,那么自动确认模式是可行的方法。
节点可以随时加入集群。 根据队列的配置,当节点加入集群时,队列可能会在新节点上添加镜像。 此时,新镜像将是空的:它不会包含队列中任何现有的内容。 这样的镜像将接收发布到队列的新消息,因此随着时间的推移将准确地表示镜像队列的尾部。 随着消息从镜像队列中排出,新镜像丢失消息的队列头部的大小将缩小,直到最终镜像的内容与leader的内容完全匹配。 在这一点上,镜像可以被认为是完全同步的。
新添加的镜像不提供添加镜像之前存在的队列内容的额外形式的冗余或可用性,除非队列已明确同步。 由于在发生明确同步时队列变得无响应,因此最好允许正在从中排出消息的活动队列自然同步,并且仅明确同步非活动队列。
启用自动队列镜像时,请考虑所涉及队列的预期磁盘数据集 。 具有庞大数据集(例如,数十 GB 或更多)的队列必须将其复制到新添加的镜像中,这会给集群资源(例如网络带宽和磁盘 I/O)带来很大的负载。
要查看镜像状态(是否同步):
手动同步队列:
取消正在进行的同步:
如果你停止一个包含镜像队列leader的 RabbitMQ 节点,其他节点上的一些镜像将被提升为leader。 如果继续停止节点,那么将到达一个镜像队列不再有镜像的点:它仅存在于一个节点上,且该节点上它是leader。 如果它的最后一个剩余节点关闭,但是镜像队列被声明为持久的,那么队列中的持久消息将在该节点重新启动后继续存在。
然而,镜像目前无法知道它的队列内容是否已经偏离了它重新加入的leader。 因此,当一个镜像重新加入一个镜像队列时, 它会丢弃已经拥有的任何持久本地内容并开始为空 。
默认情况下,RabbitMQ 将拒绝leader节点在受控关闭(即明确停止 RabbitMQ 服务或关闭操作系统)时提升异步镜像,以避免消息丢失; 相反,整个队列将关闭,就好像未同步的镜像不存在一样。
leader节点不受控制的关闭(即服务器或节点崩溃,或网络中断)仍将触发未同步镜像的提升。
如果您希望在所有情况下都让leader队列移动到未同步的镜像(即,您会选择队列的可用性而不是避免由于未同步的镜像升级而导致的消息丢失),那么将 ha-promote-on-shutdown 策略键设置为 always 而不是比它的默认值 when-synced 。
如果 ha-promote-on-failure 策略键设置为 when-synced ,则即使 ha-promote-on-shutdown 键设置为 always ,也不会提升未同步的镜像。 这意味着如果leader节点发生故障,队列将变得不可用,直到leader恢复。 如果leader队列永久丢失,队列将不可用,除非它被删除(这也将删除其所有内容)并重新声明。
当队列的所有镜像都关闭时,可能会丢失队列的leader。 在正常操作中,队列关闭的最后一个节点将成为leader,该节点在再次启动时仍然是leader(因为它可能收到了其他镜像没有看到的消息)。
但是,当您调用 rabbitmqctl forget_cluster_node 时,RabbitMQ 将尝试为每个在我们忘记的节点上有其领导者的队列找到当前停止的镜像,并在它再次启动时“提升”该镜像成为新的领导者。 如果有多个候选者,将选择最近停止的镜像。
重要的是要理解 RabbitMQ 只能在 forget_cluster_node 期间提升停止的镜像,因为任何再次启动的镜像都会清除它们的内容,如上面“停止节点和同步”中所述。 因此在停止的集群中移除丢失的leader时,您必须在再次启动镜像之前调用 rabbitmqctl forget_cluster_node 。
⑶ ubuntu怎么安装rabbitmq
安装RabbitMQ服务软件包
输入以下命令进行安装
#apt install rabbitmq-server
安装完成后在rabbitMQ中添加openstack用户,为后续安装openstack提取做好准备
命令:#rabbitmqctl add_user openstack dick
其中dick为openstack用户登录rabbitMQ服务的密码
同时为openstack用户设置读写等权限
命令:#rabbitmqctl set_permissions openstack ".*" ".*" ".*"
安装RabbitMQ监控管理插件进行RabbitMQ的管理
命令:#rabbitmq-plugins enable rabbitmq_management
插件rabbitmq_management启动成功后就可以通过web页面进行RabbitMQ的监控和管理
使用rabbitmq_management插件进行监控和管理
使用firefox浏览器登录:http://localhost:15672
在登录页面使用 guest/guest用户名和密码登录RabbitMQ管理系统,在系统中可以对RabbitMQ服务进行channel,queue,用户等的管理
安装pika开发RabbitMQ客户端
命令: # pip install pika
⑷ win 7 rabbitmq 需要安装哪些
安装
1、Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装RabbitMQ之前要先安装Erlang。
注意:
1.现在先别装最新的 3.6.3 ,本人在安装完最新的版本,queue 队列有问题,降到了 3.6.2 就解决了。
2.默认安装的Rabbit MQ 监听端口是:5672
配置
1、安装完以后erlang需要手动设置ERLANG_HOME 的系统变量。
输入:set ERLANG_HOME=C:\Program Files\erl8.0
如下图所示:
2、激活Rabbit MQ's Management Plugin
使用Rabbit MQ 管理插件,可以更好的可视化方式查看Rabbit MQ 服务器实例的状态,你可以在命令行中使用下面的命令激活。
输入:rabbitmq-plugins.bat enable rabbitmq_management
如下图所示:
同时,我们也使用rabbitmqctl控制台命令(位于 rabbitmq_server-3.6.3\sbin>)来创建用户,密码,绑定权限等。
3、创建管理用户
输入:rabbitmqctl.bat add_user zhangweizhong weizhong1988
如下图所示:
4、设置管理员
输入:rabbitmqctl.bat set_user_tags zhangweizhong administrator
5、设置权限
输入:rabbitmqctl.bat set_permissions -p / zhangweizhong ".*" ".*" ".*"
如下图所示:
6、其他命令
查询用户: rabbitmqctl.bat list_users
查询vhosts: rabbitmqctl.bat list_vhosts
启动RabbitMQ服务: net stop RabbitMQ && net start RabbitMQ
以上这些,账号、vhost、权限、作用域等基本就设置完了。
Rabbit MQ管理后台
使用浏览器打开http://localhost:15672 访问Rabbit Mq的管理控制台,使用刚才创建的账号登陆系统即可。
Rabbit MQ 管理后台,可以更好的可视化方式查看RabbitMQ服务器实例的状态,
创建vhosts
1、创建vhosts, 在admin页面,点击右侧Virtual Hosts ,
2、 将刚创建的OrderQueue分配给相关用户。
3、其他创建exchange ,queue 大家自己在后台创建吧,这里不再赘述。
⑸ rabbitmq需要开哪些端口
假设读者在Windows系列的操作系统中安装好了Rabbit MQ后,请找到安装路径下的etc文件夹下,将rabbitmq.config.example备份一份,并修改为config类型的文件,即为rabbitmq.config,
然后,打开rabbitmq.config,找到tcp_listeners这个key,将其前面的注释%%去掉,然后将后面的整数值5672改为你想要的端口号,如下图所示,那么你的端口号就修改好了
接着,找到heartbeat,去掉注释,将后面的心跳时间改为你想要的值,并记得去掉后面的逗号!!!
接下来需要编辑环境变量,在系统环境变量中新增变量名"RABBITMQ_CONFIG_FILE",值为你Rabbit MQ安装目录下的etcrabbitmq(注意,不要加;),详见下图。
最后,用命令对Rabbitmq服务停止、更新、启动。
登陆web管理界面,在Connections下的Timeout中看到的值是你所修改的,那么恭喜你,成功了!不是的话,请认真看本博文,再不行,可以找我。
⑹ 如何创建rabbitmq.config文件
1、安装
在Mac下安装RabbitMQ是非常简单的,一般默认RabbitMQ服务器依赖的Erlang已经安装,只需要用下面两个命令就可以完成RabbitMQ的安装(前提是homebrew已经被安装):
?
brew update
brew install rabbitmq
安装完成后需要将/usr/local/sbin添加到$PATH,可以将下面这两行加到~/.bash_profile或者~/.profile:
# RabbitMQ Config
export PATH=$PATH:/usr/local/sbin
在Windows下安装稍微麻烦些,需要先安装ErLang,然后下载RabbitMQ可执行文件安装。
2、启动RabbitMQ服务
上面配置完成后,需要关闭终端窗口,重新打开,然后输入下面命令即可启动RabbitMQ服务:
rabbitmq-server!
可以在后面加-detatched选项参数表示以守护进程方式启动。
⑺ RabbitMQ 镜像集群 宕机恢复、负载均衡、跨机房多活
起因:在实际项目开发过程中,需要使用RabbitMQ来实现消息队列的功能,但仅仅实现功能之后并不能对自己满足,既然学一次,就要更深的了解她,吃一吃架构方面的相关内容,提升自己。
RabbitMQ在镜像集群中,机器其实是平行关系,所有的节点都是互相复制的
场景描述:
A是Master
B是Slave
A正常运行,B宕机了,只需要启动B即可,B就会自动加入集群
A和B都宕机了,只要A在B之前启动就可以了
A和B都宕机了,A启动不起来了,即便是B启动了,有可以B直接启动不了啦
B和C都加入了A为Master的集群,这个时候都需要将B和C从A的集群中forget,B和C启动不起来了
RabbitMQv3.2版本以后提供了一个离线清除集群节点的命令参数,也就是节点无法启动状态下
HAProxy是一款提供高可用的负载均衡器(之前大家都是使用的Nginx居多,upstream反向代理实现负载均衡非常容易),HAProxy可以基于TCP四层(Lvs也是TCP四层的),HTTP七层(Nginx是HTTP七层)的负载均衡应用代理软件,免费高速可靠的一种LBS解决方案
HAProxy的并发连接完全可以支持以万为单位的
Nginx
优点:
1、工作在网络7层之上,可针对http应用做一些分流的策略,如针对域名、目录结构,它的正规规则比HAProxy更为强大和灵活,所以,目前为止广泛流行。
2、Nginx对网络稳定性的依赖非常小,理论上能ping通就能进行负载功能。
3、Nginx安装与配置比较简单,测试也比较方便,基本能把错误日志打印出来。
4、可以承担高负载压力且稳定,硬件不差的情况下一般能支撑几万次的并发量。
5、Nginx可以通过端口检测到服务器内部的故障,如根据服务器处理网页返回的状态码、超时等,并会把返回错误的请求重新提交到另一个节点。
6、不仅仅是优秀的负载均衡器/反向代理软件,同时也是强大的Web应用服务器。可作为静态网页和图片服务器,在高流量环境中稳定性也很好。
7、可作为中层反向代理使用。
缺点:
1、适应范围较小,仅能支持http、https、Email协议。
2、对后端服务器的健康检查,只支持通过端口检测,不支持url来检测
3、负载均衡策略比较少:轮询、权重、IP_hash、url_hash
HAProxy
优点:
1、HAProxy是支持虚拟主机的,可以工作在4、7层(支持多网段)
2、HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导;同时支持通过获取指定的url来检测后端服务器的状态。
3、HAProxy跟LVS类似,本身就只是一款负载均衡软件;单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
4、HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡,对后端的MySQL节点进行检测和负载均衡。
5、HAProxy负载均衡策略非常多,HAProxy的负载均衡算法现在具体有如下8种
缺点:
1、不支持POP/SMTP协议
2、不支持SPDY协议
3、不支持HTTP cache功能。现在不少开源的lb项目,都或多或少具备HTTP cache功能。
4、重载配置的功能需要重启进程,虽然也是soft restart,但没有Nginx的reaload更为平滑和友好。
5、多进程模式支持不够好
HAProxy+Keepalived(负载均衡节点的高可用)
将上面的配置文件内容放入 /etc/haproxy/haproxy.cfg中
启动HAProxy
启用成功后可以到控制台进行验证
通过federation的配置来进行数据通道搭建
这个时候你需要自己定义一个上游节点upstream(166节点),一个下游节点downstream(167节点),federation是单向发送的,相当于消息发送到upstream的一个exchange上,然后转发到downstream的queue上
1、 在下游节点创建一个exchage和一个queue和binding的routingkey,用来进行数据接收
2、 在下游节点建立federation upstream规则和上游节点进行数据同步
3、 进入下游节点的federation status没有任何数据,需要建立策略来保证通道连通
4、 进入下游节点的Policy菜单,Pattern是个正则表达式,这里表示以down开头的exchange和queue都匹配
5、 这个时候看exchange和queue,规则就应用上了
6、 这个时候去federation status看,发现上游连接已经连接上了
7、 这个时候我们先去看上游的overview
8、 再看上游的exchange和queue就已经根据下游配置的upstream和policy规则将exchange和queue创建好了
灰色的这个重定向exchange不能发送消息,如果要发送则在down-exchange上进行发送
9、 我们在上游的down-exchange发送一条消息,进行测试
可以在下游查看这条消息
10、 因为上游及节点只是一个中转,如果上游及诶单也要消息down-exchange里的消息怎么办?
只需要在本地建立一个binding关系就好
不要以为每天把功能完成了就行了,这种思想是要不得的,互勉~!
⑻ RabbitMQ启动失败
你在发送的时候指定exchange即可 这里用pika做例 channel.basic_publish(exchange=test_exchange, routing_key='', body=message, properties=pika.BasicProperties(delivery_mode = 2) ) 然后在接收的时候声明你的队列绑定这个exchange