全网最简单的安装手册

// 安装erlang
wget https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh
bash script.rpm.shsudo yum install erlang
// 安装rabbitmq 3.7 版本
wget https://antsentry-cloud-firmware.s3.cn-northwest-1.amazonaws.com.cn/raspberrypy/rabbitmq-server-3.7.26-1.el7.noarch.rpm
sudo yum install rabbitmq-server-3.7.26-1.el7.noarch.rpm
sudo service rabbitmq-server start

配置用户

rabbitmqctl  add_user username passwd  // 添加用户
rabbitmqctl  set_user_tags username administrator  // 给用户分配权限
rabbitmqctl  list_users  // 查看系统中有哪些用户

启用web控制台

sudo rabbitmq-plugins list // 查看启用了哪些插件
sudo rabbitmq-plugins enable rabbitmq_management  // 启用Web管理界面,默认端口是15672

经过上述几个步骤,打开浏览器,输入服务器的ip和端口,就能看到久违的登录界面了。

配置集群

至少需要两个节点才能组成集群,简单起见,就选两台啦。在另一台服务上,重复上面的安装过程,配置用户和管理界面步骤可以略过。

复制前一台服务器上的cookie到新安装的这台服务器,cookie所在目录为:/var/lib/rabbitmq/.erlang.cookie。

Tips:如果copy,需要注意.erlang.cookie文件的权限必须是400。同时,不要用vim编辑器编辑,会留下换行符导致cookie不一致。cookie文件的大小为20字节。上述两个小问题,确实困扰了笔者挺长时间,导致安装不成功。

sudo rabbitmqctl cluster_status  // 查看集群状态
sudo rabbitmqctl stop_app  // 停止app
sudo rabbitmqctl join_cluster rabbit@ip-10-0-5-62  // 把当前节点添加到集群中
sudo rabbitmqctl start_app  // 启动app

通过简单的几步,这两台服务器已经组成集群了。登录web控制台,效果如下:

节点之间同步配置信息,关于集群的特点,这是最正确的描述。其他的一些特性,都是可配置的,例如内存节点、磁盘节点;镜像模式等;持久化等等。在可用性和性能之间,用不同的配置,做相应的取舍。这方面的话题,后续展开介绍,敬请关注。

代理中间件

在上一章节中介绍了集群的安装,纵观网上绝大多数的教程,到这里并没有结束,还有很重要的一步,那就是HAProxy+KeepAlived。笔者并没有研究过HAProxy,更别提KeepAlive了,看到这样的东东一脸懵逼。好在业务运行在云上,云服务上有TCP层的负载均衡(LB)组件,用LB代替HAProxy+KeepAlive是一样的。结构如下:

从体系结构的角度考虑,集群中的节点是对等的,即客户端连接任意一个节点都能正常工作,因为只有这样,我们才能用粗暴的负载均衡器做代理。

从实现的细节看,也却是如此。对生产者来说,发送给那个节点并不重要,路由到相应的queue master节点存储即可。消费者若是连接到了master节点,直接取数据即可;如果连接到非master节点,创建一个master节点到目标节点的通道传输数据。

在软件架构实践中,这是非常普遍的一种模式,例如调用微服务的多个实例、例如访问某个域名对应的多个IP地址,例如eureka注册中心等,有些用了中心化的代理中间件,有些则是在客户端实现的。同样的道理,访问rabbitmq集群,除了常见的代理中间件,也可采用客户端代理实现。

客户端代理

支持多个地址

通常,初始化ConnectionFactory只能接受一个地址。这么看来,用官方SDK完成客户端代理,要重写基础的访问组件了,这条路肯定是没有错的,就像sharding-jdbc。仔细研究官方提供的API文档,ConnnectionFactory有个newConnection函数,是可以传入一个地址列表的,实现逻辑如下

factory.newConnection(addresses);

根据地址列表依次创建连接,直到创建成功为止。Tips:这段代码并不优雅,如果直接用到这段代码,会客户端都连接到第一个正常的节点。

恢复连接

ConnectFactory个重要的功能,那就是自动恢复连接,代码很简单,在4.0版本以后是默认开启的。按照官方的解释,在连接失败后,可以做到打开连接、恢复连接上的listeners、重新创建channel、恢复channel上的listeners以及配置信息。

factory.setAutomaticRecoveryEnabled(true);

结合这两个特性,经测试,集群中的节点宕机后,确实可以重新连接到另一个节点。但是,中间有一段时间连接是中断的,生产者发送消息,会连续失败!

补丁

为了解决这个问题,在生产者增加重试机制,问题得到解决。发送消息失败后,要等待创建连接和channel,重新发送消息。

public void send(String exchange, MQMessage message) {try {sentMsg(exchange, message);    } catch (Exception ex) {connnect();        sentMsg(exchange, message);    }}

到此为止,验证了通过客户端代理模式访问rabbitmq集群。但是,笔者在生产中真不敢这么用。你知道有哪些好用的客户端中间件吗?

https://www.toutiao.com/i6825997123515843079/

hbase1.1.1 连接集群_除了HAProxy,RabbitMQ集群还可以这样用相关推荐

  1. innodb 集群_部署MySQL InnoDB集群以实现高可用性

    innodb 集群 In this article, I am going to explain how we can deploy the MySQL InnoDB cluster. InnoDB ...

  2. go连接mysql集群_什么是MySQL集群-Go语言中文社区

    一.什么是MySQL集群 MySQL集群是一个无共享的(shared-nothing).分布式节点架构的存储方案,其目的是提供容错性和高性能. 数据更新使用读已提交隔离级别(read-committe ...

  3. 多台电脑集群运算_一个分布式服务器集群架构方案

    深圳市添越智创科技有限公司 店铺链接:shop114963t53p883.1688.com 移动互联应用的快速发展和云计算.大数据应用的拓展和深化,数据中心已由传统的大型机.小型机逐步转移到x86服务 ...

  4. k8s高可用集群_搭建高可用集群(初始化和部署keepalived)---K8S_Google工作笔记0055

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们来部署keepalived,搭建高可用集群. 然后我们这里需要master,155, ma ...

  5. k8s高可用集群_搭建高可用集群(实现方式介绍)---K8S_Google工作笔记0054

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们来说搭建高可用集群,为什么要搭建高可用集群. 因为,首先我们说master节点是用来管理其 ...

  6. k8s高可用集群_搭建高可用集群(部署master2和node节点)---K8S_Google工作笔记0058

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后上一节我们把master1节点,搭建完成了,接下来我们把下面的 master2节点以及node ...

  7. k8s高可用集群_搭建高可用集群(部署master1节点初始化)---K8S_Google工作笔记0057

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们去部署我们的master1节点.以及去初始化我们的master1节点. 我们设置启动 sy ...

  8. k8s高可用集群_搭建高可用集群(部署haproxy和安装docker以及其他组件)---K8S_Google工作笔记0056

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们再去安装haproxy,实现负载均衡. 然后 yum install -y haproxy ...

  9. 多目标函数 matlab 粒子群_【LIBSVM】基于群智能优化算法的支持向量机 (SVM) 参数优化...

    前言 支持向量机 (Support Vector Machines,SVM) 有两个重要参数:一个是正则化系数(c),一个是核参数(g,高斯核函数).针对这两个参数的优化,在libsvm工具箱的基础上 ...

最新文章

  1. python实训项目-黑马程序员上海校区Python21期Django项目实训
  2. button常用属性_web阶段常用单词明细表,你值得拥有
  3. OpenCV神经网络neural network的实例(附完整代码)
  4. 20151026c#2
  5. javase获取项目根目录_JavaSE:如何设置/获取您自己的文件和目录属性
  6. POJ1279 Art Gallery 多边形的核
  7. PreparedStatement JDBC域处理/SQl攻击
  8. 项目管理-让什么人做什么事
  9. JavaScript 学到什么程度可以学 Node.js?
  10. 首次安装Linux,配置网络、换源一步到位
  11. 西门子PLC入门-PLC介绍
  12. golang:goredis库pipeline使用方式
  13. 战胜拖延症的利器—Product Backlog
  14. Android——给button添加图片
  15. 腾讯云运维干货沙龙-海量运维实践大曝光 (一)
  16. 高级计划排程(APS)算法框架学习
  17. Font-AweSome在Vue中的使用
  18. Accumulator累加器(一)
  19. python爬虫-百度/360搜索
  20. 【音效处理】Compressor 压缩器算法简介

热门文章

  1. 什么是回归分析(regression analysis)?有哪些类型的回归分析(regression analysis)?
  2. 影像组学视频学习笔记(15)-ROC曲线及其绘制、Li‘s have a solution and plan.
  3. 原核生物基因组三代数据(pacbio/nanopore)组装
  4. mybatis 同名方法_MyBatis(四):xml配置详解
  5. c++代码转为go_Go与C/C++ 互相调用
  6. python 终端执行命令
  7. 人脸检测--Supervised Transformer Network for Efficient Face Detection
  8. LeetCode 102. Binary Tree Level Order Traversal--递归,迭代-Python,Java解法
  9. 计算机应用基础统考操作,全国统考计算机应用基础操作题
  10. js和html以及css的区别,html、css、js中的区别与关系