RabbitMQ集群搭建
2018-01-09 21:01
239 查看
前言
我们希望建立高可用的队列,以及高性能的队列,但是,我们这次的重点是高可用。RabbitMQ集群可以通过增加节点来增加性能,但是,默认是不会将队列的内容复制到整个集群的。磁盘节点会保存集群中所有的队列、交换器、绑定、用户、权限和vhost的元数据,但是队列的内容仅在对应的节点中,如果该节点崩溃则队列不可用(持久化队列,内存队列可以重建,但消息会丢失)。如果集群中只有一个磁盘节点,并且该磁盘节点崩溃,则集群可以正常收发消息,但是不可以变更元数据。复制队列中的数据,需要使用镜像队列。
一个集群中如果仅有一个磁盘节点,则磁盘节点崩溃会导致集群无法变更。如果队列没有镜像队列,则节点崩溃后其承载的队列无法访问(持久化队列,考虑到可靠性,我们会全部使用持久化队列)。所以,我们这次的集群配置是,两个磁盘节点,所有队列均为镜像队列。
集群搭建
两个服务器分别安装RabbitMQ,安装过程见:http://blog.csdn.net/linghuanxu/article/details/78608369 本地搭建版本rabbitmq-server-3.6.14-1.el7.noarch.rpm 操作系统,centos7-1708我们这里是每台虚拟机建立一个rabbitmq集群,就不介绍单台虚拟机启动三个进程的方式了
1、 统一erlang cookie 我们将1节点的erlang cookie复制到二节点中。Erlang cookie就是/var/lib/rabbitmq/.erlang.cookie这个文件中的内容。要注意的是,这是一个只读文件,要先修改权限,改完了之后记得把权限改回来(chmod 400 文件名)
2、 修改机器名,以及对应的hosts指向,因为rabbitmq节点的名称是rabbit@机器名的,而它会根据机器名去寻找对应的节点,所以,我们这里需要让它在找机器名的时候可以找到。修改/etc/hostname,在/etc/hosts中的127.0.0.1 中添加自己机器名,并对每个需要的机器名配置局域网IP的hosts指向,我的是
192.168.137.98 nature_rabbitmq1 192.168.137.97 nature_rabbitmq2
然后重启虚拟机,这个操作重启mq貌似是无效的,原因现在暂未探查,但是,重启虚拟机后就一切正常了
3、配置节点。先启动每个节点
rabbitmqctl stop rabbitmq-server -detached
然后可以用rabbitmqctl cluster_status查看集群状态。然后我们把nature_rabbitmq2加入到nature_rabbitmq1中。在nature_rabbitmq2的机器上执行:
rabbitmqctl stop_app rabbitmqctl join_cluster rabbit@ nature_rabbitmq1 //这个名称在nature_rabbitmq1这该机器上查询状态能看到,也可以在后面加如—disk参数,就不用进行第四步了 rabbitmqctl start_app
然后再查看集群状态就可以看到两边都有对方节点了,但是nature_rabbitmq2似乎和nature_rabbitmq1不一样,因为这个时候nature_rabbitmq2是内存节点
4、 修改队列类型。默认加入集群的是内存节点,我们需要的是双磁盘节点
rabbitmqctl stop_app rabbitmqctl change_cluster_node_type disc rabbitmqctl start_app
再查看集群状态,就可以看到两边一模一样了
rabbitmq-server -detached //集群启动命令
两个mq之间队列、交换器以及消息是否同步
消息记录表rabbitmq_record
该表是为了记录消息及接收消息状态而设计的表,发送消息前在数据库中进行记录。接收数据后增加一次接收次数id:唯一记录ID receive_time: 接收的次数 createtime:创建时间 updatetime:更新时间 recore_type:测试类型 remark:记录备注,可以详细解释说明测试类型
测试1
向nature_rabbitmq1中发送消息,从nature_rabbitmq2中订阅消息,如果可以订阅到,则说明镜像队列之间消息是同步的,队列也在两个节点质检同步创建了。测试2
向nature_rabbitmq1发送事件,从nature_rabbitmq2中消息,两个订阅者,两个订阅者应该均收到消息。如果可以订阅到,则说明镜像队列之间消息是同步的,交换器也在两个节点质检同步创建了。搭建Nginx负载均衡
Nginx 1.9之后提供了和http模块平级的stream模块,可以做tcp的负载均衡,默认是不会安装的,需要重新编译nginx./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --with-stream make make install nginx –t
配置如下:
stream { upstream rabbitmq { server 192.168.137.98:5672; server 192.168.137.97:5672; } server { listen 5673; proxy_pass rabbitmq; } } http {…}
相关文章推荐
- RabbitMQ集群环境搭建-4
- RabbitMQ集群的搭建
- rabbitmq 集群搭建
- RabbitMQ集群搭建
- rabbitmq集群搭建
- rabbitmq集群搭建(多机)
- RabbitMQ 高可用:在 Windows 搭建镜像集群
- RabbitMQ的安装及集群搭建方法
- RabbitMQ集群搭建
- RabbitMQ集群搭建
- windows单机搭建RabbitMQ集群
- centos7 rabbitmq集群搭建+高可用
- centos搭建rabbitmq集群
- (转)CentOs7.3 搭建 RabbitMQ 3.6 Cluster 集群服务与使用
- CentOS7搭建rabbitmq集群
- 搭建rabbitmq的docker集群
- centos7 搭建docker内运行rabbitmq,然后再镜像ha方案的完全教程,暂时一个宿主机只能运行一个docker的rabbitmq,但是集群 ha都正常
- RabbitMQ的安装及集群搭建方法
- 【rabbitmq】rabbitmq集群环境搭建
- Rabbitmq集群环境搭建