RabbitMQ集群类型一:在单节点上构建built-in内置集群

在本章中我们来学习配置rabbitmq集群类型之一的built-in内置集群。

[b][color=blue]metadata元数据[/color][/b]
在一个单节点的rabbitmq server中,queue metadata队列元数据、exchange metadata交换机元数据、binding metadata绑定元数据和vhost metadata虚拟主机元数据都全部保存在服务器的内存当中;在built-in内置rabbitmq server集群中,这四种元数据会被保存在每一个节点服务器内存中。

[b][color=blue]rabbitmq节点类型:RAM内存节点和Disk磁盘节点[/color][/b]
单节点的rabbitmq只能是Disk磁盘类型的服务器节点。
在内置的rabbitmq服务器集群中,服务器节点分为RAM内存节点和Disk磁盘节点。RAM内存节点的rabbitmq server会将元数据信息保存在服务器内存中,而Disk磁盘节点的rabbitmq server会会将元数据信息刷新到磁盘上,RAM节点的性能好高于Disk节点的rabbitmq server的性能。

[b][color=blue]队列中的数据[/color][/b]
在内置的rabbitmq服务器集群的队列中的消息并不会被“广播”到每个服务器节点的队列中,这也就是说如果用户将消息发布到了rabbitmq server1节点的Q1队列中,后来又向集群中添加了一个节点rabbitmq server3,rabbitmq server3会copy四种类型的metadata元数据,但是却不会copy已有队列中的消息,如果rabbitmq server1重启,那么rabbitmq server1中所有队列中的消息在再次其中之前——如果其中的所有的exchange、queue和消息都是持久化的——都会“丢失”,但是这个时候可以向其他节点发布消息。

在实际的生产环境中,对于内置rabbitmq集权来所,通常会在集群中配置一到2个Disk磁盘类型的rabbitmq节点。在这样的集群中,元数据信息的每一次变化,RAM节点的rabbitmq都会将修改保存到内存,而Disk磁盘类型的rabbitmq节点都会将修改保存到磁盘。如果集群中的Disk磁盘服务器节点宕机——整个集群中只有一个Disk磁盘服务节点的话,那整个集群都不能做以下操作:
1、创建queue队列;
2、创建exchange交换机;
3、创建binding;
4、添加用户;
5、修改用户权限;
6、添加或删除节点。
有了以上缺点,那为什么还要在集群中特别设置一些Disk磁盘服务器节点呢?这是因为,要想集群重启后元数据可以恢复,就需要把集群元数据持久化到磁盘,这也是为什么建议在rabbitmq的内置集群中为什么要设置1 ~2个Disk磁盘服务器节点的原因。RAM节点重启后只有链接到Disk节点获取元数据信息才能重新配置自己的节点。

首先我们先按照[url=http://flyingdutchman.iteye.com/admin/blogs/1887283]在CentOS上安装rabbitmq-server[/url]来重新安装2个rabbitmq server服务器:[quote]
[color=blue]# cd rabbitmq-server-3.1.1
# make
# make install TARGET_DIR=/opt/mq/rabbitmq2 SBIN_DIR=/opt/mq/rabbitmq2/sbin MAN_DIR=/opt/mq/rabbitmq2/man //将rabbitmq编译到/opt/mq/rabbitmq2目录

# make install TARGET_DIR=/opt/mq/rabbitmq3 SBIN_DIR=/opt/mq/rabbitmq3/sbin MAN_DIR=/opt/mq/rabbitmq3/man //将rabbitmq编译到/opt/mq/rabbitmq3目录[/color]
[/quote]

下面我们来开始在一台CentOS上配置rabbitmq内置集群的过程:[quote]
//节点1 rabbit@JackyChen
# cd /opt/mq/rabbitmq/sbin
# RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit ./rabbitmq-server --detached

//节点2 rabbit2@JackyChen
# cd /opt/mq/rabbitmq2/sbin
# RABBITMQ_NODENAME=rabbit2 RABBITMQ_NODE_PORT=5674 RABBITMQ_MNESIA_DIR=/opt/mq/rabbitmq2/rabbit2-mnesia RABBITMQ_PLUGINS_EXPAND_DIR=/opt/mq/rabbitmq2/rabbit2-plugins-scratch RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" RABBITMQ_LOG_BASE=/opt/mq/rabbitmq2/logs /opt/mq/rabbitmq2/sbin/rabbitmq-server --detached

//节点3 rabbit3@JackyChen
# cd /opt/mq/rabbitmq3/sbin
# RABBITMQ_NODENAME=rabbit3 RABBITMQ_NODE_PORT=5676 RABBITMQ_MNESIA_DIR=/opt/mq/rabbitmq3/rabbit3-mnesia RABBITMQ_PLUGINS_EXPAND_DIR=/opt/mq/rabbitmq3/rabbit3-plugins-scratch RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]" RABBITMQ_LOG_BASE=/opt/mq/rabbitmq3/logs /opt/mq/rabbitmq3/sbin/rabbitmq-server --detached

//创建集群节点rabbit2@JackyChen
# RABBITMQ_NODENAME=rabbit2 RABBITMQ_NODE_PORT=5674 ./rabbitmqctl stop_app
# RABBITMQ_NODENAME=rabbit2 RABBITMQ_NODE_PORT=5674 ./rabbitmqctl reset
# RABBITMQ_NODENAME=rabbit2 RABBITMQ_NODE_PORT=5674 ./rabbitmqctl join_cluster rabbit@JackyChen //将rabbit@JackyChen和rabbit2@JackyChen设置为Disk节点
# RABBITMQ_NODENAME=rabbit2 RABBITMQ_NODE_PORT=5674 ./rabbitmqctl start_app
# RABBITMQ_NODENAME=rabbit2 RABBITMQ_NODE_PORT=5674 ./rabbitmqctl cluster_status

//创建集群节点rabbit3@JackyChen
# RABBITMQ_NODENAME=rabbit3 RABBITMQ_NODE_PORT=5676 ./rabbitmqctl stop_app
# RABBITMQ_NODENAME=rabbit3 RABBITMQ_NODE_PORT=5676 ./rabbitmqctl reset
//将rabbit@JackyChen和rabbit3@JackyChen设置为Disk节点
# RABBITMQ_NODENAME=rabbit3 RABBITMQ_NODE_PORT=5676 ./rabbitmqctl join_cluster rabbit@JackyChen
//rabbit3@JackyChen设置为RAM节点
# RABBITMQ_NODENAME=rabbit3 RABBITMQ_NODE_PORT=5676 ./rabbitmqctl change_cluster_node_type ram
# RABBITMQ_NODENAME=rabbit3 RABBITMQ_NODE_PORT=5676 ./rabbitmqctl start_app
# RABBITMQ_NODENAME=rabbit3 RABBITMQ_NODE_PORT=5676 ./rabbitmqctl cluster_status

# ./rabbitmqctl cluster_status
[/quote]
节点信息显示如下:
[img]http://dl2.iteye.com/upload/attachment/0087/3201/8b9f1435-886d-309a-aefa-fab517ef9556.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0087/3234/478598f7-603f-38fe-9b87-4cacdfd7e4a6.png[/img]

[color=red][b]注意:[/b][/color]如果实在不同的服务器上配置rabbitmq节点,那么就需要在rabbitmq服务器共享一个.erlang.cookie,文件在/var/lib/rabbitmq目录下。


在物理服务器重启后,只要重新启动这几个rabbitmq后,集群就又自动建立起来了,很方便吧?!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值