查看“Rabbitmq cluster on centos7”的源代码
←
Rabbitmq cluster on centos7
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
=Note= Note: 另外一个docker [[Rabbitmq cluster on docker-compose]] =前提是rabbitmq安装= [[Centos7安装Rabbitmq]] =介绍= 运行模式大概有3种: 单一模式:非集群模式,单台。 普通模式:RabbitMQ默认的集群模式。 对于Queue来说,消息实体只存在于其中一个节点,A、B两个节点仅有相同的元数据,即队列结构。当消息进入A节点的Queue中后,consumer从B节点拉取时,RabbitMQ会临时在A、B间进行消息传输,把A中的消息实体取出并经过B发送给consumer。 所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连A或B,出口总在A,会产生瓶颈。 该模式存在一个问题就是当A节点故障后,B节点无法取到A节点中还未消费的消息实体。 如果做了消息持久化,那么得等A节点恢复,然后才可被消费;如果没有持久化会丢失消息。 镜像模式:Queue同时存在多个节点,可通过改模式实现HA高可用 该模式解决了上述问题,其实质和普通模式不同之处在于,消息实体会主动在镜像节点间同步,而不是在consumer取数据时临时拉取。 该模式带来的副作用也很明显,除了降低系统性能外,如果镜像队列数量过多,加之大量的消息进入,集群内部的网络带宽将会被这种同步通讯大大消耗掉。 rabbitmq-server-3.7.7-1.el7 =配置hosts文件= <pre> echo '192.168.0.202 mq01 192.168.0.202 mq02' >>/etc/hosts hostnamectl --static set-hostname mq01 hostnamectl --static set-hostname mq02 #注意 这个格式是不对的 不能并列 只能有一个 #192.168.0.201 master zoo1 192.168.0.202 mq01 192.168.0.203 mq02 </pre> 三台主机上安装的 RabbitMQ 都保证都可以正常启动,才可以进行以下操作 停止RabbitMQ 服务 systemctl stop rabbitmq-server =拷贝erlang.cookie = <pre> #要先启动 不然没有cookie 文件 systemctl start rabbitmq-server [root@node1 ~]cat /var/lib/rabbitmq/.erlang.cookie RDZZRBEWSOOIYHOABHTI 将cookie中的内容复制到mq02的cookie文件中。 这里将 node1 的该文件复制到 node2、node3,由于这个文件权限是 400为方便传输,先修改权限,非必须操作,所以需要先修改 node2、node3 中的该文件权限为 777 #这操作太low scp /var/lib/rabbitmq/.erlang.cookie node2:/var/lib/rabbitmq/ chmod 400 /var/lib/rabbitmq/.erlang.cookie chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie 注意事项 cookie在所有节点上必须完全一样,同步时一定要注意。 erlang是通过主机名来连接服务,必须保证各个主机名之间可以ping通。可以通过编辑/etc/hosts来手工添加主机名和IP对应关系。如果主机名ping不通,rabbitmq服务启动会失败 </pre> ==启动rabbitmq服务== systemctl restart rabbitmq-server # on all node 在node2 mq02上停止rabbitmq应用程序,并重置(重置只是清除节点的配置,如果没有配置过,则可以省略),然后加入node1集群 [root@mq02 rabbitmq]# rabbitmqctl stop_app Stopping node rabbit@mq02 ... reset节点 [root@mq02 rabbitmq]# rabbitmqctl reset Resetting node rabbit@mq02 ... ==加入集群 == <pre> [root@mq02 ~]# rabbitmqctl join_cluster rabbit@mq01 Clustering node rabbit@mq02 with rabbit@mq01 ... 启动rabbitmq应用 [root@mq02 ~]# rabbitmqctl start_app Starting node rabbit@mq02 ...</pre> ==查看集群状态== <pre> node2上查看集群状态 rabbitmqctl cluster_status [root@mq02 ~]# rabbitmqctl cluster_status Cluster status of node rabbit@mq02 ... [{nodes,[{disc,[rabbit@mq01,rabbit@mq02]}]}, {running_nodes,[rabbit@mq01,rabbit@mq02]}, {cluster_name,<<"rabbit@mq01">>}, {partitions,[]}, {alarms,[{rabbit@mq01,[]},{rabbit@mq02,[]}]}] node1上查看集群状态 [root@mq01 ~]# rabbitmqctl cluster_status Cluster status of node rabbit@mq01 ... [{nodes,[{disc,[rabbit@mq01,rabbit@mq02]}]}, {running_nodes,[rabbit@mq02,rabbit@mq01]}, {cluster_name,<<"rabbit@mq01">>}, {partitions,[]}, {alarms,[{rabbit@mq02,[]},{rabbit@mq01,[]}]}]</pre> ==更改节点类型== 节点有两种类型:磁盘节点和内存节点,集群中必须至少有一个磁盘节点,否则队列元数据无法写入到集群中,当磁盘节点宕掉时,集群将无法写入新的队列元数据信息。 从上面集群状态可以看出,mq01和mq02 均为磁盘节点,可以通过命令 还有很多好的 如下 URL http://blog.51cto.com/zengestudy/1885054 运行各节点 rabbitmqctl stop rabbitmq-server -detached =other= <pre> 组成集群 [root@mq01 ~] rabbitmqctl stop_app [root@mq02 ~]# rabbitmqctl stop_app # 停止rabbitmq服务 n[root@mq02 ~]# rabbitmqctl join_cluster rabbit@mq01 # node2和node1构成集群, node2必须能通过node1的主机名ping通 [root@mq02 ~]# rabbitmqctl start_app # 开启rabbitmq服务 查看日志 less /var/log/rabbitmq/rabbit@localhost.log 在node2 mq02上停止rabbitmq应用程序,并重置(重置只是清除节点的配置,如果没有配置过,则可以省略),然后加入node1集群 [root@mq02 rabbitmq]# rabbitmqctl stop_app # Stopping node rabbit@mq02 ... reset节点 [root@mq02 rabbitmq]# rabbitmqctl reset Resetting node rabbit@mq02 ... </pre> =trouble shooting= rabbitmqctl reset 23:49:15.657 [error] Error when reading /var/lib/rabbitmq/.erlang.cookie: eacces =see also= [http://blog.51cto.com/zengestudy/1885054 good-RabbitMQ集群创建] [https://segmentfault.com/a/1190000010702020 CentOs7.3 搭建 RabbitMQ 3.6 Cluster 集群服务与使用] [http://blog.51cto.com/wangwq/1951185 RabbitMQ集群搭建] [https://segmentfault.com/a/1190000010300803 RabbitMQ 源码 集群安装] [https://blog.linuxeye.cn/451.html RabbitMQ集群和高可用配置] [https://blog.linuxeye.cn/436.html RabbitMQ启动脚本] [https://www.jianshu.com/p/79ca08116d57 消息队列之 RabbitMQ] [https://www.cnblogs.com/knowledgesea/p/6535766.html Rabbitmq集群高可用部署详细good] [https://www.jianshu.com/p/db0f5496f0d2 RabbitMQ HA集群搭建] [https://www.ibm.com/developerworks/cn/opensource/os-cn-RabbitMQ/index.html 高可用 RabbitMQ 集群自动化部署解决方案] [http://www.ywnds.com/?p=4741 RabbitMQ两种集群模式配置管理(五)] [https://my.oschina.net/louxin/blog/483402 Rabbitmq集群搭建笔记] [https://blog.csdn.net/qq_34021712/article/details/72633520 rabbitmq集群搭建(多机)] ==docker == [https://www.cnblogs.com/xmai/p/7493062.html RabbitMQ:Docker环境下搭建rabbitmq集群] [https://segmentfault.com/a/1190000004394741 docker搭建rabbitmq集群 has elk reis zk elk etc] [http://www.ywnds.com/?p=7674 Docker:搭建RabbitMQ集群] [[category:ops]]
返回至
Rabbitmq cluster on centos7
。
导航菜单
个人工具
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
我的导航
关于我
shell
python
ops
linuxchina.net
blog.linuxchina
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息