rabbitmq版本升级并部署高可用

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

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

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

相关文章

Electron-Forge + Vue3 项目初始化

本人对Electron的浅薄理解如下图所示 由上图可以,如果你需要开发一个electron应用,你得具备基本的前端开发经验。对于electron相关的知识,建议先了解下基本的窗口操作,比如新建窗口、关闭窗口等简单的操作,这些内容在…

pinginfoview网络诊断工具中文版

介绍 pinginfoview中文版本是一款实用的网络诊断工具,它专为中文用户设计,提供了方便易用的界面,使得在Windows环境下进行ping测试变得更加简单。该工具是由NirSoft开发的一款免费的桌面应用程序,尽管官方可能并未正式发布中文版…

DeepSeek R1 + 飞书机器人实现AI智能助手

效果 TFChat项目地址 https://github.com/fish2018/TFChat 腾讯大模型知识引擎用的是DeepSeek R1,项目为sanic和redis实现,利用httpx异步处理流式响应,同时使用buffer来避免频繁调用飞书接口更新卡片的网络耗时。为了进一步减少网络IO消耗&…

Go学习笔记:基础语法3

1. 常量 Go语言中的常量使用关键字const定义,用于存储不会改变的数据,常量是在编译时被创建的,即使定义在函数内部也是如此,并且只能是布尔型、数字型(整数型、浮点型和复数)和字符串型。 由于编译时的限…

010---基于Verilog HDL的分频器设计

文章目录 摘要一、时序图二、程序设计2.1 rtl2.2 tb 三、仿真分析四、实用性 摘要 文章为学习记录。绘制时序图,编码。通过修改分频值参数,实现一定范围分频值内的任意分频器设计。 一、时序图 二、程序设计 2.1 rtl module divider #(parameter D…

EX_25/3/6

1&#xff1a;是进度条通过线程自己动起来 myThread.h #ifndef MYTHREAD_H #define MYTHREAD_H#include <QThread>class myThread : public QThread {Q_OBJECT public:myThread(QObject* partennullptr);signals:void sig(int value);protected:void run();private:int…

客户端及时通讯系统(1)

编写核心数据结构 一、核心数据结构介绍二、将本地新项目推送到gitee已有仓库上三、代码实现3.1 核心数据结构成员变量设计和工具类设计 一、核心数据结构介绍 1&#xff09;用户信息&#xff08;UserTnfo&#xff09; 用户的属性 2&#xff09;会话信息&#xff08;ChatSess…

针对半导体行业招聘系统有哪些?

近年来&#xff0c;全球半导体产业迎来爆发式增长&#xff0c;芯片设计、制造、封装等环节对高技能人才的需求急剧攀升。然而&#xff0c;行业面临多重挑战&#xff1a;技术迭代快导致岗位要求动态变化、优质人才争夺激烈、传统招聘模式效率低下。以某头部半导体企业为例&#…

汽车智能钥匙中PKE低频天线的作用

PKE&#xff08;Passive Keyless Entry&#xff09;即被动式无钥匙进入系统&#xff0c;汽车智能钥匙中PKE低频天线在现代汽车的智能功能和安全保障方面发挥着关键作用&#xff0c;以下是其具体作用&#xff1a; 信号交互与身份认证 低频信号接收&#xff1a;当车主靠近车辆时…

清华大学DeepSeek赋能家庭教育【附下载链接】

核心要点&#xff1a; DeepSeek通过基础模型&#xff08;V3&#xff09;、深度思考模型&#xff08;R1&#xff09;及联网模型&#xff0c;为家庭教育提供分层支持&#xff1a;V3用于作业辅导&#xff0c;R1培养批判性思维&#xff0c;联网模型助力探究性学习。家长需遵循目标导…

是德科技十周年:以创新丈量未来,用科技赋能世界

是德科技成立十周年&#xff0c;以全球测试测量领域领军者的姿态&#xff0c;书写了一部突破与创新的发展史诗。作为从惠普、安捷伦深厚技术积淀中孕育而生的行业标杆&#xff0c;十年来是德科技始终站在科技浪潮之巅&#xff0c;构建起覆盖5G通信、人工智能、汽车电子、量子计…

Springboot 梳理

一、Springboot 特性 方便创建可独立运行的spring应用程序直接内嵌Tomcat等服务简化了项目的构建配置为spring及第三方库提供自动配置提供生产级特性无需生成代码或者进行xml配置 二、四大核心 自动配置起步依赖命令行界面Actuator - 生成级的特性 三、自动配置的实现原理 …

unity console日志双击响应事件扩展

1 对于项目中一些比较长的日志&#xff0c;比如前后端交互协议具体数据等&#xff0c;这些日志内容可能会比较长&#xff0c;在unity控制面板上查看不是十分方便&#xff0c;我们可以对双击事件进行扩展&#xff0c;将日志保存到一个文本中&#xff0c;然后用系统默认的文本查看…

GPIO相关寄存器

共七种寄存器用于控制GPIO GPIOx_CRL&#xff08;常用&#xff09; GPIOx_CRH&#xff08;常用&#xff09; GPIOx_IDR&#xff08;常用&#xff09; GPIOx_ODR&#xff08;常用&#xff09; GPIOx_BSRR&#xff08;常用&#xff09; GPIOx_BRR&#xff08;不常用&#x…

简单多状态 dp 问题(典型算法思想)—— OJ例题算法解析思路

目录 一、面试题 17.16. 按摩师 - 力扣&#xff08;LeetCode&#xff09; 算法代码&#xff1a; 代码思路解析&#xff1a; 问题分析&#xff1a; 动态规划定义&#xff1a; 状态转移方程&#xff1a; 初始化&#xff1a; 填表&#xff1a; 返回值&#xff1a; 优化空…

深度解码!清华大学第六弹《AIGC发展研究3.0版》

在Grok3与GPT-4.5相继发布之际&#xff0c;《AIGC发展研究3.0版》的重磅报告——这份长达200页的行业圣经&#xff0c;不仅预测了2025年AI技术爆发点&#xff0c;更将「天人合一」的东方智慧融入AI伦理建构&#xff0c;堪称数字时代的《道德经》。 文档&#xff1a;清华大学第…

基于Hadoop的热门旅游景点推荐数据分析与可视化系统(基于Django大数据技术的热门旅游景点数据分析与可视化)

基于Hadoop大数据技术的热门旅游景点推荐数据分析与可视化系统设计与实现&#xff08;基于大数据技术的Django热门旅游景点数据分析与可视化系统设计与实现&#xff09; 1. 开发工具和实现技术 Pycharm, Python3.7&#xff0c;Django框架&#xff0c;Hadoop&#xff0c;Spark…

bert模型笔记

1.各预训练模型说明 BERT模型在英文数据集上提供了两种大小的模型&#xff0c;Base和Large。Uncased是意味着输入的词都会转变成小写&#xff0c;cased是意味着输入的词会保存其大写&#xff08;在命名实体识别等项目上需要&#xff09;。Multilingual是支持多语言的&#xff0…

dify 工作流 迭代

测试工作流&#xff1b;输入 测试工作流&#xff1b;运行结果 迭代&#xff1b;item使用解构&#xff1b;解析出每个对象

加载Ubuntu配置(source /etc/profile)

source /etc/profile 加载Ubuntu配置 加载前 加载后 启动项目&#xff1a; 问题&#xff1a; 当时安装JAVA非root账户