rabbitmq版本升级并部署高可用

news2025/3/8 16:10:08

RabbitMQ版本升级

先检查是否已经安装rabbitmq

rpm -qa|grep rabbitmq|wc -l    //如果结果是0,表示没有安装

rpm -e --nodeps $(rpm -qa|grep rabbitmq)  //如安装了,则进行卸载

先检查是否已经安装erlang

rpm -qa|grep erlang|wc -l    //如果结果是0,表示没有安装

rpm -e --nodeps $(rpm -qa|grep erlang)  //如安装了,则进行卸载

准备升级后的安装包

  • 去https://dl.bintray.com/rabbitmq/rpm/下载需要rabbitmq包
  • 去https://github.com/rabbitmq/erlang-rpm/releases下载对应所需要的erlang包
  • 由于rabbitmq需要依赖socat所以需要去此网站https://centos.pkgs.org/查找对应系统的对应版本下载
  • rabbitmq还依赖logrotate,查看下是否安装了,如没安装重复第3步

Logrotate下载地址https://centos.pkgs.org/7/centos-x86_64/logrotate-3.8.6-19.el7.x86_64.rpm.html

rpm -qa | grep logrotate

安装对应包

rpm -ivh erlang-23.3.4.18-1.el7.x86_64.rpm

####检查是否安装成功
erl
#输入 erl 并用 halt() . 函数退出
rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm

rpm -ivh rabbitmq-server-3.8.16-1.el7.noarch.rpm

  • 安装erlang遇到的问题

1.错误:依赖检测失败:

libsystemd.so.0()(64bit) 被 erlang-21.3.8.9-1.el7.x86_64 需要

方案一

1.1下载依赖包,网址https://pkgs.org/,搜索libcrypto.so.10,下载对应版本的安装包

1.2下载地址如下

https://centos.pkgs.org/7/centos-x86_64/openssl-libs-1.0.2k-19.el7.x86_64.rpm.html#:~:text=http%3A//mirror.centos.org/centos/7/os/x86_64/Packages/openssl%2Dlibs%2D1.0.2k%2D19.el7.x86_64.rpm

1.3安装命令

rpm -ivh openssl-libs-1.0.2k-19.el7.x86_64.rpm

安装失败则加参数--force进行强制安装

rpm -ivh openssl-libs-1.0.2k-19.el7.x86_64.rpm --force

方案二

在命令后面添加--nodeps --force参数。该命令的作用是,不再分析包之间的依赖关系而直接安装

rpm -ivh erlang-23.3.4.11-1.el7.x86_64.rpm --nodeps --force

然后手动安装依赖环境

安装socat遇到的错误

错误:依赖检测失败:

libreadline.so.6()(64bit) 被 socat-1.7.3.2-2.el7.x86_64 需要

安装rpm时增加参数–nodeps --force:rpm -ivh socat-1.7.3.2-5.el7.lux.x86_64.rpm --nodeps --force

安装rabbitmq遇到的问题

错误1:

错误:依赖检测失败:

Socat被rabbitmq-server-3.8.16-l.el7.noarch需要

方案:安装socat依赖

命令:rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm

  • 启动rabbitmq

service rabbitmq-server start//启动

service rabbitmq-server stop//停止

service rabbitmq-server restart//重启

  • 启动管理界面

rabbitmq-plugins enable rabbitmq_management

  • 1

RabbitMQ配置

新启动的mq还不可以远程访问,guest也只能本地访问所以需要一些配置

  • 添加用户并设置密码

rabbitmqctl add_user  super super

 添加权限(使admin用户对虚拟主机“/” 具有所有权限):

rabbitmqctl set_permissions -p “/” super “.*” “.*” “.*”
  • 修改用户角色(加入administrator用户组)

rabbitmqctl set_user_tags super administrator

rabbitmqctl set_user_tags {username} {tag ...}

 至此就可以远程访问了
 4. 管理界面访问地址为 ip:15672(端口号)

进入管理界面查看端口号情况

注:ITSM相关配置文件使用的是amqp协议,使用的端口号是5672。

常用命令

应用的开启关闭

service rabbitmq-server start//启动

service rabbitmq-server stop//停止

service rabbitmq-server restart//重启

集群的开启关闭

rabbitmqctl stop_app //仅关闭应用,不关闭节点

rabbitmqctl start_app //开启应用

rabbitmq -server -detached //启动节点和应用

rabbitmqctl stop //关闭节点和应用

插件管理

rabbitmq-plugins enable  xxx //开启某个插件

rabbitmq-plugins disable xxx //关闭某个插件

rabbitmq-plugins list //插件列表

rabbitmq-plugins set xxx xxx //启用一个或多个插件,禁用其余插件

 注意:重启服务器后生效。

用户管理

rabbitmqctl add_user username pwd //新建用户

rabbitmqctl delete_user username //删除用户

rabbitmqctl list_users //查看用户

rabbitmqctl change_passwor change_password {username} {newpassword} //改密码

rabbitmqctl set_user_tags {username} {tag ...} //设置用户角色 Tag可以为 administrator,monitoring, management

防火墙

#### rabbitmq普通用户不能开放防火墙,使用root提前开放5672,15672端口

firewall-cmd --zone=public --add-port=5672/tcp --permanent

firewall-cmd --zone=public --add-port=15672/tcp --permanent

firewall-cmd --reload

Rabbitmq集群

修改三台主机名称

注意:需要先设置linux机器别名称 

hostnamectl set-hostname 机器别名 --static
systemctl stop rabbitmq-server          #(先停 止mq)

vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.200.108 node1

192.168.200.109 node2

192.168.200.102 node3

共享Erlang Cookie

需要将所有机器的.erlang.cookie文件与集群主节点进行同步,同步前需要关闭所有机器的rabbitmq服务

# 关闭rabbitmq服务 systemctl stop rabbitmq-server

[root@node1 ~]# more /var/lib/rabbitmq/.erlang.cookie

PZIJZCVFEXCZCCXPMZFE

[root@node2 ~]# more /var/lib/rabbitmq/.erlang.cookie

GQJUECIAZXPIYQFBASUT

#对比两台主机cookie文件并不一致,集群必须保证一致性#

chmod 600 /var/lib/rabbitmq/.erlang.cookie

启动mq服务和erlang

在3台节点上分别都执行命令

rabbitmq-server -detached       (3台该命令可以重启mq和erlang)

systemctl start rabbitmq-server     (3台启动mq)

集群搭建

以node1为主节点,其余的node2和node3加入主节点

# 1.停止服务
 rabbitmqctl stop_app
 # 2.重置状态
 rabbitmqctl reset
 # 3.节点加入, 在一个node加入cluster之前,必须先停止该node的rabbitmq应用,即先执行stop_app
 # node2加入node1, node3加入node2
 rabbitmqctl join_cluster --ram rabbit@node1 //加入到磁盘节点
 # 4.启动服务
 rabbitmqctl start_app

#此时一个普通集群就搭建起来了,在任意一个节点查看集群状态

rabbitmqctl cluster_status

默认的 cluster_name 名字为 rabbit@rabbit1,如果你想进行修改,可以使用以下命令:

rabbitmqctl set_cluster_name rabbitmq_cluster

开启镜像集群

以上部署的这种集群,是无法在各个节点之间保存数据的,数据只会保存在接受到消息的节点上当 ram 的节点挂了之后 数据会丢失;这里我们为所有队列开启镜像配置,高可用策略。

####表示开启HA模式 适用于所有的队列

rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

 

创建集群账号

[root@node1 ~]# rabbitmqctl add_user admin 123
 Adding user "admin" ...
 [root@node1 ~]#  rabbitmqctl set_user_tags admin administrator
 Setting tags for user "admin" to [administrator] ...
 [root@node1 ~]# rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
 Setting permissions for user "admin" in vhost "/" ...
 [root@node1 ~]#

 步骤
 1.创建用户admin密码123        (生产环境密码必须高难度密码)
 2.给admin用户管理员身份
 3.授予admin用户权限

前期准备

开启ip转发功能

#查看是否开启转发

cat /proc/sys/net/ipv4/ip_forward

#返回1代表IP已开启,0 未开启

#临时开启

echo 1 > /proc/sys/net/ipv4/ip_forward

#永久开启

vi /etc/sysctl.conf

net.ipv4.ip_forward = 1

#立即生效

sysctl -p /etc/sysctl.conf &

关闭selinux

#查看selinux状态

getenforce

#永久关闭selinux

vi /etc/selinux/config

#将 SELINUX=enforcing 改为 SELINUX=disabled

#上一个命令需要重启生效,因此建议执行以下命令,临时关闭selinux

setenforce 0

HAproxy

我们用haproxy做负载均衡,在两台虚拟机上都安装。

 #解压haprpxy
  tar xf haproxy-2.9.0.tar.gz
  #进入目录编译安装
  cd haproxy-2.9.0
  make TARGET=linux-glibc  PREFIX=/opt/haproxy-2.9.0
  make install PREFIX=/opt/haproxy-2.9.0
  #设置环境变量并生效
  vim /etc/profile
 export HAPROXY_HOME=/opt/haproxy-2.9.0
 export PATH=$PATH:$HAPROXY_HOME/sbin
 source /etc/profile
 #查看版本验证安装是否成功
 haproxy -v  

HAProxy version 2.9.0-fddb8c1 2023/12/05 - https://haproxy.org/

Status: development branch - not safe for use in production.

Known bugs: http://www.haproxy.org/bugs/bugs-2.9.0.html

Running on: Linux 3.10.0-1160.36.2.el7.x86_64 #1 SMP Wed Jul 21 11:57:15 UTC 2021 x86_64

配置haproxy文件

mkdir /etc/haproxy
 vim /etc/haproxy/haproxy.cfg


 # 全局配置
 global
     # 日志输出配置、所有日志都记录在本机,通过 local0 进行输出
     log 127.0.0.1 local0 info
     # 最大连接数
     maxconn 4096
     # 改变当前的工作目录
     chroot /opt/haproxy-2.1.10
     # 以指定的 UID 运行 haproxy 进程
     uid 99
     # 以指定的 GID 运行 haproxy 进程
     gid 99
     # 以守护进行的方式运行
     daemon
     # 当前进程的 pid 文件存放位置
     pidfile /opt/haproxy-2.1.10/haproxy.pid
 ​
 # 默认配置
 defaults
     # 应用全局的日志配置
     log global
     # 使用4层代理模式,7层代理模式则为"http"
     mode tcp
     # 日志类别
     option tcplog ##记录TCP请求日志
     # 不记录健康检查的日志信息
     option dontlognull
     # 3次失败则认为服务不可用
     retries 3
     # 每个进程可用的最大连接数
     maxconn 2000
     # 连接超时
     timeout connect 5s
     # 客户端超时
     timeout client 120s
     # 服务端超时
     timeout server 120s
 ​
 # 绑定配置
 listen rabbitmq_cluster
     bind :5672 #绑定端口
     # 配置TCP模式
     mode tcp

option tcpka ##是否允许想server和client发送keepalive
     # 采用加权轮询的机制进行负载均衡
     balance roundrobin
     # RabbitMQ 集群节点配置
     server mq-node1 node1:5672 check inter 5000 rise 2 fall 3 weight 1
     server mq-node2 node2:5672 check inter 5000 rise 2 fall 3 weight 1
     server mq-node3 node3:5672 check inter 5000 rise 2 fall 3 weight 1
 ​
 # 配置监控页面
 listen monitor
     bind :8100
     mode http
     option httplog
     stats enable
     stats uri /stats
     stats refresh 5s

haproxy -f /etc/haproxy/haproxy.cfg -c   #检查配置文件

netstat -ntpl启动haproxy前检查端口占用,若占用则更改/etc/haproxy/haproxy.cfg对应的端口号
 

#启动haproxy配置文件
 haproxy -f /etc/haproxy/haproxy.cfg

#查看Haproxy 启动状态

ps -ef|grep haproxy

网页访问

访问haproxy网址http://192.168.200.102:8100/stats检查是否配置成功,所有节点表示绿色mq集群状态健康。

Keepalived

下载keepalived

以2.2.8版本为例,如下为下载地址

https://www.keepalived.org/download.html

安装依赖软件

rpm -qa|grep automake|wc -l 检查没有automake则安装

yum -y install automake

解压软件

tar -xvf keepalived-2.2.8.tar.gz

在keepalived-2.2.8目录执行./autogen.sh

./autogen.sh

使用configure命令配置安装目录与核心配置文件所在位置

./configure --prefix=/usr/local/keepalived --sysconf=/etc

  • prefix:keepalived安装的位置

  • sysconf:keepalived核心配置文件所在位置,固定位置,改成其他位置则keepalived启动不了,/var/log/messages中会报错

安装

make && make install

keepalived配置文件

Ifconfig查看网卡

vim /etc/keepalived/keepalived.conf

部分配置信息(只显示使用到的):

global_defs {

   # 路由id,主备节点不能相同

   router_id node1 

   vrrp_skip_check_adv_addr

   # 使用 unicast_src_ip 需要注释 vrrp_strict,而且也可以进行 ping 测试

   #vrrp_strict

   vrrp_garp_interval 0

   vrrp_gna_interval 0

}

# 自定义监控脚本

vrrp_script chk_haproxy {

    # 脚本位置

    script "/etc/keepalived/haproxy_check.sh"

    # 脚本执行的时间间隔

    interval 5

# 权重

    weight 10

}

vrrp_instance VI_1 {

    # Keepalived的角色,MASTER 表示主节点,BACKUP 表示备份节点

    state MASTER

   

    # 指定监测的网卡,可以使用 ifconfig 进行查看

    interface ens192

#指定发送单播的源IP

mcast_src_ip 10.9.37.104 # 当前主机ip

   

    # 虚拟路由的id,主备节点需要设置为相同

    virtual_router_id 51

   

    # 优先级,主节点的优先级需要设置比备份节点高

    priority 100

   

    # 设置主备之间的检查时间,单位为秒

    advert_int 1

# 定义验证类型和密码

    authentication {

        auth_type PASS

        auth_pass w123456

    }

    # 调用上面自定义的监控脚本

    track_script {

        chk_haproxy

    }

unicast_peer {

#指定接收单播的对方目标主机IP

    172.21.9.203

    172.21.9.202

}

    virtual_ipaddress {

        # 虚拟IP地址,可以设置多个

        10.9.37.199 

    }

}

/etc/keepalived/script/check_haproxy.sh内容

vim /etc/keepalived/script/check_haproxy.sh

#!/bin/bash

LOGFILE="/var/log/keepalived-haproxy-status.log"

date >> $LOGFILE

A=`ps -C haproxy --no-header |wc -l`

# 判断haproxy是否已经启动

if [ $A -eq 0 ];then

#如果没有启动,则启动

    echo "warning: restart haproxy" >> $LOGFILE

    haproxy -f /etc/haproxy/haproxy.cfg

fi

#睡眠3秒以便haproxy完全启动

    sleep 3

#如果haproxy还是没有启动,此时需要将本机的keepalived服务停掉,以便让VIP自动漂移到另外一台haproxy

    if [ $A -eq 0 ];then

        echo "fail: check_haproxy status" >> $LOGFILE

        systemctl stop keepalived

    fi

else

    echo "success: check_haproxy status" >> $LOGFILE

fi

说明:
 Keepalived组之间的心跳检查并不能察觉到HAproxy负载是否正常,所以需要使用此脚本。
 在Keepalived主机上,开启此脚本检测HAproxy是否正常工作,如正常工作,记录日志。
 如进程不存在,则尝试重启HAproxy,三秒后检测,如果还没有则关掉主Keepalived,此时备Keepalived检测到主Keepalive挂掉,接管VIP,继续服务。

#给脚本添加执行权限
 chmod +x /etc/keepalived/script/check_haproxy.sh

#配置ip转发
 echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf
 #生效
 sysctl -p

#启动keepalived并设置开机自启
 systemctl start keepalived
 systemctl enable keepalived

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

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

相关文章

数据集路径出错.yaml‘ images not found , missing path

方法一:删除settings.yaml 方法二:dataset_name.yaml改用绝对路径,如最后一张图 错误分析: dataset_name.yaml中的path的路径仅支持绝对路径,写相对路径就会搜索不到,使用settings.json中的路径&#xff0…

win32汇编环境,对话框中使用树形视图示例二

;运行效果 ;win32汇编环境,对话框中使用树形视图示例二 ;得到树形视图控件Treeview的全路径字符串,这里的方法是由子项向父项挨个找的算法找齐路径 ;直接抄进RadAsm可编译运行。重要部分加备注。 ;下面为asm文件 ;>>>>>>>>>>>>>>&g…

【连珠云弈】网页五子棋版项目测试报告

目录 一、项目背景 1.1、项目起源 1.2、市场需求 1.3、项目目标 二、项目功能 2.1 用户管理功能 2.2 游戏对战功能 三、测试报告 3.1.功能测试 ​编辑 3.1.1注册功能测试 解决bug: 测试总结: 3.1.2登录功能测试 测试总结: 3.…

OpenCV计算摄影学(15)无缝克隆(Seamless Cloning)调整图像颜色的函数colorChange()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::colorChange 是 OpenCV 中用于调整图像颜色的函数。它允许你通过乘以不同的系数来独立地改变输入图像中红色、绿色和蓝色通道的强度&#xf…

AI视频领域的DeepSeek—阿里万相2.1图生视频

让我们一同深入探索万相 2.1 ,本文不仅介绍其文生图和文生视频的使用秘籍,还将手把手教你如何利用它实现图生视频。 如下为生成的视频效果(我录制的GIF动图) 如下为输入的图片 目录 1.阿里巴巴全面开源旗下视频生成模型万相2.1模…

用Python分割并高效处理PDF大文件

在处理大型PDF文件时,将它们分解成更小、更易于管理的块通常是有益的。这个过程称为分区,它可以提高处理效率,并使分析或操作文档变得更容易。在本文中,我们将讨论如何使用Python和为Unstructured.io库将PDF文件划分为更小的部分。…

RabbitMQ知识点

1.为什么需要消息队列? RabbitMQ体系结构 操作001:RabbitMQ安装 二、安装 # 拉取镜像 docker pull rabbitmq:3.13-management ​ # -d 参数:后台运行 Docker 容器 # --name 参数:设置容器名称 # -p 参数:映射端口号&…

2025-03-06 学习记录--C/C++-PTA 习题6-6 使用函数输出一个整数的逆序数

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 二、代码&#xff08;C语言&#xff09;⭐️ #include <stdio.h>int reverse( int number );int main…

力扣132. 分割回文串 II

力扣132. 分割回文串 II 题目 题目解析及思路 题目要求返回将s切割成若干回文串的最少切割次数 对于子串s[j...i]&#xff0c;若为回文串&#xff0c;则问题变为求s[0...j]的最少切割次数 因此可以考虑动态规划 对于问题s[j...i]是否为回文串&#xff0c;若s[i] s[j]则问…

调研:如何实现智能分析助手(Agent)(AutoCoder、FastGPT、AutoGen、DataCopilot)

文章目录 调研&#xff1a;如何实现智能分析助手&#xff08;Agent&#xff09;&#xff08;AutoCoder、FastGPT、AutoGen、DataCopilot&#xff09;一、交互流程二、数据流程三、架构分类四、开源产品4.1 AutoCoder&#xff08;知识库变体&#xff09;4.2 FastGPT&#xff08;…

学习使用ESP8266进行MQTT通信并在网页上可视化显示

目录 一、工具 二、 流程 三、代码实现 设置MQTT服务器地址 设置服务器和端口号 连接MQTT服务器并订阅话题 回调处理函数 发布数据到话题 四、调试软件使用 打开MQTTx 添加话题 五、网页使用 一、工具 arduino ide esp8266/32单片机 lot物联网网页 MQTTx软件或者m…

mysql进阶(三)

MySQL架构和存储引擎 1. MySQL架构 MySQL8.0服务器是由连接池、服务管理⼯具和公共组件、NoSQL接⼝、SQL接⼝、解析器、优化 器、缓存、存储引擎、⽂件系统组成。MySQL还为各种编程语⾔提供了⼀套⽤于外部程序访问服务器 的连接器。整体架构图如下所⽰&#xff1a; 2. 连接层 …

【MYSQL数据库异常处理】执行SQL语句报超时异常

MYSQL执行SQL语句异常&#xff1a;The last packet successfully received from the server was 100,107 milliseconds ago. The last packet sent successfully to the server was 100,101 milliseconds ago. 这个错误表明 MySQL 服务器与 JDBC 连接之间的通信超时了。通常由…

深入理解三色标记、CMS、G1垃圾回收器

三色标记算法 简介 三色标记算法是一种常见的垃圾收集的标记算法&#xff0c;属于根可达算法的一个分支&#xff0c;垃圾收集器CMS&#xff0c;G1在标记垃圾过程中就使用该算法 三色标记法&#xff08;Tri-color Marking&#xff09;是垃圾回收中用于并发标记存活对象的核心算…

60页PDF | 四川电信数据湖及数据中台实施方案!(附下载)

一、前言 这份报告是关于四川电信数据湖与数据中台实施方案的详细规划。报告从数据驱动、事件管理、数据湖构建、数据资产管理和数据治理等多个方面展开&#xff0c;介绍了如何通过数据湖与数据中台的建设&#xff0c;实现数据的高效采集、存储、分析与共享&#xff0c;提升数…

短分享-Flink图构建

一、背景 通过简单的书写map、union、keyby等代码&#xff0c;Flink便能构建起一个庞大的分布式计算任务&#xff0c;Flink如何实现的这个酷炫功能呢&#xff1f;我们本次分享Flink做的第一步&#xff0c;将代码解析构建成图 源码基于Flink 2.10&#xff0c;书籍参考《Flink核…

java常见的几种并发安全问题及解决方案

项目场景&#xff1a; 并发的应用场景&#xff0c;在开发过程会经常遇到。 例如&#xff1a;服务应用启动后&#xff0c;需要简单统计接口的总访问量&#xff1b;实时更新订单状态&#xff0c;成交总额。 问题描述&#xff1a; 比如统计接口访问次数&#xff0c;如下的实现&a…

【mysql系】mysql启动异常Can‘t create test file localhost.lower-test

1.查看通过下面命令获取对应mysql配置文件 whereis my.cnf 2.查看日志文件 下面这里是对应的错误日志 2025-03-03T06:33:56.402057Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see …

如何使用 LLM 生成的术语自动在搜索应用程序上构建 autocomplete 功能

作者&#xff1a;来自 Elastic Michael Supangkat 了解如何在 Elastic Cloud 中&#xff0c;通过使用 LLM 生成的词汇&#xff0c;为搜索应用增强自动补全功能&#xff0c;实现更智能、更动态的搜索建议。 自动补全是搜索应用中的一项关键功能&#xff0c;它通过在用户输入时实…

vscode离线配置远程服务器

目录 一、前提 二、方法 2.1 查看vscode的commit_id 2.2 下载linux服务器安装包 2.3 安装包上传到远程服务器&#xff0c;并进行文件解压缩 三、常见错误 Failed to set up socket for dynamic port forward to remote port&#xff08;vscode报错解决方法&#xff09;-C…