搭建rabbitmq集群
由于业务对mq的依赖越加眼中,准备研究下搭建mq集群,使用的是rabbitmq
可以参考下这篇文章:我就是在这篇文章的参考下搭建成功的:
下面附上踩坑记录
1.修改 .erlang.cookie文件,由于用的mq是在解压的安装包上直接运行 /rabbitmq-server -detached 命令启动的 所以相关操作必须在程序目录下去操作
需要修改root目录和mq程序包目录下(/home/zmoon/rabbitmq_server-3.8.1),集群节点的都统一成一个乱码
2.在安装包目录 sbin下执行.rabbitmqctl stop_app、./rabbitmqctl cluster_status 等命令报错 unable to perform an operation on node 'rabbit@linux-8e8f'. Please see diagn 这里运行/rabbitmq-server 这个文件重启就可以了 可能是 -detached参数的原因
3.设置cluster名称,如果不设置名称 将会使用默认名称:/etc/rabbitmq/rabbitmq-env.conf 创建这个文件 启动mq就会生效了 (正常安装应该是根目录下的etc 我用的安装包 所以在包下面的etc)
4.探究了下rabbitmq-server 和 rabbitmqctl 命令的区别 参考 https://blog.csdn.net/joeyon1985/article/details/39479809
5.注意配置hosts文件 在根目录 /etc/hosts 可加一行配置 如下 配置好节点名称和ip的映射
6.对了,关掉mq用的是kill命令关掉的 然后启动用的是 ./rabbitmq-server
7..所有.erlang.cookie文件 hosts文件 以及 rabbitmq-env.conf 文件都修改好了 就可以启动两个节点的mq
8.子节点关掉应用 ./rabbitmqctl stop_app 然后加入到主节点集群中 rabbitmqctl join_cluster rabbit@名称1 rabbitmqctl start_app
9.踩坑完毕,界面上可以看到了
#rabbitmq常用命令 # 启动rabbitmq节点 ./rabbitmq-server # 停止rabbitmq 应用 ./rabbitmqctl stop_app # 启动rabbitmq 应用 ./rabbitmqctl start_app # 查看节点信息 ./rabbitmqctl cluster_status # 查看rabbitma服务 ps -aux | grep rabbitmq # 强制结束id为1930进程 kill 1930 # 编辑/添加rabbitmq配置文件 可以设置节点名称 NODENAME=rabbit@node115 vim etc/rabbitmq/rabbitmq-env.conf # 重置节点 ./rabbitmqctl rest # 集群删除某个节点 ./rabbitmqctl forget_cluster_node rabbit@node115 # 集群添加某个节点 以ram(内存)方式 不添加改参数默认硬盘方式 ./rabbitmqctl join_cluster --ram rabbit@node116 # 设置集群 镜像复制策略 vhost名称为'/' 策略为 '^'(全部队列) ./rabbitmqctl set_policy -p / ha-allqueue "^" '{"ha-mode":"all"}'
# 更改节点储存类型
./rabbitmqctl change_cluster_node_type {ram|disk}
踩坑2
当集群中节点使用kill命令强制结束后启动失败问题 查看日志 出现Error while waiting for Mnesia tables 错误
解决方法:
Are you running in a clustered configuration? If so, rabbit might be waiting for the other nodes to come up.
当整个集群重启的时候,如果关掉了整个集群所有的节点,再启动服务。若先启动主节点,而备节点全部没有启动,就会出现上述的启动不了的问题。
如果先将从节点全部起起来,再启动主节点,就一切顺利,数据也不会丢失,这个应该是比上面更简便的方法。
从节点执行启动命令 rabbitmq-server (启动中),主节点也启动 便可以启动成功。
踩坑3
a和b服务器集群
当集群镜像模式都为disc时 宕机重启可以自动加入集群
当b服务器宕机 并且a服务器发生更改(比如新增队列) ,则不能自动重新加入集群 需要重启a
当b服务宕机,并且a服务器剔除节点b,b服务器mq将不能启动,需要清除所有缓存 文件在 /var/lib/rabbitmq/mnesia/rabbit/ 目录下(安装目录或者根目录),然后重新启动。
启动rabbitmq集群时,需要将有数据的节点作为主节点,否则数据会丢失