RabbitMQ集群

RabbitMQ概述

 1.RabbiMQ简介

RabbiMQ是⽤Erang开发的,集群⾮常⽅便,因为Erlang天⽣就是⼀⻔分布式语⾔,但其本身并不⽀持负载均衡。支持高并发,支持可扩展。支持AJAX,持久化,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

2.RabbitMQ 特点

可靠性

扩展性

高可用性

多种协议

多语言客户端

管理界面

插件机制

3.什么是消息队列

MQ 全称为Message Queue, 。是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。

消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信。


集群中有两种节点

1 内存节点:只保存状态到内存(一个例外的情况是:持久的queue的持久内容将被保存到disk)

2 磁盘节点:保存状态到内存和磁盘。---推荐

内存节点虽然不写入磁盘,但是它执行比磁盘节点要好。集群中,只需要一个磁盘节点来保存状态 就足够了

如果集群中只有内存节点,那么不能停止它们,否则所有的状态,消息等都会丢失。

普通集群准备环境(安装配置RabbitMQ)

这里准备三台服务器,在三台服务器上都安装rabbitmq并且配置本地解析。(三台服务器都配置)

[root@server01 ~]# cat >> /etc/hosts<<EOF
192.168.134.165 server01
192.168.134.166 server02
192.168.134.163 server03
EOF
1.三个节点都安装rabbitmq
[root@server01 ~]# yum install -y epel-release gcc-c++ unixODBC unixODBC-devel openssl-devel ncurses-devel[root@server01 ~]#rz      #上传erlang和rabbitmq两个软件包
[root@server01 ~]# yum install  -y erlang-21.3.8.21-1.el7.x86_64
root@server01 ~]# yum install  -y   rabbitmq-server-3.7.10-1.el7.noarch.rpm
  • 启动
[root@server01 ~]# systemctl daemon-reload
[root@server01 ~]# systemctl start rabbitmq-server
[root@server01 ~]# systemctl enable rabbitmq-server###每台都操作开启rabbitmq的web访问界面:
[root@server01 ~]# rabbitmq-plugins enable rabbitmq_management
  • 创建用户
[root@server01 ~]# rabbitmqctl   add_user aren 123  #添加用户和密码
[root@server01 ~]#rabbitmqctl set_user_tags aren  administrator   #设置为管理员
[root@server01 ~]# rabbitmqctl  list_users    #查看用户
Listing users ...
user	tags
aren	[administrator]
admin	[]
guest	[administrator]aren设置这三个权限前是没有权限查询队列,在ui界面也看不见
[root@server01 ~]# rabbitmqctl set_permissions -p "/" aren ".*" ".*" ".*"
Setting permissions for user "aren" in vhost "/" ...
...done.
  • 配置开启用户远程登录
[root@server01 ~]# vim /etc/rabbitmq/rabbitmq.config  +61{loopback_users, []}[root@server01 ~]# cp /usr/share/doc/rabbitmq-server-3.7.10/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config[root@server01 rabbitmq]# ll
总用量 44
-rw-r--r-- 1 root rabbitmq    23 11月  8 10:43 enabled_plugins
-rw-r--r-- 1 root rabbitmq 33096 11月  8 10:44 rabbitmq.config
 测试
  • 查看端口

4369 -- erlang发现端口
5672 --程序连接端口
15672 -- 管理界面ui端口
25672 -- server间内部通信口

  •  访问192.168.134.165:15672
  • rabbitmq默认管理员用户:guest 密码:guest

部署集群

注意:在三台机器上都部署

1.创建好数据目录和日志目录
[root@server01~]#  mkdir -p /data/rabbitmq/data
[root@server01 ~]# mkdir -p /data/rabbitmq/logs
[root@server01 ~]#  chmod 777 -R /data/rabbitmq创建配置文件:
[root@server01 ~]# vim /etc/rabbitmq/rabbitmq-env.conf
RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
RABBITMQ_LOG_BASE=/data/rabbitmq/logs###重启
[root@server01 ~]# systemctl  restart rabbitmq-server
2.拷⻉.erlang.cookie 到其他两台服务器,使服务器的cookie保持一致

Rabbitmq的集群是依附于erlang的集群来⼯作的,所以必须先构建起erlang的集群景象。Erlang的集群中

各节点是经由过程⼀个magic cookie来实现的,这个cookie存放在/var/lib/rabbitmq/.erlang.cookie中,⽂件是400的权限。所以必须保证各节点cookie⼀致,不然节点之间就⽆法通信.

⽤scp的⽅式将server01节点的.erlang.cookie的值复制到其他两个节点中.

[root@server01 ~]# cat /var/lib/rabbitmq/.erlang.cookie
JSNEBPKQZWUGDKNCRKAM
[root@server01 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.134.166:/var/lib/rabbitmq/
[root@server01 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.134.163:/var/lib/rabbitmq/
 3.将server02和server03作为内存结点加入server01节点集群

在server02和server03执行一下命令

注意:在改了主机名的情况下需要重启后才能添加磁盘节点,当然本地解析也要配置。

[root@server02 ~]# systemctl restart rabbitmq-server
[root@server02 ~]# rabbitmqctl stop_app  #停止节点
[root@server02 ~]# rabbitmqctl reset   #如果有数据需要重置,没有则不用
[root@server02 ~]# rabbitmqctl join_cluster --ram rabbit@server01   #添加到磁盘节点
[root@server02 ~]#rabbitmqctl start_app  #启动节点[root@server03 ~]# systemctl restart rabbitmq-server
[root@server03 ~]# rabbitmqctl stop_app  #停止节点
[root@server03 ~]# rabbitmqctl reset   #如果有数据需要重置,没有则不用
[root@server03 ~]# rabbitmqctl join_cluster --ram rabbit@server01
[root@server03 ~]#rabbitmqctl start_app  #启动节点

(1)默认rabbitmq启动后是磁盘节点,在这个cluster命令下,server02和server03是内存节点,server01是磁盘节点。
(2)如果要使server02,server03都是磁盘节点,去掉--ram参数即可
(3)如果想要更改节点类型,可以使⽤命令rabbitmqctl change_cluster_node_type
disc(ram),前提是必须停掉rabbit应⽤.

 4.查看集群状态

在server01磁盘节点上查看集群的配置。

[root@server01 ~]# rabbitmqctl  cluster_status

RabbitMQ镜像集群配置

上面已经完成RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制。但队列节点宕机直接导致该队列无法应用,只能等待重启,所以要想在队列节点宕机或故障也能正常应用,就要复制队列内容到集群里的每个节点,必须要创建镜像队列。

镜像队列是基于普通的集群模式的,然后再添加一些策略,所以你还是得先配置普通集群,然后才能设置镜像队列,我们就以上面的集群接着做。 保证各个节点之间数据同步;

创建镜像集群:

rabbitmqctl set_permissions  ".*" ".*" ".*"         (后面三个”*”代表用户拥有配置、写、读全部权限)
[root@server01 ~]# rabbitmqctl set_policy  ha-all "^" '{"ha-mode":"all"}'
[root@server02 ~]# rabbitmqctl set_policy  ha-all "^" '{"ha-mode":"all"}'
[root@server03 ~]# rabbitmqctl set_policy  ha-all "^" '{"ha-mode":"all"}'

再次查看队列已经同步到其他两台节点:


安装并配置负载均衡器HA

  • 安装haproxy
[root@server01 ~]# yum -y install haproxy
  • 修改 /etc/haproxy/haproxy.cfg
[root@server01 ~]# vim /etc/haproxy/haproxy.cfg 
globallog         127.0.0.1 local2chroot      /var/lib/haproxypidfile     /var/run/haproxy.pidmaxconn     4000user        haproxygroup       haproxynbproc      4daemon# turn on stats unix socketstats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
defaultsmode                    httplog                     globalretries                 3timeout connect         10stimeout client          1mtimeout server          1mtimeout check           10smaxconn                 2048
#---------------------------------------------------------------------
##监控查看本地状态#####
listen admin_statsbind *:89mode httpoption httplogoption httpcloselog 127.0.0.1 local0 errstats uri  /haproxystats auth aren:123456stats refresh 30s
####################################
###反代监控
frontend serverbind *:5670log globalmode tcp#option forwardfordefault_backend rabbitmqmaxconn 3
backend rabbitmqmode        tcplog         globalbalance     roundrobinserver      rabbitmq1 192.168.134.165:5672 check inter 2000s rise 2 fall 3server      rabbitmq2 192.168.134.166:5672 check inter 2000s rise 2 fall 3server      rabbitmq3 192.168.134.163:5672 check inter 2000s rise 2 fall 3[root@server01 ~]# systemctl start haproxy

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/138485.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CocoaPods安装环境和流程以及各种情况】

CocoaPods 环境HomebrewRubyrbenvRubyGems 和 Bundler安装Ruby管理Ruby更新Ruby替换Ruby镜像方式1方式2 CocoaPods安装CocoaPodsCocoaPods使用安装的一些问题单元测试引用问题 参考的链接 环境 Homebrew $ brew --config *可以发现打印有下面一行&#xff1a; Homebrew Ruby: …

Pandas groupby方法中的group_keys属性

pandas版本1.5.3中groupby方法&#xff0c;当设置group_keysTrue时&#xff0c;会以groupby的字段为第一级索引&#xff0c;如下述代码中time_id作为第一级索引&#xff0c;同时保留了原dataframe&#xff08;df&#xff09;中的索引作为第二级索引。 >>> df.groupby…

293_C++_告警类

2、IncPos S32 AlarmList::IncPos(U32 *pu32Pos, U32 *pu32Cycle) {if((pu32Pos == NULL) || (pu32Cycle == NULL))</

《013.Springboot+vue之旅游信息推荐系统》【前后端分离有开发文档】

《013.Springbootvue之旅游信息推荐系统》【前后端分离&有开发文档】 项目简介 [1]本系统涉及到的技术主要如下&#xff1a; 推荐环境配置&#xff1a;idea jdk1.8 maven MySQL 前后端分离; 后台&#xff1a;SpringBootMybatisMySQL; 前台&#xff1a;Vue; [2]功能模块展…

Python+requests+unittest+excel接口自动化测试框架

一、框架结构&#xff1a; 工程目录 二、Case文件设计 三、基础包 base 3.1 封装get/post请求&#xff08;runmethon.py&#xff09; impimport jsonclass RunMethod:def post_main(self,url,data,headerNone):res Noneif header !None: res requests.post(urlurl,datadata,…

利用pandoc实现latex文件转word文件 公式全部转换

1以Mac为例 你可以使用Pandoc将TeX格式的文章转换为Word格式。Pandoc是一个能够将文档从一种格式转换为另一种格式的命令行工具。 首先&#xff0c;确保你已经安装了Pandoc和LaTeX。然后&#xff0c;在命令行中执行以下命令&#xff1a; pandoc -s input.tex -o output.docx…

ArcGIS10.8 连接 PostgreSQL 及遇到的两个问题

前提 以前同事用过我的电脑连PostgreSQL&#xff0c;失败了。当时不知道原因&#xff0c;只能使用GeoServer来发布数据了。现在终于搞明白了&#xff0c;原因是ArcGIS10.2版本太老&#xff0c;无法连接PostgreSQL9.4。参考这里 为了适应时代的发展&#xff0c;那我就用新的Ar…

与创新者同行,Apache Doris in 2023

在刚刚过去的 Doris Summit Asia 2023 峰会上&#xff0c;Apache Doris PMC 成员、飞轮科技技术副总裁衣国垒带来了“与创新者同行”的主题演讲&#xff0c;回顾了 Apache Doris 在过去一年所取得的技术突破与社区发展&#xff0c;重新思考了在面对海量数据实时分析上的挑战与机…

v-on能否监听多个事件?

v-on 可以监听多个事件。可以使用 v-on 或简写形式 来绑定多个事件和对应的处理函数。 以下是几种监听多个事件的方式&#xff1a; 1.使用单个事件处理函数处理多个事件&#xff1a; <button v-on:click"handleClick">点击或鼠标移入</button>methods…

代码随想录算法训练营第四十七天丨 动态规划part10

121. 买卖股票的最佳时机 思路 动态规划 动规五部曲分析如下&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][0] 表示第i天持有股票所得最多现金 &#xff0c;这里可能有疑惑&#xff0c;本题中只能买卖一次&#xff0c;持有股票之后哪还有…

js将图片文件转为base64格式

/***图片文件转换成BASE64字符串&#xff0c;异步任务*param {File} file图片文件对象*return {String} BASE64字符串*/ const getBase64 (file: File) > new Promise((resolve: (url: string) > void, reject) > {const reader new FileReader();reader.onload ()…

【OS】AUTOSAR架构下多核通信

目录 前言 正文 1.多核通信介绍 2.多核间标准通信 2.1 什么是IOC 2.2 IOC的适用范围

Install Docker in Linux

Docker官网链接: https://docs.docker.com/ 1.确定Linux版本 新版本的Docker对Linux系统版本有一定的要求。如果Linux的发行版系统是centOS&#xff0c;安装最新版的docker需要centOS 7以上的系统。 在Docker安装帮助页面查看支持的系统版本。 Docker帮助页面:https://docs…

自动化之Java面试

1.重写与重载的区别 重载规则&#xff1a; 方法名相同&#xff0c;参数个数或类型不同&#xff0c;与返回值类型无关&#xff0c;节约词汇,例如driver.switchTo().frame&#xff08;index/nameOrId/frameElement&#xff09; java的重载(overload) 最重要的应用场景就是构造器…

java excel、word、PPT转换成pdf预览

先引入包&#xff1a;[lib下载地址](https://mp.csdn.net/mp_download/manage/download/UpDetailed)Controllerpublic AjaxResult fileToPdf(RequestBody VerifyCode url, HttpServletResponse response, HttpServletRequest request) throws IOException {String fileUrl req…

前后端开发迭代

要创建一个具有登录和注册功能的前端网页,并使用Go语言编写后端来支持它,你需要分两部分来进行:前端开发和后端开发。下面我将提供一个基本的指导方案。 前端开发 前端部分主要涉及HTML、CSS和JavaScript。你可以使用框架如React或Vue来简化开发,但为了保持简单,这里使用…

迷雾系统-人物驱散迷雾

使用linerRender,将人物移动数据动态添加进去&#xff0c;同样是特殊层级让FogCamera渲染 EndCapVertices的数量越多&#xff0c;矩形就变为一个椭圆形的形状&#xff0c;更适合圆形视野探索 当拐点的两个点距离太近&#xff0c;LineRender会发生扭曲&#xff0c;解决方案是在…

【C++】类型转换 | IO流 | 空间配置器

C语言类型转换 C语言总共有两种形式的类型转换&#xff1a;隐式类型转换 和 显示类型转换。 C语言的转换格式虽然很简单&#xff0c;但也存在不少缺陷&#xff1a; 隐式类型转换有些情况下可能会引发意料之外的结果&#xff0c;比如数据精度丢失。显示类型转换的可视性比较差…

机器翻译目前广泛应用于文档翻译以及硬件翻译

机器翻译&#xff08;Machine Translation&#xff0c;MT&#xff09;是一种自动化技术&#xff0c;用于将一种语言的文本转换为另一种语言的文本。它通常被用于跨语言交流和全球化的需求。 机器翻译目前可分为软件和硬件&#xff0c;软件常用的则是文档翻译、文字翻译、图片翻…

#react使用01#

#react-redux是什么# redux是一个独立专门用于做状态管理的JS库(不是react插件库) 它可以用在react、angular、vue等项目中&#xff0c;但基本与react配合使用 作用&#xff1a;集中式管理react应用中多个组件共享的状态 简单的说&#xff1a;react-redux 是基于 redux二次封装…