keepalived+haproxy 搭建高可用高负载高性能rabbitmq集群

一、环境准备

1. 我这里准备了三台centos7 虚拟机

主机名主机地址软件
node-01192.168.157.133rabbitmq、erlang、haproxy、keepalived
node-02192.168.157.134rabbitmq、erlang、haproxy、keepalived
node-03192.168.157.135rabbitmq、erlang

2. 关闭三台机器的防火墙

# 关闭防火墙
service firewalld stop
# 关闭防火墙开机自启
systemctl disable firewalld

3. 三台主机的host和hostname配置

#配置hostname,重启生效
hostnamectl set-hostname <hostname>
# 加入三台主机的ip和hostname
vi /etc/hosts
192.168.157.133 node-01
192.168.157.134 node-02
192.168.157.135 node-03

4. erlang与rabbitmq版本选择RabbitMQ Erlang Version Requirements — RabbitMQhttps://www.rabbitmq.com/which-erlang.html二、安装erlang环境

1. 下载erlang,选择与rabbitmq版本匹配的版本,这里我选择的是25.0.4版本Downloads - Erlang/OTPThe official home of the Erlang Programming Languagehttps://www.erlang.org/downloads

2. 下载相关erlang编译依赖包

yum install –y ncurses ncurses-base ncurses-devel ncurses-libs ncurses-static ncurses-term ocaml-curses ocaml-curses-devel
yum install –y openssl-devel zlib-devel
yum install –y make ncurses-devel gcc gcc-c++ unixODBC unixODBC-devel openssl openssl-devel

2. 解压安装erlang

#创建erlang目录
mkdir /usr/local/erlang
#解压
tar -zxvf otp_src_25.0.4.tar.gz
#进入otp_src_25.0.4目录
./configure --prefix=/opt/erlang --without-javac
make && make install

3. configure的时候一般会遇到一些依赖不存在的情况,只需要用yum安装一下,重新运行configure命令即可。

4. 提示找不到wx-config: command not found

#更新epel第三方软件库
yum install -y epel-release
#再次执行,就可以安装了
yum install –y wxWidgets-devel
yum install wxBase #for /usr/bin/wx-config-3.0
cd /usr/bin
#创建软连接
ln -s wx-config-3.0 wx-config

5. 配置环境变量并验证

#修改/etc/profile
#加入如下配置,并保存
export ERLANG_HOME=/usr/local/erlang
export PATH=$ERLANG_HOME/bin:$PATH
#重新加载配置
source /etc/profile
#验证,输入erl命令,出现erlang命令行就是安装成功

三、安装rabbitmq镜像集群

1. github下载rabbitmq,我选择的 rabbitmq-server-generic-unix-3.11.21.tar.xzhttps://github.com/rabbitmq/rabbitmq-server/releaseshttps://github.com/rabbitmq/rabbitmq-server/releases

2. 解压安装

#解压到/usr/local目录
tar -xvf rabbitmq-server-generic-unix-3.11.21.tar.xz -C /usr/local
#配置rabbitmq环境变量
export ERLANG_HOME=/usr/local/erlang
export RABBITMQ_HOME=/usr/local/rabbitmq_server-3.11.21
export PATH=$ERLANG_HOME/bin:$RABBITMQ_HOME/sbin:$PATH
#重新加载/etc/profile
source /etc/profile
#开启rabbitmq管理界面
rabbitmq-plugins enable rabbitmq_management
#后台启动rabbitmq
rabbitmq-server -detached

3. 访问对应的host:15672进入rabbitmq管理页面,默认用户密码 guest/guest

4. 创建rabbitmq用户

#创建admin用户,密码admin
rabbitmqctl add_user admin admin
#设置用户角色 
#超级管理员 administrator
#监控者     monitoring
#策略制定者 policymaker 
#普通管理者 management 
rabbitmqctl set_user_tags admin administrator
#设置权限
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
#查看所有用户
rabbitmqctl list_users

5. 拷贝.erlang.cookie到其他主机

如果启动rabbitmq的是root用户那么这个文件就在/root/用户下的隐藏文件,可以用ls -al查看到

#使用scp命令将node-01上的.erlang.cookie复制到其他主机上
scp /root/.erlang.cookie node-02:/root/.erlang.cookie
scp /root/.erlang.cookie node-03:/root/.erlang.cookie

6. 将node-02和node-03加入到node-01集群

在node-02和node-03上执行

#以后台模式启动
rabbitmq-server -detached
#停掉rabbitmq服务,不会关闭erlang服务环境
rabbitmqctl stop_app
#用来清空数据,如果主节点有数据也需要清空
rabbitmqctl reset 
#加入node-01集群
rabbitmqctl join_cluster rabbit@node-01
#启动rabbitmq
rabbitmqctl start_app

7. 查看集群状态

 登录任意节点后台可以看到集群状态

 8. 添加集群同步策略

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

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

方式一:命令添加

# 添加策略
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
# 查看策略
rabbitmqctl list_policies

方式二:管理后台界面上添加

9. 验证镜像模式

在node-01上创建一个队列ha-queue,可以看到node里面有三个节点,进去查看可以看到使用的策略为ha-all,并且node-02和node-03为镜像节点。

四、安装haproxy

node-01 和 node-02上操作

#yum 安装haproxy
yum install -y haproxy
#修改haproxy.cnf配置,配置文件在/etc/haproxy目录下
vi haproxy.cnf
#增加如下配置
#页面配置
listen status
    # 绑定9188端口
    bind 0.0.0.0:9188
    mode http
    stats enable
    stats refresh 30s
    stats uri /stats 
    # 登录用户admin 密码admin
    stats auth admin:admin
    stats realm (Haproxy\ statistic)
    stats admin if TRUE

#配置rabbitmq管理端
listen rabbitmq_admin
    # 绑定15673端口
    bind 0.0.0.0:15673
    server node-01 192.168.157.133:15672
    server node-02 192.168.157.134:15672
    server node-03 192.168.157.135:15672

#配置rabbitmq集群
listen rabbitmq_cluster
    # 绑定5673端口
    bind 0.0.0.0:5673
    mode tcp
    option tcplog
    maxconn 10000
    # 负载模式为轮训
    balance roundrobin
    server node-03 192.168.157.135:5672 check inter 1000 rise 2 fall 2 backup
    server node-02 192.168.157.134:5672 check inter 1000 rise 2 fall 2 backup
    server node-01 192.168.157.133:5672 check inter 1000 rise 2 fall 2

启动haproxy

haproxy -f /etc/haproxy/haproxy.cnf

访问haproxy监控管理页面

 通过haproxy配置的端口访问rabbitmq管理页面

五、安装keepalived

#yum安装keepalived
yum install -y keepalived
#修改keepalived.cnf配置,在/etc/keepalived/keepalived.cnf

global_defs {
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

#检测脚本
vrrp_script check_haproxy {
    # 检测HAProxy脚本
    script "/etc/keepalived/script/check_haproxy.sh"
    # 每隔两秒检测
    interval 2
    # 权重
    weight 2
}


vrrp_instance haproxy {
    #MASTER为主 BACKUP为备
    state MASTER
    #填自己网卡的名字
    interface eno16777736
    mcast_src_ip 192.168.157.133    
    virtual_router_id 51
    priority 100
    advert_int 1
    #认证方式,主备配置一致就行
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    #脚本
    track_script {
        check_haproxy
    }
    #虚拟IP地址
    virtual_ipaddress {
        192.168.157.11
    }    
}

启动keepalived

service keepalived restart

验证通过虚拟IP访问haproxy负载的rabbitmq管理端地址

至此安装全部完成。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

自动控制原理笔记-采样控制系统

目录 采样控制系统的基本概念&#xff1a; 采样过程及采样定理&#xff1a; 一、采样过程 二、采样定理&#xff08;香农采样定理、奈奎斯特采样定律&#xff09; 三、信号复现 四、零阶保持器 z变换与z反变换&#xff1a; z变换的定义 z变换基本定理 z反变换 采样系…

gorm中正确的使用json数据类型

一、说明 1、JSON 数据类型是 MySQL 5.7.8 开始支持的。在此之前&#xff0c;只能通过字符类型&#xff08;CHAR&#xff0c;VARCHAR 或 TEXT &#xff09;来保存 JSON 文档。现实中也很多人不会采用json的存储方式&#xff0c;直接定义一个字符类型,让前端转换传递进来,返回给…

HTTPS协议加密原理

目录 一、什么是HTTPS 二、什么是加密/解密 三、为什么要加密 四、常见的加密方式 1.对称加密 2. 非对称加密 五、HTTPS加密方式探讨 1.只使用对称加密 2.只使用非对称加密 3.非对称加密对称加密 4.非对称加密对称加密CA认证 六、总结 一、什么是HTTPS HTTP 协议&a…

vue3+element下拉多选框组件

<!-- 下拉多选 --> <template><div class"select-checked"><el-select v-model"selected" :class"{ all: optionsAll, hidden: selectedOptions.data.length < 2 }" multipleplaceholder"请选择" :popper-app…

git及GitHub的使用

文章目录 git在本地仓库的使用github使用创建仓库https协议连接(不推荐&#xff0c;现在用起来比较麻烦)ssh连接&#xff08;推荐&#xff09;git分支操作冲突处理忽略文件 git在本地仓库的使用 1.在目标目录下右键打开git bash here 2.创建用户名和邮箱(注&#xff1a; 下载完…

ms-tpm-20-ref 在linux下编译

1、代码地址&#xff0c; GitHub - microsoft/ms-tpm-20-ref: Reference implementation of the TCG Trusted Platform Module 2.0 specification.Reference implementation of the TCG Trusted Platform Module 2.0 specification. - GitHub - microsoft/ms-tpm-20-ref: Refe…

Nodejs-nrm:快速切换npm源 / npm官方源和其他自定义源之间切换

一、理解 Nodejs nrm Nodejs nrm 是一个管理 npm 源的工具。由于 npm 在国内的速度较慢&#xff0c;很多开发者会使用淘宝的 npm 镜像源&#xff0c;但是也会遇到一些问题&#xff0c;例如某些包在淘宝镜像源中不存在&#xff0c;或者淘宝镜像源本身也会有问题。 Nodejs nrm …

CSS scoped 属性的原理

scoped 一、scoped 是什么&#xff1f;二、实现原理 一、scoped 是什么&#xff1f; 在 Vue 组件中&#xff0c;为了使样式私有化&#xff08;模块化&#xff09;&#xff0c;不对全局造成污染&#xff0c;可以在 style 标签上添加 scoped 属性以表示它的只属于当下的模块&am…

【MOS管的作用和工作原理】

数电/模电知识学习与分享001 MOS管的作用和工作原理1、MOS管基本概念2、MOS管基本原理3、MOS管广泛作用4、MOS管特点4、参考文献 MOS管的作用和工作原理 1、MOS管基本概念 MOS管&#xff08;Metal-Oxide-Semiconductor Field-Effect Transistor&#xff09;是一种常用的半导体…

Unity 之利用 localEulerAngle与EulerAngle 控制物体旋转

文章目录 概念讲解localEulerAngle与EulerAngle的区别 概念讲解 欧拉角&#xff08;Euler Angles&#xff09;是一种常用于描述物体在三维空间中旋转的方法。它使用三个角度来表示旋转&#xff0c;分别绕物体的三个坐标轴&#xff08;通常是X、Y和Z轴&#xff09;进行旋转。这…

AI Agent在情景猜谜场景下的AgentBench基准测试

目录 AgentBench评估哪些场景? 近日,来自清华大学、俄亥俄州立大学和加州大学伯克利分校的研究者设计了一个测试工具——AgentBench,用于评估LLM在多维度开放式生成环境中的推理能力和决策能力。研究者对25个LLM进行了全面评估,包括基于API的商业模型和开源模型。 他们发现…

安卓移动应用开发实训室建设方案

一 、系统概述 安卓移动应用开发作为新一代信息技术的重点和促进信息消费的核心产业&#xff0c;已成为我国转变信息服务业的发展新热点&#xff1a;成为信息通信领域发展最快、市场潜力最大的业务领域。互联网尤其是移动互联网&#xff0c;以其巨大的信息交换能力和快速渗透能…

es的索引管理

概念 &#xff08;1&#xff09;集群&#xff08;Cluster&#xff09;&#xff1a; ES可以作为一个独立的单个搜索服务器。不过&#xff0c;为了处理大型数据集&#xff0c;实现容错和高可用性&#xff0c;ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。 &…

docker项目实战

目录 1、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。 1&#xff09;拉取mysql:5.6和owncloud镜像 2&#xff09;后台运行容器 3&#xff09;通过ip:端口的方式访问owncloud 2、安装搭建私有仓库 Harbor 1&#xff09;首先准备所需包 2&#xff09;安装h…

JavaScript——为什么静态方法不能调用非静态方法

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

RabbitMQ---订阅模型-Fanout

1、 订阅模型-Fanout Fanout&#xff0c;也称为广播。 流程图&#xff1a; 在广播模式下&#xff0c;消息发送流程是这样的&#xff1a; 1&#xff09; 可以有多个消费者 2&#xff09; 每个消费者有自己的queue&#xff08;队列&#xff09; 3&#xff09; 每个队列都要绑定…

C++:命名空间,缺省参数,函数重载,引用,内联函数

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》 文章目录 前言一、命名空间命名空间的定义命名空间的使用 二、缺省参数缺省参数概念缺省参数分类 三、函数重载函数重载的概念 四、引用引用的概念引用特性引用的使用场景引用与指针的区别 …

vr内容编辑软件降低了虚拟现实项目开发门槛

VR虚拟场景编辑器是一种专门用于创建、修改和设计虚拟场景的工具。它利用vr虚拟现实技术&#xff0c;让用户可以在三维空间中直接对场景进行操作和编辑。这种编辑器的出现&#xff0c;使得用户可以更加直观、自由地进行场景设计和制作&#xff0c;为诸多领域带来了新的可能性。…

目标检测(Object Detection):Fast R-CNN,YOLO v3

目录 目标检测(Object Detection) R-CNN SPPNet Fast R-CNN YOLO v1 YOLO v2 YOLO v3 目标检测(Object Detection) 任务是计算机视觉中非常重要的基础问题&#xff0c;也是解决图像分割、目标跟踪、图像描述等问题的基础。目标检测是检测输入图像是否存在给定类别的物体…

将公共组件提取到npm包中

多个前端项目中公共组件使用方案&#xff08;npm包方式&#xff09; - 简书