zoukankan      html  css  js  c++  java
  • Rabbitmq安装过程和踩过的坑( 二 集群搭建 )

    Rabbitmq 集群配置:

    我这用普通用户启动后,在本用户的目录下边有个:.erlang.cookie  文件,我用rabbitmq用户启动就是在/home/rabbitmq目录下边有这个文件,如果rpm包安装的,这个文件目录在:/var/lib/rabbitmq 目录下边。  这点,如果重启使用ROOT启动,这个erlang文件会变化到/root 目录下,有可能导致rabbitmq起不来,可以启动的时候通过设置:-setcookie cookie 这个参数来设置这个文件存放的位置。

    1. 开启话务组件

    ./rabbitmq-plugins enable rabbitmq_stomp

    2. 配置/etc/hosts 保证通信

    也就是上面说的根据hostname配置ip映射.

    3. 保证集群中所有节点erlang的cookie文件一致

    /root/.erlang.cookie

    用该命令将主节点的erlang.cookie复制到各个节点

    scp /root/.erlang.cookie root@172.17.0.1:/root/.erlang.cookie

    172.17.0.1 就是子节点的ip了,@前面的root是linux帐号,总之不管你用什么方式,只要让两个节点的这个文件是一样的就行了.

    4. 重启子节点的rabbitmq

    ./rabbitmqctl stop_app

    ./rabbitmqctl reset

    ./rabbitmqctl join_cluster  rabbit@hostname  #作为disk节点加入主节点 hostname为主节点主机名。

    如果作为ram节点可如下:./rabbitmqctl join_cluster –ram rabbitmq@mqtest

    这里给大家的建议是一般作为disk节点,disk节点就是说会把数据保存到磁盘的意思.

    ./rabbitmqctl start_app

    6. 设置镜像队列

    通过访问web管理控制台添加policies

    这个的作用是使集群中的队列按照一定的规则在集群中进行同步

    pattern就是同步规则,我的正则表达式是 ^.* 表示任意的.

    你也可以设定自己规则.

    Name: cluster_mirrors_policy   #自己取名

    Pattern: ^(?!amq.).*  #正则表达式,

    Priority :1  #优先级,优先级则定义了policy被执行的顺序。

    ha-mode : all #镜像队列模式,ALL表示所有节点镜像镜像

    ha-sync-mode : automatic #设置同步方式为自动同步

    ha-promote-on-shutdown : always  #

    使用:rabbitmqctl cluster_status  查看是否加入集群。

    到这里rabbitmq集群搭建就完成了。

    以下是其他一些文档中看到觉得有用的东西:

    这里有一些重要的警告:

      当整个集群崩溃的时候, 最后一个崩溃的节点必须第一个上线.如果不是这样,节点将会等待最后一个磁盘节点30秒以确认其重新上线,否则就会失败. 如果最后一个下线的节点,不能再重新上线,那么它可能会使用forget_cluster_node命令来从集群中删除

     如果所有集群节点都在同一个时间内停止且不受控制(如断电)。在这种情况下,你可以在某个节点上使用force_boot命令使其再次成为可启动的。

    删除节点:

    先停掉需要删除的rabiitmq:

    rabbitmqctl stop_app

    然后:

    rabbitmqctl forget_cluster_node rabbit@hostname  #解除集群

    rabbitmqctl start_app  #这时候重启可能还是会报错,需要使用下面的命令重置

    rabbitmqctl reset  #重置rabbitmq  ,再进行重启。

    同一个节点起多个rabiitmq做集群,可以用如下命令:

    $ RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit rabbitmq-server -detached

    $ RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=hare rabbitmq-server -detached

    $ rabbitmqctl -n hare stop_app

    $ rabbitmqctl -n hare join_cluster rabbit@`hostname -s`

    $ rabbitmqctl -n hare start_app

    这会设置两个节点的集群,这两个节点都是磁盘节点. 注意,如果你想打开非AMQP的其它端口,你需要通过命令行进行配置:

    $ RABBITMQ_NODE_PORT=5672 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15672}]" RABBITMQ_NODENAME=rabbit rabbitmq-server -detached

    $ RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" RABBITMQ_NODENAME=hare rabbitmq-server -detached

    设置内存节点集群:rabbitmqctl join_cluster --ram rabbit@rabbit1   #加了参数 --ram

    (目前的建议是至少有2个以上的磁盘节点的rabbitmq,再多节点,就可以使用--ram来创建内存节点达到扩容的目的)

    节点类型转换,需要停止rabbitmq后,然后通过:

    rabbitmqctl change_cluster_node_type disc  #转换为磁盘节点

    rabbitmqctl change_cluster_node_type ram  #转换为内存节点

    参考文档:

    http://www.blogjava.net/qbna350816/archive/2016/06/05/430784.html

    https://blog.csdn.net/u013256816/article/details/53524766

    https://www.ibm.com/developerworks/cn/opensource/os-cn-RabbitMQ/index.html

  • 相关阅读:
    crontab 实际的应用
    php 求素数的二种方法
    linux svn配置hooks
    php执行超时(nginx,linux环境)
    php使用strpos,strstr,strchr注意啦,若是数字查找则会当成ASCII码处理
    php 处理大文件方法 SplFileObject
    高德地图定位
    jquery 实现鼠标点击div盒子移动功能
    centos 安装php缓存 apc或zend-opcode
    phpQuery用法总结
  • 原文地址:https://www.cnblogs.com/ExMan/p/14445952.html
Copyright © 2011-2022 走看看