rabbitmq 集群安装
1、安装模式
分为三种:单主机模式、普通集群模式、镜像集群模式。
单主机模式:rabbitmq运行在一台主机上,生产环境不建议使用该模式,性能有限。如果该台主机down机,整个服务将不可用。
普通集群模式:对于queue来说,消息实体只存在于一个节点上,集群中其他节点仅有相同的元数据,即队列结构。经过B发送给consumer。所以consumer尽量连接每一个节点,从中去消息,即对于同一个逻辑队列,要在多个节点建立queue。否则consumer如果只连接一个节点区消息会造成该节点的性能瓶颈。
该模式存在当其中一个节点故障后,其他节点无法获取到故障节点中还未消费的消息,如果做了消息持久化,必须等待A节点恢复,然后才可以被消费。
镜像集群模式:该模式会把队列结构和消息都存在于多个节点,属于rabbitmq的HA方案。缺点:降低系统性能。
RabbitMQ的集群节点包括内存节点、磁盘节点。顾名思义内存节点就是将所有数据放在内存,磁盘节点将数据放在磁盘。如果在投递消息时,打开了消息的持久化,那么即使是内存节点,数据还是会放在磁盘。原则上一个集群至少有一个磁盘节点。在实际使用中会发现所谓的磁盘节点是只用来存储集群的配置信息,也就是说如果集群中没有磁盘节点,当所有节点关机后集群的配置信息就会丢失。在进行性能测试时两个模式的节点订阅发布消息的性能没有太大差距。
2、多节点流量分发
RabbitMQ集群模式是没有中心节点的,并且在连接集群的时候实际上Consumer是连接其中某一台节点,连接方法和单主机模式一致。
通过负载均衡设备来实现流量分发。可以使用F5硬件负载均衡,如果没有F5的硬件负载均衡设备也可以使用LVS、haproxy等服务,当Consumer连接集群时实际是先经过负载均衡。首先将集群中所以节点的IP放在一个数组中,app在连接RabbitMQ的时候会从数组中随机选择一个IP来连接,然后把连接的节点的IP缓存到服务器,如果连接超时则重新随机选择其他节点来连接。通过这种方式来实现app流量的分发。
3、普通集群部署
3.1、部署环境
操作系统:CentOS Linux release 7.5. (Core)
节点1:192.168.40.102
节点2:192.168.40.105
3.2、修改主机名配置
vim /etc/hosts
添加内容如下:
192.168.40.102 node----
192.168.40.105 node----
3.3、同步节点cookie
rabbitmq依赖于erlang集群工作,所以必须先构建erlang的集群环境。cookie的存放目录为:/var/lib/rabbitmq/.erlang.cookie,权限为400.必须保证所有节点一致。
关于cookie同步以及解析,可参考链接:https://www.cnblogs.com/crysmile/p/9471456.html
此处以192.168.40.102作为基准节点,以此节点的cookie为标准进行同步。在192.168.40.102上执行如下命令:
scp /var/lib/rabbitmq/.erlang.cookie root@192.168./:/var/lib/rabbitmq/.erlang.cookie
scp /root/.erlang.cookie root@192.168./:/root/
所有节点修改cookie文件权限,命令如下:
chmod -R /var/lib/rabbitmq/.erlang.cookie
chmod -R /root/.erlang.cookie
3.4、启动服务同时将节点加入集群
首先启动192.168.40.102上rabbitmq服务,然后将192.168.40.105节点加入192.168.40.102作为集群运行。
在192.168.40.102上执行如下命令:
rabbitmq-server -detached
在192.168.40.105上执行如下命令:
rabbitmq-server -detached #以后台模式运行
rabbitmqctl stop_app #仅停止rabbitmq应用
rabbitmqctl join_cluster --ram rabbit@node---- #此处192.168.40.105以ram(内存)运行模式加入集群
rabbitmqctl start_app #启动rabbitmq应用
在任意一台上查看集群状态:
rabbitmqctl cluster_status
磁盘节点,join_cluster 命令去掉--ram参数即可。 在RabbitMQ集群里,必须至少有一个磁盘节点存在(磁盘节点用来存储集群状态)。
4、镜像集群
4.1. 镜像复制模式解析,如下表所示:
ha-mode | ha-params | result |
all | (absent)不需要参数 | 信息映射到所有节点,新节点加入集群也会被映射 |
exactly | count,需要给出节点个数 | 集群中节点个数.如果配置参数超过了集群总节点数 默认是all(集群中所有节点). |
nodes | node names,需要给出节点名称 | 指定信息映射到哪些节点 |
4.2. 镜像模式命令配置
语法:set_policy 策略名称 匹配队列名的正则表达式 被复制的方式(上面的ha-mode和参数)
4.3. 镜像模式命令配置示例
ha-mode=all:
所有名字ha开头的队列都复制到所有的集群主机,策略名称为:ha-all.:
rabbitmqctl set_policy ha-all "^ha\." '{"ha-mode":"all","ha-sync-mode":"automatic"}'
ha-mode=exactly:
所有名字 two.开头的队列随机复制到任意一台集群主机,数量为2,策略名称为ha-two.:
rabbitmqctl set_policy ha-two "^two\." '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
ha-mode=nodes:
所有nodes开头的队列都复制到node2和node3.策略名称:ha-nodes.
rabbitmqctl set_policy ha-nodes "^nodes\." '{"ha-mode":"nodes","ha-params":["rabbit@node2", "rabbit@node3"]}'
4.4. 通过rabbitmq后台配置镜像模式
5、集群移除节点
5.1. 在要脱离集群节点上执行
假设此处要脱离集群的节点名称为node1.需要在node1上执行。
rabbitmqctl stop_app
rabbitmqctl reset
#reset执行完成,该节点已经从集群中移除。
rabbitmqctl start_app
5.2. 在集群中其他节点上执行
假设此处要脱离集群的节点名称为node1.需要在非node1的其他节点上执行。
rabbitmqctl forget_cluster_node rabbit@node1
6、使用haproxy作为四层代理rabbitmq
haproxy反向代理rabbitmq并开启监控配置如下: listen stats
mode http
bind *:
stats enable
stats hide-version
stats uri /hadmin
stats auth admin:admin
stats admin if TRUE listen test_rabbitmq_cluster 0.0.0.0:
mode tcp
balance roundrobin
option tcpka
timeout client 99999m
timeout server 99999m
server kvm-dev-mq-redis---- 192.168.40.102: check maxconn inter rise fall
server kvm-dev-mq-redis---- 192.168.40.105: check maxconn inter rise fall
rabbitmq 集群安装的更多相关文章
- Rabbitmq集群安装配置
Rabbitmq集群安装与配置 一.rabbitmq安装环境准备 1.安装环境准备 这里,我们以两个节点为例进行安装,一个节点为内存节点,另一个节点为硬盘节点,具体可根据自己需要分配节点. 安装系统 ...
- RabbitMQ集群安装配置+HAproxy+Keepalived高可用
RabbitMQ集群安装配置+HAproxy+Keepalived高可用 转自:https://www.linuxidc.com/Linux/2016-10/136492.htm rabbitmq 集 ...
- 1.rabbitmq 集群安装及负载均衡设置
标题 : 1.rabbitmq 集群安装及负载均衡设置 目录 : RabbitMQ 序号 : 1 vim /etc/pam.d/login #对于64位系统,在文件中添加如下行 session req ...
- Springboot 1.5.x 集成基于Centos7的RabbitMQ集群安装及配置
RabbitMQ简介 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件). RabbitMQ是一套开源(MPL)的消息队列服务软件,是由LShift提供的一 ...
- rabbitmq集群安装与配置(故障恢复)
0.首先按照http://www.cnblogs.com/zhjh256/p/5922562.html在至少两个节点安装好(不建议单机,没什么意义) 1.先了解rabbitmq集群架构,http:// ...
- rabbitmq集群安装
在配置文件中配置集群没有成功,但是使用命令行成功了,以下是过程请参考. 场景:两台机器,一台是10.1.3.95 hostname为mq1,一台是10.1.3.96 hostname为 ...
- RabbitMQ 集群安装过程详解
一.安装Erlang 1.rabbitMQ是基于erlang的,所以首先必须配置erlang环境. 从erlang官网下载 otp 18.3.下载链接:http://erlang.org/downlo ...
- kubernetes rabbitmq 集群安装配置
生成secret来保存relang-cookie: secret.yml文件: apiVersion: v1kind: Secretmetadata: name: rabbit-cookietype: ...
- k8s中安装rabbitmq集群
官方文档地址:https://www.rabbitmq.com/kubernetes/operator/quickstart-operator.html 要求 1.k8s版本要1.18及其以上 2.能 ...
随机推荐
- 六种流行的语言大餐---C、C++、python、Java、php、C#你更喜欢哪一个呢?
引言 鉴于五一期间超大的人流量,LZ思来想去,最终还是选择蜗居在自己的出租屋.无聊之际,当然不能忘了做点什么事情,于是LZ就研究了一下几种语言的皮毛,在这里献丑一翻,希望各位猿友莫要见笑. 不过说来也 ...
- Android Service(上)
一 Service简介 Service是Context的子类 Service是四大组件之一 用来在后台处理一些比较耗时的操作或者去执行某些需要长期运行的任务 二 注意 Service里面不能直接执行耗 ...
- [Processing]点到线段的最小距离
PVector p1,p2,n; float d = 0; void setup() { size(600,600); p1 = new PVector(150,30);//线段第一个端点 p2 = ...
- RobotFramework测试环境搭建记录
Robotframwork测试环境搭建记录 1.安装Python2.7(https://www.python.org/) 在环境变量path中加入“C:\Python27” 安装后的验证方法为在命令行 ...
- Linux加密到K8S中
文件名字 test.conf 加密: base64 --wrap=0 aaa.conf 把得到的密钥填入配置文件当中即可
- 入门向:南邮CTF_ReadAsm2_WP
题目链接:http://ctf.nuptzj.cn/challenges#ReadAsm2 我比较菜,所以把思路全部敲上来了. 题目很明确告诉我们,这道题考察阅读汇编代码的能力. 在对编译环境和调用约 ...
- PHP正则表达式匹配俄文字符
之前弄过匹配中文的 见 http://www.cnblogs.com/toumingbai/p/4688433.html preg_match_all("/([\x{0400}-\x{04F ...
- The Art of Multiprocessor Programming读书笔记 (更新至第3章)
这份笔记是我2013年下半年以来读“The Art of Multiprocessor Programming”这本书的读书笔记.目前有关共享内存并发同步相关的书籍并不多,但是学术文献却不少,跨越的时 ...
- Tomcat部署与使用
Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun和其他一些公司及个人共同开发 ...
- more和less命令详解
基础命令学习目录首页 原文链接:https://www.cnblogs.com/aijianshi/p/5750911.html 一.more命令 more功能类似 cat ,cat命令是整个文件的内 ...