部署环境与版本

安装包下载地址:

Erlang语言依赖下载链接:http://erlang.org/download/otp_src_21.1.tar.gz

RabbitMQ 3.7.8版本下载链接:https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.8/rabbitmq-server-generic-unix-3.7.8.tar.xz

通过WGET下载:

wget http://erlang.org/download/otp_src_21.1.tar.gz

wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.8/rabbitmq-server-generic-unix-3.7.8.tar.xz

依赖Yum合集:

make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC unixODBC-devel httpd python-simplejson epel-release socat  perl ncurses-devel xz

部署思路与目的

本次部署需要实现的目的为实现两个RabbitMQ镜像集群的数据同步,每个RabbitMQ集群分别部署3节点虚拟机,共计6个nodes。

通过Shovel和Federation工具实现RabbitMQ集群之间的exchange或queue数据同步,并验证数据延时。设置对应的hostname和hosts文件,当然也可以不单独配置,只需要hostname在局域网唯一且网络可达即可。

操作步骤

##前置步骤,vi /etc/hostname  更改对应主机的hostname

1、yum安装依赖组件环境

yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC unixODBC-devel httpd python-simplejson

yum -y install epel-release

# 先安装epel-release  之后再安装 socat,有先后顺序

yum -y install socat

yum install perl

yum install ncurses-devel

2、下载、解压、改名安装包

[root@NodeA ~]# wget http://erlang.org/download/otp_src_21.1.tar.gz

[root@NodeA ~]# wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.8/rabbitmq-server-generic-unix-3.7.8.tar.xz

[root@NodeA ~]# tar -xvf otp_src_21.1.tar.gz

[root@NodeA ~]# xz -d rabbitmq-server-generic-unix-3.7.8.tar.xz

[root@NodeA ~]# tar -xvf rabbitmq-server-generic-unix-3.7.8.tar

[root@NodeA ~]# mv otp_src_21.1 ./erlang

[root@NodeA ~]# cp -r rabbitmq_server-3.7.8 /usr/local/rabbitmq    #查看~目录下文件情况

3、编译执行Erlang环境(因为RabbitMQ依赖此语言)

[root@NodeA ~]# cd erlang/

[root@NodeA erlang]#./configure --prefix=/usr/local/erlang --without-javac

滚屏之后make它,等待时间较长,此时去操作别的节点,将其余5个节点的配置做好,或者做好一个节点之后镜像分发。

[root@NodeA erlang]# make && make install

4、更改环境变量,验证erl成功安装

[root@NodeA erlang]# vi /etc/profile

在最后加入下列两行

export PATH=$PATH:/user/local/erlang/bin

export PATH=/usr/local/rabbitmq/sbin:$PATH

刷新

[root@NodeA erlang]# source /etc/profile          //这里容易遇到问题,切换root之后跑指令无效,重新source /etc/profile即可

[root@NodeA erlang]# erl    #弹出如下所示则安装成功

按两次Ctrl+c退出,此时单节点的RabbitMQ已经可以跑起来了,但是先不用管,我们直接搭建集群

5、部署RabbitMQ集群

2个主节点执行下列操作,开启RabbitMQ的节点和Shovel工具,从节点先不要动作

[root@NodeA ~]# rabbitmq-plugins enable rabbitmq_management

[root@NodeA ~]# rabbitmq-plugins enable rabbitmq_shovel

[root@NodeA ~]# rabbitmq-plugins enable rabbitmq_shovel_management

[root@NodeA ~]# rabbitmq-plugins enable rabbitmq_federation

[root@NodeA ~]# rabbitmq-plugins enable rabbitmq_federation_management

结果如下

在~目录查询.erlang.cookie文件,并将其发送到从节点的~下。

[root@NodeA ~]# ls –af

[root@NodeA ~]# scp .erlang.cookie 10.60.xx.xx:~

输入yes和密码后文件则备复制到其他节点下即可开启从节点的RabbitMQ,切勿提前打开从节点,否则会出现授权和认证失败的情况。

确认将.erlang.cookie传至其他副节点的root根目录后,启动其他节点

[root@NodeB/C ~]# rabbitmq-plugins enable rabbitmq_management

[root@Node1-2 ~]# rabbitmq-plugins enable rabbitmq_management

请注意,这里容易报错,大概率是传过去的文件权限不对,需要给.erlang.cookiie授权600

[root@NodeB/C ~]# chown 600 .erlang.cookie

然后再次执行

[root@NodeB/C ~]# rabbitmq-plugins enable rabbitmq_management

显示成功开启之后,可以另起一个

[root@nodeB/C or 2/3 ~]# rabbitmq-server

另起一个ssh界面,如果此界面关闭,服务就停了,当然也可以nohup隐藏执行。

[root@nodeB/C or 2/3 ~]# rabbitmqctl stop_app

[root@nodeB/C or 2/3 ~]# rabbitmqctl reset #用来清空数据,如果主节点有数据也需要清空

[root@nodeB/C ~]# rabbitmqctl join_cluster rabbit@nodeA

[root@node2/3 ~]# rabbitmqctl join_cluster rabbit@node1

##这里会显示接入成功,如有问题,可参考后面问题汇总,这里是最容易出问题的地方

[root@nodeB/C or 2/3 ~]# rabbitmqctl start_app

6、在主节点添加集群策略

ha-mode: all,在集群中所有的节点上进行镜

ha-sync-mode: automatic,在集群节点宕机重新连接后自动同步

# 添加策略

[root@NodeA ~]# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'

# 查看策略

[root@NodeA ~]# rabbitmqctl list_policies

7、配置账户

#添加用户

[root@NodeA ~]# rabbitmqctl  add_user  admin  admin

#添加角色

[root@NodeA ~]# rabbitmqctl  set_user_tags  admin administrator

#赋权

[root@NodeA ~]# rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

#查看用户

[root@NodeA ~]# rabbitmqctl list_permissions

8、登录Web查看

输入账号密码 admin admin 登录即可

集群搭建成功

创建Shovel/federation策略,federation需要开启专门的policy

对应的地址写法在web页面中有提示:如amqp://usermane:password@10.XX.XX.XX,此处的密码不建议设置带有@的符号,否则识别会有问题。若有问题具体可以靠靠后文连接:铲子用法与Federation(需要配置Prolicy)用法

创建成功

创建一个消息

对面收到消息

操作指南与问题汇总

1、yum源问题:

mv /etc/yum.repos.d /etc/yum.repos.d.bak

mkdir -p /etc/yum.repos.d

3、下载新的yum源,分别执行以下2条命令:

curl https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo > /etc/yum.repos.d/Centos-vault-8.5.2111.repo

curl https://mirrors.aliyun.com/repo/epel-archive-8.repo > /etc/yum.repos.d/epel-archive-8.repo

2、防火墙问题(最开始时全部关闭)

启动防火墙 systemctl start firewalld

禁用防火墙 systemctl stop firewalld

设置开机启动 systemctl enable firewalld

停止并禁用开机启动 systemctl disable firewalld

3、进程查看

查看进程  netstat –tpln

参考链接

集群搭建

https://blog.csdn.net/qq_35098526/article/details/84335030

https://blog.csdn.net/publicChen/article/details/116482826

https://blog.csdn.net/yyj12138/article/details/124475267

Shovel使用教程

RabbitMQ集群之shovel插件的使用_玉&心的博客-CSDN博客_rabbitmq shovel

Federation使用教程

RabbitMQ集群之federation联合插件的使用_玉&心的博客-CSDN博客_federation rabbitmq

RabbitMQ镜像集群与ShovelFederation跨集群数据同步相关推荐

  1. Apache ZooKeeper - ZooKeeper 集群中 Leader 与 Follower 的数据同步策略

    文章目录 流程图 why ? How ? 何时触发数据同步的机制? 同步哪些数据 同步方式 DIFF 同步 TRUNC+DIFF 同步 TRUNC 同步 SNAP 同步 同步后的处理 源码分析 流程图 ...

  2. 关于跨网闸数据同步的方式调研Java实现ModbusTCP通信

    1 网闸的概念 网闸_百度百科 (baidu.com) 2 跨网闸数据同步的方式了解 目前了解到有三种方式: 1 配置开放ip.端口,外网直接访问http://www.voidcn.com/artic ...

  3. HDFS High Availability(HA)高可用、单点故障、主备集群、脑裂问题、数据同步问题、HDFS HA解决方案—QJM

    HDFS High Availability(HA)高可用 1.1 High Availability背景知识 1.1.1 单点故障.高可用 单点故障(英语:single point of failu ...

  4. Mysql数据库在多服务器集群的情况下如何保证数据同步?

    数据不同步的异常情况通常出现在,在同一时刻有多个写数据的操作发生.因此要避免数据库的数据不同步这个问题,就要避免同时有多个写数据的操作,同时只能有一个写操作. 这在一台服务器运行的时候似乎是没有问题的 ...

  5. Kettle-开源的ETL工具集-实现SqlServer到Mysql表的数据同步并部署在Windows服务器上

    场景 kettle 中文名称叫水壶,该项目的主程序员MATT希望把各种数据放到一个壶里,然后 以一种指定的格式流出.是一款由纯Java编写的ETL工具,绿色无需安装,数据抽取高效稳定(数据迁移工具). ...

  6. Elastic:集群相关知识点总结(一)数据流 Data Stream、索引生命周期 ILM、可搜索快照 searchable snapshots、跨集群搜索 CCS、跨集群复制 CCR

    0.引言 集群管理是ES的核心重点,因此相关的知识点至关重要,本期主要针对数据流.索引生命周期.可搜索快照.跨集群搜索.跨集群复制进行讲解 1.数据流 Data Stream 官方文档:Data st ...

  7. Kubernetes使用集群联邦实现多集群管理

    Kubernetes在1.3版本之后,增加了"集群联邦"Federation的功能.这个功能使企业能够快速有效的.低成本的跨区跨域.甚至在不同的云平台上运行集群.这个功能可以按照地 ...

  8. 集群没有leader_ZooKeeper 集群中 Leader 与 Follower 的4种数据同步策略

    首先要声明一点,zk集群中,leader服务器有着比较重要的存在,Follower 服务器只是处理非事务性请求,leader服务器主要负责事务性请求,Follower 服务器在遇到事务性请求以后还是会 ...

  9. 从单机到集群会话的管理之集群模式一

    为什么要使用集群?主要有两方面原因:一是对于一些核心系统要求长期不能中断服务,为了提供高可用性我们需要由多台机器组成的集群:另外一方面,随着访问量越来越大且业务逻辑越来越复杂,单台机器的处理能力已经不 ...

最新文章

  1. 这可能是Python面向对象编程的最佳实践
  2. Struts Form中Date类型之“argument type mismatch”错误解决方法
  3. UE4--多线程的实现方式
  4. 狗窝里的小日子- 3 ...
  5. 平板电脑连接投影仪_交互式触控幼教白板如何与平板进行连接-微幼科技
  6. opencv 数学操作
  7. opencv画线和文字
  8. 【MediaSoup】UDPSOCKET recv数据到rtcp包解析
  9. IIC协议范例代码(自用)
  10. 阿里巴巴图表库 Bizcharts 正式开源
  11. python已知三角形的顶点坐标,求任一顶点角度
  12. 论文阅读:RGCF: Refined Graph Convolution Collaborative Filering with Concise and Expressive Embedding
  13. matlab 颜色半透明,使用matlab画半透明椭圆
  14. 关于随机森林randomforest对结果进行分类的原则的个人理解
  15. FreeType 用法
  16. 事件绑定-addEventListener()和attachEvent()的区别及用法
  17. ECMAScript 2015 ES6
  18. SegY地震体数据可视化分析工具
  19. SpringCloud之Eureka(微服务注册)
  20. 怎么用科学计算机算反三角函数值域,反三角函数值域怎么求

热门文章

  1. 豆豆趣事[2014年03月]
  2. 求助!校园认证网络如何进行自动登录 java
  3. 超级稳定的脚本闹钟(连续一年每天都响)
  4. 深度学习 --- 循环神经网络RNN详解(BPTT)
  5. 1. 写一个基本的类
  6. python cmdb 马哥_python相关cmdb系统
  7. JAVA 以UTF-8导出CSV文件时产生乱码的解决方法
  8. Scala获取main函数参数,idea演示
  9. 毕设 - 用户登录 用cookie来实现会话跟踪
  10. 某宝找人代写作业,发现信息被泄露,店家回复:遭黑客攻击