Linux搭建Rabbitmq集群

news2025/1/12 17:49:47

1.1 添加其他用户 133、134、135

因为 guest 用户只能在本机访问,添加一个 admin 用户,密码也是 admin
./rabbitmqctl add_user admin admin
./rabbitmqctl set_user_tags admin administrator
./rabbitmqctl set_permissions -p / admin “." ".” “.*”

1.2 启用管理插件

./rabbitmq-plugins enable rabbitmq_management
访问:
http://虚拟机 IP:15672

1.3 软件版本

Erlang 是当前最新版本 23.1
RabbitMQ 是当前最新版本 3.8.4

1.4 机器规划

准备三台虚拟机,可以用克隆功能。
192.168.111.133 RabbitMQ 内存节点 HAPRoxy Keepalived(master)
192.168.111.134 RabbitMQ 内存节点 HAPRoxy Keepalived(backup)
192.168.111.135 RabbitMQ 磁盘节点
VIP 192.168.111.159

1.5 网络结构图

在这里插入图片描述

1.6 安装 Erlang 和 RabbitMQ

先按这个步骤在三台机器上分别安装好 Erlang 和 RabbitMQ。

1.7 配置.erlang.cookie

.erlang.cookie 默认在当前用户根目录下,是隐藏文件,只读文件。
权限要先改成 777,改完以后还原成 400
将三台机器内容改为一致,或者把第一台机器.erlang.cookie 上传到其他两台机器。
cd ~
chmod 777 .erlang.cookie
vim .erlang.cookie
XTNENHLEVWHMRLMIYAUD

chmod 400 .erlang.cookie

1.8 配置三台机器 host

vim /etc/hosts
添加内容:
192.168.111.133 rmq156
192.168.111.134 rmq157
192.168.111.135 rmq158
重启网络
service network restart
相互验证一下,看看能不能 ping 通:
ping rmq157

1.9 加入集群

在 158(磁盘节点)上执行:
cd /usr/local/soft/rabbitmq_server-3.8.9/sbin
./rabbitmq-server -detached >nohup.out&
./rabbitmqctl start_app
在 156、157(内存节点)上执行:
cd /usr/local/soft/rabbitmq_server-3.8.9/sbin
./rabbitmq-server -detached >nohup.out&
./rabbitmqctl start_app
./rabbitmqctl stop_app
./rabbitmqctl join_cluster --ram rabbit@rmq158
./rabbitmqctl start_app
查看集群状态
./rabbitmqctl cluster_status
也可以在任何一台机器的管理界面查看:
在这里插入图片描述
设置镜像队列,在三台机器上执行:
./rabbitmqctl set_policy ha-all “^” ‘{“ha-mode”:“all”}’

1.10 安装 HAPRoxy

yum install -y haproxy

1.10.1 配置 HAPRoxy

cd /etc/haproxy/
cp haproxy.cfg haproxy.cfg.bak
配置文件内容全部覆盖

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log 127.0.0.1 local2
chroot /var/lib/haproxy # 改变当前工作目录
pidfile /var/run/haproxy.pid # haproxy 的 pid 存放路径,启动进程的用户必须有权限访问此文件
maxconn 4000 # 最大连接数,默认 4000
user root # 默认用户
group root # 默认组
daemon # 创建 1 个进程进入 deamon 模式运行。此参数要求将运行模式设置为 daemon
stats socket /var/lib/haproxy/stats # 创建监控所用的套接字目录
#---------------------------------------------------------------------
# defaults settings
#---------------------------------------------------------------------
# 注意:因为要使用 tcp 的负载,屏蔽掉与 http 相关的默认配置
defaults
mode http # 默认的模式 mode { tcp|http|health },tcp 是 4 层,http 是 7 层,health 只会返回 OK
log global
# option httplog # 采用 http 日志格式
option dontlognull # 启用该项,日志中将不会记录空连接。所谓空连接就是在上游的负载均衡器
# option http-server-close # 每次请求完毕后主动关闭 http 通道
# option forwardfor except 127.0.0.0/8 # 如果后端服务器需要获得客户端真实 ip 需要配置的参数,可以从 Http Header 中获得客户端 ip
option redispatch # serverId 对应的服务器挂掉后,强制定向到其他健康的服务器
retries 3 # 3 次连接失败就认为服务不可用,也可以通过后面设置
# timeout http-request 10s
timeout queue 1m
timeout connect 10s # 连接超时时间
timeout client 1m # 客户端连接超时时间
timeout server 1m # 服务器端连接超时时间
# timeout http-keep-alive 10s
timeout check 10s
maxconn 3000 # 最大连接数
###################### 打开 haproxy 的监测界面###############################
listen status
bind 0.0.0.0:9188
mode http
stats enable
stats refresh 30s
stats uri /stats #设置 haproxy 监控地址为 http://localhost:9188/stats
stats auth admin:123456 #添加用户名密码认证
stats realm (Haproxy\ statistic)
stats admin if TRUE
######################监听 rabbitmq 的 web 操作页面############################
listen rabbitmq_admin
bind 0.0.0.0:15670
server rmq156 192.168.111.133:15672
server rmq157 192.168.111.134:15672
#######################监听 rabbimq_cluster #################################
listen rabbitmq_cluster
bind 0.0.0.0:5670
mode tcp
#负载均衡算法(#banlance roundrobin 轮询,balance source 保存 session 值,支持 static-rr,leastconn,first,uri 等参数)
balance roundrobin
#check inter 2000 是检测心跳频率
#rise 2 是 2 次正确认为服务器可用
#fall 2 是 2 次失败认为服务器不可用
server rabbit1 192.168.111.133:5672 check inter 5000 rise 2 fall 2
server rabbit2 192.168.111.134:5672 check inter 5000 rise 2 fall 2

1.10.2 启动 156 和 157 的 haproxy

haproxy -f /etc/haproxy/haproxy.cfg
其他命令:
service haproxy restart
service haproxy stop

1.10.3 浏览器访问:

192.168.44.156:15670
192.168.44.157:15670
这两个都能正常访问 RabbitMQ 管理界面,用 admin/admin 登录
192.168.44.156:9188/stats
192.168.44.157:9188/stats
这两个能正常访问 HaProxy 监控界面,用 amdin/123456 登录
在这里插入图片描述

1.11 安装 Keepalived

yum install -y keepalived

1.11.1 配置 Keepalived

cd /etc/keepalived
cp keepalived.conf keepalived.conf.bak
156 为 master,配置内容

global_defs {
router_id NodeA # 起一个唯一的名字,不能与备机相同
}
vrrp_script chk_haproxy {
script "/etc/keepalived/check_haproxy.sh"
interval 5
weight 2
}
vrrp_instance VI_1 {
state MASTER # 这里标记为主
interface eno16777736 # 这里的必须和你的网卡一致,ipconfig 获得
virtual_router_id 1 # 这里表示路由的唯一标识与备机一致
priority 100 # 配置优先级
advert_int 1
authentication {
auth_type PASS
auth_pass root # 配置认证密码
}
virtual_ipaddress { # 配置虚拟 ip 地址,就是开放的地址,与本机 ip 不同
192.168.111.159
}
track_script {
chk_haproxy
}
}

157 为 backup,配置内容
router_id、vrrp_instance state、priority 要修改

global_defs {
router_id NodeB
}
vrrp_script chk_haproxy {
script "/etc/keepalived/check_haproxy.sh"
interval 5
weight 2
}
vrrp_instance VI_1 {
state BACKUP # 通过 BACKUP 表示该机器为备机
interface eno16777736 # 与网卡一致,ipconfig 获得
virtual_router_id 1 # 与主机一致
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass root
}
virtual_ipaddress { # 开放的虚拟地址
192.168.111.159
}
track_script {
chk_haproxy
}
}

1.11.2 编写脚本内容,自动重启 HAProxy 的服务,如果不成功则关闭Keepalived 服务

#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then
haproxy -f /etc/haproxy/haproxy.cfg
fi
sleep 2
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then
service keepalived stop
fi

作用:
如果 HAProxy 服务挂了,先重启。
如果重启不成功,关闭 Keepalived 服务,切换倒 backup

1.11.3 启动 keepalived

先启动 156 master,再启动 157 slave
service keepalived start
查看状态
service keepalived status
查看启动日志:
journalctl -xe
查看 keepalived 日志
tail -f /var/log/messages
访问:
192.168.111.159:15670
admin/admin 登录
在这里插入图片描述
应用连接到
192.168.111.159:5670 收发消息

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

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

相关文章

嵌入式软件设计之美-以实际项目应用MVC框架与状态模式(下)

上节我们分享了MVC框架、状态模式组合在实际开发中的应用,它能够让我们的软件设计流程更加的清晰、易于维护: 嵌入式软件设计之美-以实际项目应用MVC框架与状态模式(上) 那么这一节我们就直接开门见山,从接下来的这个开源项目分享开始&…

An2023(Animate2023)中文版软件下载「附带安装教程」

animate2023版本已经更新,此次的最新版本中,拥有大量的新特性,特别是在继续支持Flash SWF、AIR格式的同时,还会支持HTML5Canvas、WebGL,并能通过可扩展架构去支持包括SVG在内的几乎任何动画格式,更新推出了…

MySQL数据库期末考试试题及参考答案(06)

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 一、 填空题 普通索引使用KEY或____定义。在MySQL中,DROP VIEW语句用于____。MySQL中常见的索引大致分为普通索引、 ____ 、 ____ 、全文索引、空间索引。只有在…

《STL源码剖析》笔记——allocator

六大组件间关系 部分STL文件包含关系 allocator包含于中: 实际实现于三个文件 : 1.stl_construct.h :对象的构造和析构 2.stl_alloc.h空间配置和释放 3.stl_uninitialized.h 空间配置器(allocator) 1.什么是空间配置器&#xff…

MindFusion JS Chart 2.0 Crack

一个用于图表、仪表和仪表板的库。MindFusion JS Chart 结合了 2D 和 3D 图表、财务图表、仪表和仪表板。优雅的 API、丰富的事件集、无限数量和类型的数据系列以及您在JavaScript和HTML中创建完美数据可视化可能需要的一切。 特征 常见图表类型 创建交互式线图、 面积图、 气泡…

深入浅出scala之变量定义(P11-15)

文章目录1. 变量定义2.数据类型3.数值类型4.浮点类型1. 变量定义 基本语法: 变量定义一定要初始化 var|val变量名[: 变量类型] .变量值使用var或者val定义一个变量。 使用var(variable)声明变量,可以被重新赋值。 //定义变量a2,手动指定类型为Int,此时需要保证所…

如何完成视频合并操作?这几个方法值得一试

我们在拍摄视频vlog的时候,不可能持续、完整地拍一整天,而是通过很多视频素材中,挑选几段有意义的部分,将他们剪辑出来,然后再进行合并。大家可能会觉得视频剪辑很难学,其实不然,我们借助一些专…

[附源码]java毕业设计小说网站的设计与实现1

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

NVIDIA AGX Xavier 部署 CUDA-PointPillars

背景: CUDA-PointPillars 在X86 NVIDIA GeForce GTX 1060 使用自家激光雷达数据跑通并优化后,部署到边缘设备NVIDIA AGX Xavier,出现了好多问题,记录下来,以备后用。 参考: NVIDIA Jetson AGX Xavier安装…

SpringBoot整合Memcached缓存技术/JetCache缓存技术以及J2Cache缓存技术怎么在Spring Boot中配置

写在前面: 继续记录自己的SpringBoot学习之旅,这次是SpringBoot应用相关知识学习记录。若看不懂则建议先看前几篇博客,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用! 3.5.1.6 Memcached缓存技术使用 3.5.1.6.1 下载安装…

torch包下载和安装失败的解决

今天打算使用python的 torch包的时候,输入pip install torch,在pycharm下载一直失败。 报错信息里面提示一开始是pip版本出错: WARNING: You are using pip version 20.0.2, however version 20.2.3 is available. 导致我一整天都在更新pip&…

软件工程毕设项目 计算机SSM毕业设计【源码+论文】

文章目录前言 题目1 : 基于SSM的旅游资源网站 <br /> 题目2 : 基于SSM的中药店商城网站 <br /> 题目3 : 基于SSM的汽车租赁网站<br /> 题目4 : 基于SSM的汉服文化平台网站 <br /> 题目5 : 基于SSM的校园疫情师生防疫登记备案系统 <br /> 题目6 :…

JS——【案例】图片轮播图(自动轮播/手动点击/悬停显示)[技术栈:html、css、JavaScript]

1、效果&#xff1a; 2、需求&#xff1a; 3、代码实现&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"&…

【飞桨Paddle】RTSP视频流和PP-Human实时行人分析

PP-Human是基于飞桨深度学习框架的业界首个开源的实时行人分析工具&#xff0c;支持图片/单镜头视频/多镜头视频多种输入方式&#xff0c;功能覆盖多目标跟踪、属性识别和行为分析&#xff0c;兼容图片、视频、在线视频流多种数据格式输入。 环境准备 环境要求&#xff1a; Pa…

蓝牙耳机哪款音质最好?公认音质好的蓝牙耳机品牌

耳机作为日常生活的调剂品&#xff0c;从性能到外观&#xff0c;再到音质让我对真无线蓝牙耳机的综合性能惊艳&#xff0c;蓝牙技术的成熟开启了无线传输模式&#xff0c;面对琳琅满目的无线蓝牙耳机&#xff0c;很多人一时之间无从下手&#xff0c;不知道口碑最好的蓝牙耳机是…

【空间/通道注意模型:Nest连接:IVIF】

NestFuse: An Infrared and Visible Image Fusion Architecture Based on Nest Connection and Spatial/Channel Attention Models &#xff08;NestFuse: 基于Nest连接和空间/通道注意模型的红外和可见光图像融合架构&#xff09; 我们提出了一种新颖的红外和可见光图像融合…

分布式技术——分布式事务原理与实战

摘要 分布式事务是分布式系统中非常重要的一部分&#xff0c;最典型的例子是银行转账和扣款&#xff0c;A 和 B 的账户信息在不同的服务器上&#xff0c;A 给 B 转账 100 元&#xff0c;要完成这个操作&#xff0c;需要两个步骤&#xff0c;从 A 的账户上扣款&#xff0c;以及…

sqli-labs/Less-36

这一关和上一关一样都是get请求形式的 我们首先判断一下注入类型是否为数字型 输入如下 id1 and 12 正常回显了 说明属于字符型 然后判断是单引还是双引 输入1 回显如下 不好 遇到转义了 需要宽字节注入帮助逃逸才行 于是将注入语句改成了1%df 回显如下 出现报错信息 从…

聊聊Spring Cloud Gateway 动态路由及通过Apollo的实现

在之前我们了解的Spring Cloud Gateway配置路由方式有两种方式 1.通过配置文件 spring:cloud:gateway:routes:- id: testpredicates:- Path/ms/test/*filters:- StripPrefix2uri: http://localhost:9000 2.通过JavaBean Beanpublic RouteLocator routeLocator(RouteLocatorB…

最新科目一攻略(新规)

一、*新规题 1、学法减分学习和满分教育 学法减分学习网上学习3日内累计满30分钟且考试合格&#xff0c;一次扣减1分现场学习满1小时且考试合格&#xff0c;一次扣减2分参加组织的交通安全公益活动的&#xff0c;满1小时&#xff0c;一次扣减1分【易考】饮酒后受过处罚&#xf…