RabbitMQ镜像集群与ShovelFederation跨集群数据同步
部署环境与版本
安装包下载地址:
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跨集群数据同步相关推荐
- Apache ZooKeeper - ZooKeeper 集群中 Leader 与 Follower 的数据同步策略
文章目录 流程图 why ? How ? 何时触发数据同步的机制? 同步哪些数据 同步方式 DIFF 同步 TRUNC+DIFF 同步 TRUNC 同步 SNAP 同步 同步后的处理 源码分析 流程图 ...
- 关于跨网闸数据同步的方式调研Java实现ModbusTCP通信
1 网闸的概念 网闸_百度百科 (baidu.com) 2 跨网闸数据同步的方式了解 目前了解到有三种方式: 1 配置开放ip.端口,外网直接访问http://www.voidcn.com/artic ...
- HDFS High Availability(HA)高可用、单点故障、主备集群、脑裂问题、数据同步问题、HDFS HA解决方案—QJM
HDFS High Availability(HA)高可用 1.1 High Availability背景知识 1.1.1 单点故障.高可用 单点故障(英语:single point of failu ...
- Mysql数据库在多服务器集群的情况下如何保证数据同步?
数据不同步的异常情况通常出现在,在同一时刻有多个写数据的操作发生.因此要避免数据库的数据不同步这个问题,就要避免同时有多个写数据的操作,同时只能有一个写操作. 这在一台服务器运行的时候似乎是没有问题的 ...
- Kettle-开源的ETL工具集-实现SqlServer到Mysql表的数据同步并部署在Windows服务器上
场景 kettle 中文名称叫水壶,该项目的主程序员MATT希望把各种数据放到一个壶里,然后 以一种指定的格式流出.是一款由纯Java编写的ETL工具,绿色无需安装,数据抽取高效稳定(数据迁移工具). ...
- Elastic:集群相关知识点总结(一)数据流 Data Stream、索引生命周期 ILM、可搜索快照 searchable snapshots、跨集群搜索 CCS、跨集群复制 CCR
0.引言 集群管理是ES的核心重点,因此相关的知识点至关重要,本期主要针对数据流.索引生命周期.可搜索快照.跨集群搜索.跨集群复制进行讲解 1.数据流 Data Stream 官方文档:Data st ...
- Kubernetes使用集群联邦实现多集群管理
Kubernetes在1.3版本之后,增加了"集群联邦"Federation的功能.这个功能使企业能够快速有效的.低成本的跨区跨域.甚至在不同的云平台上运行集群.这个功能可以按照地 ...
- 集群没有leader_ZooKeeper 集群中 Leader 与 Follower 的4种数据同步策略
首先要声明一点,zk集群中,leader服务器有着比较重要的存在,Follower 服务器只是处理非事务性请求,leader服务器主要负责事务性请求,Follower 服务器在遇到事务性请求以后还是会 ...
- 从单机到集群会话的管理之集群模式一
为什么要使用集群?主要有两方面原因:一是对于一些核心系统要求长期不能中断服务,为了提供高可用性我们需要由多台机器组成的集群:另外一方面,随着访问量越来越大且业务逻辑越来越复杂,单台机器的处理能力已经不 ...
最新文章
- 这可能是Python面向对象编程的最佳实践
- Struts Form中Date类型之“argument type mismatch”错误解决方法
- UE4--多线程的实现方式
- 狗窝里的小日子- 3 ...
- 平板电脑连接投影仪_交互式触控幼教白板如何与平板进行连接-微幼科技
- opencv 数学操作
- opencv画线和文字
- 【MediaSoup】UDPSOCKET recv数据到rtcp包解析
- IIC协议范例代码(自用)
- 阿里巴巴图表库 Bizcharts 正式开源
- python已知三角形的顶点坐标,求任一顶点角度
- 论文阅读:RGCF: Refined Graph Convolution Collaborative Filering with Concise and Expressive Embedding
- matlab 颜色半透明,使用matlab画半透明椭圆
- 关于随机森林randomforest对结果进行分类的原则的个人理解
- FreeType 用法
- 事件绑定-addEventListener()和attachEvent()的区别及用法
- ECMAScript 2015 ES6
- SegY地震体数据可视化分析工具
- SpringCloud之Eureka(微服务注册)
- 怎么用科学计算机算反三角函数值域,反三角函数值域怎么求