设为首页 收藏本站
查看: 1167|回复: 0

[经验分享] Windows 下搭建RabbitMQ集群

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-12-28 10:44:59 | 显示全部楼层 |阅读模式
RabbitMQWindows集群操作

1、下载Erlang程序,可以在http://www.erlang.org/download.html这个地方找到最新的Erlang/OTP
2、安装rabbitmq-server-windows程序,下载http://www.rabbitmq.com/server.html
3、分别在每个集群机器上面配置hosts文件,里面是机器的IP地址和机器的名称
例如:192.168.1.26 rabbitmqwin1
           192.168.1.40 rabbitmqwin2
4、集群时需要保证erlang的cookie各个机器一致,否则无法通信。
任意选择一台集群中的机器,进入到C:\Windows目录下,找到.erlang.cookie文件,复制该文件并替换其他各个机器,再把该文件复制到每台集群机器的目录:C:\Users\Administrator  下。保证所有机器下面的这两个目录下的cookie文件内容一致。
5、命令行方式
  • 将各节点的rabbitmq服务开启: rabbitmq-service start
  • 选择其中一个节点将其停止: rabbitmqctl stop_app
  • 将步骤2中的机器加入集群: rabbitmqctl join_cluster (--ram) rabbit@hostname

(ram 为内存节点, 默认情况下为disc磁盘节点) 注意此时的node在windows机器下面是大写的。
  • 开启rabbitmq服务: rabbitmqctl start_app
  • 查看集群状况: rabbitmqctl cluster_status


*以上是单个节点加入集群的方式,只要一个节点加入到集群中的任何一个节点,该节点就算是加入到了集群中.

6、自动化集群
2  关闭所有节点的服务: rabbitmqctl stop_app, rabbitmqctl reset, rabbitmqctl stop
2  在各节点机器下C:\Users\Administrator\AppData\Roaming\RabbitMQ 创建rabbitmq.config文件, 内容为
[{rabbit, [{cluster_nodes, {['rabbit@hostname', 'rabbit@hostname'], disc}}]}].
该配置方式和命令行一样,可以一次将所有节点都写在配置中,也可以只写集群中的一个节点,disc也可改为ram
2  启动所有节点: rabbitmq-server –detached
2  查看集群状况: rabbitmqctl cluster_status
在镜像状况下查看队列的Mater-Slave关系
rabbitmqctl -n [nodename] list_queues name pid slave_pids
在镜像状况下查看队列的Mater-Slave关系及队列的同步状况
rabbitmqctl -n [nodename] list_queues name pid slave_pids synchronised_slave_pids
更多命令请看:
http://www.rabbitmq.com/man/rabbitmqctl.1.man.html

Windows下的rabbitmq的开启与停止也可以在计算机服务中进行手动的开启和停止的。尽量不要用自带的服务,可以使其停止。

erlang profiler tool:
C:\Program Files\erl5.10.1\lib\observer-1.3\priv\bin
命令:etop  perf -node rabbit@RABBITMQWIN2 -tracing off


队列镜像

  • 镜像的意义:

因为集群只是将各个node的元数据复制到各个node,但是每个node的queue及其内容不会复制过去,所以当发生某个node down了,那么这个节点的队列内容就丢失了,而镜像则是将queue中的内容复制到设定的其他node中。
  • Mirrio Queue Behavior

2.1    一个队列镜像会在各个node中建立master-slave队列,一旦master中的队列接   收到了消息,则该消息会同步到slave的队列中,并且保证顺序一致。
2.2    如果镜像队列的slave node挂了,那么client不会有什么影响或收到通知
2.3    如果镜像队列的master node挂了,那么其中一个slave会自动接替为master,并会发生如下变化:
2.3.1          最老的那个slave会被提升为master,因为它最有可能包含最多的master消息,如果之前没有同步,则master中的部分消息会丢失.
2.3.2          Slave node会认为之前所有的consumers突然断线,结果就是它会将所有已发出但是还没收到确认的消息重新发送出去,可能consumers已经接收过了,但是对于new master来说,它别无选择。
2.3.3          如果consumer client支持Consumer Cancellation Notifications扩展,那么将会接收一个通知,表明他们订阅的镜像队列已经突然取消了。这时应该re-consume new master的镜像队列,需要重新和存活下来的集群node建立连接。
2.3.4          对于re-comsume 来说,有可能会接收到之前接收过的消息
2.4    Publish client 仍然会接收到confirm消息即便是master(或任何slave)在消息发布后和confirm消息在发送过程中fail了。
2.5    镜像队列支持Confirm和Transactions,当镜像队列中所有的节点的队列都得到应用之后,confirm或transactions才会被认为成功。
  • 未同步的Slaves

一个新的node加入到cluster后,该node中的队列是空的,不包含任何已有的队列中的内容,当前,没有对已有内容的同步协议。只能从加入之后开始同步接收到的消息。当之前已有的消息都被取走以后,那么该队列才会被认为是和master中的相关队列同步了。所以建议在配置镜像之前就先将各个node加入到cluster,这样就能确保所有Node中的镜像队列都是已同步的。
可以通过以下命令查看已同步的slaves:
Rabbitmqctl list_queues name slave_pids synchronised_slave_pids
  • 开始和停止node

如果停止了包含镜像master队列的node, 那么其他的slave会被提升为master。如果继续停止,则最后一个node(支持持久化)停止后,它的镜像队列的内容会在该node重启以后恢复,但是如果这时重启了其他的node,则那么node会重新加入镜像队列,不过它们本地所包含的内容或被丢弃,就好像它们是新加入的一样。
  • 配置镜像

队列通过policy开启镜像功能。在任何时候可以修改policy,也可以先创建非镜像队列,然后让它变成镜像队列,反之亦然。非镜像队列相比镜像队列会运行得更快,因为它不包含额外的镜像基础结构。


ha-mode
ha-params
Result
all

匹配policy的队列会在所有的node中建立镜像,当一个新的node加入,自动在该node中创建那个匹配的队列
exactly
数量
在指定数量的nodes中创建匹配policy队列镜像。如果cluster中node个数少于指定数量,则同all.如果多于指定数量,并且其中包含镜像的node挂了,那么不会在其他没有创建镜像的node中创建镜像
nodes
node names
在指定名字的node中创建匹配policy队列的镜像。如果cluster中不包含任何指定的node,不会引发错误。如果指定的node在队列声明时都不在线,那么队列将会在client连接的那个node上创建。

      案例:

      创建一个名字以ha.开头的队列的镜像到集群中所有的nodes中

rabbitmqctl
rabbitmqctl set_policy ha-all "^ha\." '{"ha-mode":"all"}'
rabbitmqctl (Windows)
rabbitmqctl set_policy ha-all "^ha\." "{""ha-mode"":""all""}"
HTTP API
PUT /api/policies/%2f/ha-all {"pattern":"^ha\.", "definition":{"ha-mode":"all"}}
Web UI
  • Navigate to Admin > Policies > Add / update a policy.
  • Enter "ha-all" next to Name, "^ha\." next to Pattern, and "ha-mode" = "all" in the first line next to Policy.

Click Add policy.

       创建一个名字以two.开头的队列的镜像到集群中任意2个nodes中:


rabbitmqctl
rabbitmqctl set_policy ha-two "^two\." \
   '{"ha-mode":"exactly","ha-params":2}'
rabbitmqctl (Windows)
rabbitmqctl set_policy ha-two "^two\." ^
   "{""ha-mode"":""exactly"",""ha-params"":2}"
HTTP API
PUT /api/policies/%2f/ha-two {"pattern":"^two\.", "definition":{"ha-mode":"exactly", "ha-params":2}}
Web UI
  • Navigate to Admin > Policies > Add / update a policy.
  • Enter "ha-two" next to Name and "^two\." next to Pattern.
  • Enter "ha-mode" = "exactly" in the first line next to Policy, then "ha-params" = 2 in the second line, and set the type on the second line to "Number".

Click Add policy.









运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-320607-1-1.html 上篇帖子: zimbra中启用了dns检查后通过个别需放行的SMTP IP地址之设置 下篇帖子: 64位系统下报错:cannot load OCI DLL,126 Windows
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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