zoukankan      html  css  js  c++  java
  • Linux下面安装RabbitMQ Cluster

    安装rabbitmq cluster:

    设置 Erlang Cookie
    安装完RabbitMQ之后,在第一台机器上面启动RabbitMQ,然后在停止.复制node1上的/var/lib/rabbitmq/.erlang.cookie文件到node2, node3.
    这里将 node1 的该文件复制到 node2、node3,由于这个文件权限是 400,所以需要先修改 node2、node3 中的该文件权限为 777,否则不能复制:

    cat /var/lib/rabbitmq/.erlang.cookie
    chmod 777 /var/lib/rabbitmq/.erlang.cookie
    ll /var/lib/rabbitmq/.erlang.cookie

    然后将 node1 中的该文件拷贝到 node2、node3,最后将权限和所属用户/组修改回来:

    chmod 400 /var/lib/rabbitmq/.erlang.cookie
    chgrp rabbitmq /var/lib/rabbitmq/.erlang.cookie
    chgrp rabbitmq /var/lib/rabbitmq/.erlang.cookie

    设置 Erlang Cookie

    如果启动,需要停止:
    rabbitmqctl stop或service rabbitmq-server stop
    使用 -detached 参数运行各节点
    node1$ rabbitmq-server -detached
    node2$ rabbitmq-server -detached
    node3$ rabbitmq-server -detached

    这样就创建了 3 个独立的 RabbitMQ broker ,每一个 node 上一个,可以通过 cluster_status 命令来确认:

    node1$ rabbitmqctl cluster_status
    node2$ rabbitmqctl cluster_status
    node3$ rabbitmqctl cluster_status

    组成集群将 node2、node3 与 node1 组成集群:

    node1/2/3:

    --node1,node2,node3
    node1/2/3$ iptables -I INPUT -p tcp --dport 4369 -j ACCEPT
    node1/2/3$ iptables -I INPUT -p tcp --dport 25672 -j ACCEPT
    node1/2/3$ service iptables save
    node1/2/3$ service iptables restart

    node2/3:

    --node2
    node2$ rabbitmqctl stop_app
    node2$ rabbitmqctl join_cluster --ram rabbit@node1
    node2$ rabbitmqctl start_app
    
    --node3
    node2$ rabbitmqctl stop_app
    node2$ rabbitmqctl join_cluster --ram rabbit@node1
    node2$ rabbitmqctl start_app

     

    集群配置好后,可以在 RabbitMQ 任意节点上执行 rabbitmqctl cluster_status 来查看是否集群配置成功。

     改变 node 的类型

    我们可以改变 node 的类型,如磁盘 node 到内存 node ,或者相反。比如将 rabbit@rabbit2 和 rabbit@rabbit3 的 node 类型都变成和之前不同的种类。我们可以使用命令 change_cluster_node_type 来进行转换,但是首先需要将 node 停止。

    node2$ rabbitmqctl stop_app
    Stopping node rabbit@node2 ...done.
    node2$ rabbitmqctl change_cluster_node_type disc
    Turning rabbit@node2 into a disc node ...
    ...done.
    node2$ rabbitmqctl start_app
    Starting node rabbit@node2 ...done.
    
    node3$ rabbitmqctl stop_app
    Stopping node rabbit@node3 ...done.
    node3$ rabbitmqctl change_cluster_node_type ram
    Turning rabbit@node3 into a ram node ...
    node3$ rabbitmqctl start_app
    Starting node rabbit@node3 ...done.

    设置镜像队列策略在任意一个节点上执行:

    rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
    将所有队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态保持一直。
    完成这 6 个步骤后,RabbitMQ 高可用集群就已经搭建好了,最后一个步骤就是搭建均衡器。

    重新启动 cluster node

    cluster 中的 node 在任何时候都可以被停止。 同样地如果他们崩溃了也是没有任何问题的。在上述两种情况中,cluster 中的其他 node 都可以不受任何影响的继续运行,这些“非正常” node 重新启动后会自动地与 cluster 中的其他 node 取得联系。

    我们手动关闭 rabbit@rabbit1 和 rabbit@rabbit3 后,通过命令查看 cluster 的状态: 
     
    rabbit1$ rabbitmqctl stop
    Stopping and halting node rabbit@rabbit1 ...done.
    
    rabbit2$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit2 ...
    [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2]},{ram,[rabbit@rabbit3]}]},
     {running_nodes,[rabbit@rabbit3,rabbit@rabbit2]}]
    ...done.
    
    rabbit3$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit3 ...
    [{nodes,[{disc,[rabbit@rabbit2,rabbit@rabbit1]},{ram,[rabbit@rabbit3]}]},
     {running_nodes,[rabbit@rabbit2,rabbit@rabbit3]}]
    ...done.
    
    rabbit3$ rabbitmqctl stop
    Stopping and halting node rabbit@rabbit3 ...done.
    
    rabbit2$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit2 ...
    [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2]},{ram,[rabbit@rabbit3]}]},
     {running_nodes,[rabbit@rabbit2]}]
    ...done.

    现在我们重新启动 node ,并查看 cluster 的状态:

    rabbit1$ rabbitmq-server -detached
    
    rabbit1$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit1 ...
    [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2]},{ram,[rabbit@rabbit3]}]},
     {running_nodes,[rabbit@rabbit2,rabbit@rabbit1]}]
    ...done.
    
    rabbit2$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit2 ...
    [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2]},{ram,[rabbit@rabbit3]}]},
     {running_nodes,[rabbit@rabbit1,rabbit@rabbit2]}]
    ...done.
    
    rabbit3$ rabbitmq-server -detached
    
    rabbit1$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit1 ...
    [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2]},{ram,[rabbit@rabbit3]}]},
     {running_nodes,[rabbit@rabbit2,rabbit@rabbit1,rabbit@rabbit3]}]
    ...done.
    
    rabbit2$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit2 ...
    [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2]},{ram,[rabbit@rabbit3]}]},
     {running_nodes,[rabbit@rabbit1,rabbit@rabbit2,rabbit@rabbit3]}]
    ...done.
    
    rabbit3$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit3 ...
    [{nodes,[{disc,[rabbit@rabbit2,rabbit@rabbit1]},{ram,[rabbit@rabbit3]}]},
     {running_nodes,[rabbit@rabbit2,rabbit@rabbit1,rabbit@rabbit3]}]
    ...done.
    安装并配置 HAProxy
    在 192.168.1.4 上安装 HAProxy,然后修改 /etc/haproxy/haproxy.cfg:
    listen rabbitmq_cluster 0.0.0.0:5672
     
    mode tcp
    balance roundrobin
     
    server   node1 192.168.1.1:5672 check inter 2000 rise 2 fall 3  
    server   node2 192.168.1.2:5672 check inter 2000 rise 2 fall 3
    server   node2 192.168.1.3:5672 check inter 2000 rise 2 fall 3

    转:http://88250.b3log.org/rabbitmq-clustering-ha(参考)

    http://my.oschina.net/moooofly/blog/93548(翻译)

    http://www.rabbitmq.com/clustering.html(官网)

    http://yupengyan.com/quick-installation-of-haproxy-on-centos6-2.html(Happroxy)

  • 相关阅读:
    使用GUI工具Portainer.io管控Docker容器
    Pycharm-汉化的方法
    Python-Socketserver实现FTP,文件上传、下载
    Pycharm下载安装,本人亲测100% 破解
    Python-反射机制
    Python-操作XML文件
    Python-时间戳、元组时间的格式、自定义时间格式之间的转换
    Python-String字符串操作
    Python-生成器实现简单的"生产者消费者"模型
    Python- 装饰器
  • 原文地址:https://www.cnblogs.com/qiyebao/p/5548924.html
Copyright © 2011-2022 走看看