linux安装rabbitMQ

docker安装rabbitmq:  Docker系列之RabbitMQ安装部署教程 - 腾讯云开发者社区-腾讯云 (tencent.com)  admin admin

安装延迟插件: rabbitmq版本3.8及以下   docker pull rabbitmq:3.8.11-management

1. 首先我们将刚下载下来的rabbitmq_delayed_message_exchange-3.8.0.ez文件上传到RabbitMQ所在服务器,下载地址:https://www.rabbitmq.com/community-plugins.html

2. 切换到插件所在目录,执行 docker cp rabbitmq_delayed_message_exchange-3.8.0.ez rabbitmq:/plugins 命令,将刚插件拷贝到容器内plugins目录下

3. 执行 docker exec -it rabbitmq /bin/bash 命令进入到容器内部,并 cd plugins 进入plugins目录

4. 执行 ls -l|grep delay  命令查看插件是否copy成功

5. 在容器内plugins目录下,执行 rabbitmq-plugins enable rabbitmq_delayed_message_exchange  命令启用插件

6. exit命令退出RabbitMQ容器内部,然后执行 docker restart rabbitmq 命令重启RabbitMQ容器

 

1.下载Erlang的rpm包

RabbitMQ是Erlang语言编写,所以Erang环境必须要有,注:Erlang环境一定要与RabbitMQ版本匹配:

https://www.rabbitmq.com/which-erlang.html

Erlang下载地址:Releases · rabbitmq/erlang-rpm (github.com)(根据自身需求及匹配关系,下载对应rpm包)

2.下载socat的rpm包

rabbitmq安装依赖于socat,所以需要下载socat。

socat下载地址:Index of /CentOS/7/x86_64 (iotti.biz)

3.下载RabbitMQ的rpm包

RabbitMQ下载地址:Installing on RPM-based Linux (RedHat Enterprise Linux, CentOS, Fedora, openSUSE) — RabbitMQ(根据自身需求及匹配关系,下载对应rpm包)

 

1.安装Erlang、Socat、RabbitMQ

①rpm -ivh erlang-21.3.8.9-1.el7.x86_64.rpm

②rpm -ivh socat-1.7.3.2-1.el6.lux.x86_64.rpm

在安装rabbitmq之前需要先安装socat,否则,报错。

可以采用yum安装方式:yum install socat,我们这里采用rpm安装方式

③rpm -ivh rabbitmq-server-3.8.1-1.el7.noarch.rpm 

安装目录   /usr/lib/rabbitmq/lib/rabbitmq_server-3.10.0

2.启用管理插件

rabbitmq-plugins enable rabbitmq_management

3.启动RabbitMQ

systemctl start rabbitmq-server.service

systemctl status rabbitmq-server.service

systemctl restart rabbitmq-server.service

systemctl stop rabbitmq-server.service

4.查看进程

ps -ef | grep rabbitmq

 测试

  • 关闭防火墙:systemctl stop firewalld.service
  • 在web浏览器中输入地址:http://虚拟机ip:15672/

输入默认账号密码: guest : guest,guest用户默认不允许远程连接

增加自定义账号

l  添加管理员账号密码:rabbitmqctl add_user admin admin

l  分配账号角色:rabbitmqctl set_user_tags admin administrator

l  修改密码:rabbitmqctl change_password admin 123456

l  查看用户列表:rabbitmqctl list_users

使用新账号登录,成功界面

管理界面标签页介绍

l  overview:概览

l  connections:无论生产者还是消费者,都需要与RabbitMQ建立连接后才可以完成消息的生产和消费,在这里可以查看连接情况

l  channels:通道,建立连接后,会形成通道,消息的投递获取依赖通道。

l  Exchanges:交换机,用来实现消息的路由

l  Queues:队列,即消息队列,消息存放在队列中,等待消费,消费后被移除队列。

端口:

l  5672:rabbitMq的编程语言客户端连接端口

l  15672:rabbitMq管理界面端口

l  25672:rabbitMq集群的端口

卸载

l  rpm -qa | grep rabbitmq

l  rpm -e rabbitmq-server

 

 

RabbitMQ集群搭建

主要参考官方文档:https://www.rabbitmq.com/clustering.html

首先确保RabbitMQ运行没有问题

  start rabbitmq-server.service  status rabbitmq-server.service

停止rabbitmq服务  systemctl stop rabbitmq-server.service

 

启动三个节点做集群演示:

由于web管理插件端口占用,所以还要指定其web插件占用的端口号。

  RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit1 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15672}]"  rabbitmq-server -detached

  RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=rabbit2 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]"  rabbitmq-server -detached

  RABBITMQ_NODE_PORT=5674 RABBITMQ_NODENAME=rabbit3 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]"  rabbitmq-server -detached

启动三个节点后,分别访问三个节点,后台管理页面,看看是否OK.

停止服务命令:

rabbitmqctl -n rabbit1 stop

rabbitmqctl -n rabbit2 stop

rabbitmqctl -n rabbit3 stop

rabbit1操作作为主节点:

rabbitmqctl -n rabbit1 stop_app  

rabbitmqctl -n rabbit1 reset

 rabbitmqctl -n rabbit1 start_app

rabbit2操作为从节点:

rabbitmqctl -n rabbit2 stop_app

rabbitmqctl -n rabbit2 reset

rabbitmqctl -n rabbit2 join_cluster rabbit1

rabbitmqctl -n rabbit2 start_app

rabbit3操作为从节点:

rabbitmqctl -n rabbit3 stop_app

rabbitmqctl -n rabbit3 reset

rabbitmqctl -n rabbit3 join_cluster rabbit1

rabbitmqctl -n rabbit3 start_app

 

查看集群状态:   

  rabbitmqctl -n rabbit1 cluster_status

 

web监控:198.168.6.100:15672    本地登录

 

集群管理:

rabbitmqctl join_cluster {cluster_node} [–ram]

将节点加入指定集群中。在这个命令执行前需要停止RabbitMQ应用并重置节点。

rabbitmqctl cluster_status

显示集群的状态。

rabbitmqctl change_cluster_node_type {disc|ram}

修改集群节点的类型。在这个命令执行前需要停止RabbitMQ应用。

rabbitmqctl forget_cluster_node [–offline]

将节点从集群中删除,允许离线执行。

rabbitmqctl update_cluster_nodes {clusternode}

在集群中的节点应用启动前咨询clusternode节点的最新信息,并更新相应的集群信息。这个和join_cluster不同,它不加入集群。考虑这样一种情况,节点A和节点B都在集群中,当节点A离线了,节点C又和节点B组成了一个集群,然后节点B又离开了集群,当A醒来的时候,它会尝试联系节点B,但是这样会失败,因为节点B已经不在集群中了。

rabbitmqctl cancel_sync_queue [-p vhost] {queue}

取消队列queue同步镜像的操作。

rabbitmqctl set_cluster_name {name}

设置集群名称。集群名称在客户端连接时会通报给客户端。Federation和Shovel插件也会有用到集群名称的地方。集群名称默认是集群中第一个节点的名称,通过这个命令可以重新设置。

 

RabbitMQ镜像集群配置

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

镜像队列是基于普通的集群模式的,然后再添加一些策略,所以你还是得先配置普通集群,然后才能设置镜像队列,我们就以上面的集群接着做。

设置的镜像队列可以通过开启的网页的管理端Admin->Policies,也可以通过命令



Name:策略名称

Pattern:匹配的规则,如果是匹配所有的队列,是^

Definition:使用ha-mode模式中的all,也就是同步所有匹配的队列。问号链接帮助文档





负载均衡-HAProxy

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案,包括Twitter,Reddit,StackOverflow,GitHub在内的多家知名互联网公司在使用。HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。

安装HAProxy

//下载依赖包

yum install gcc vim wget

//下载haproxy

OpenPKG Project: Download

//上传haproxy源码包; -C解压到指定的目录

tar -zxvf haproxy-1.6.5.tar.gz -C /usr/local

//进入目录、进行编译、安装

cd /usr/local/haproxy-1.6.5

// make 表示编译;TARGET=linux31 表示CentOS7系统;PREFIX=/usr/local/haproxy指定安装路径

// TARGET=linux310,内核版本,使用uname -r查看内核,如:3.10.0-514.el7,此时该参数就为linux310;

make TARGET=linux310 PREFIX=/usr/local/haproxy

make install PREFIX=/usr/local/haproxy

mkdir /etc/haproxy

//添加用户组:-r 创建一个系统组;-g 组ID

groupadd -r -g 149 haproxy

//添加用户:-g 新账户组的名称;-r 创建一个系统用户;-s 新用户的登录shell; -u 新账户的用户ID

useradd -g haproxy -r -s /sbin/nologin -u 149 haproxy

//创建haproxy配置文件

vim /etc/haproxy/haproxy.cfg

 

配置HAProxy

配置文件路径:/etc/haproxy/haproxy.cfg
复制代码
#全局配置 
global
    #日志输出配置,所有日志都记录在本机,通过local0输出
    log 127.0.0.1 local0 info
    #最大连接数
    maxconn 5120
    #改变当前的工作目录
    chroot /usr/local/haproxy
    #以指定的UID运行haproxy进程
    uid 99
    #以指定的GID运行haproxy进程
    gid 99
    #以守护进程方式运行haproxy
    daemon
    quiet
    nbproc 20
    #当前进程PID文件
    pidfile /var/run/haproxy.pid
#默认配置
defaults
    #应用全局的日志配置
    log global
    #默认的模式mode{tcp|http|health}
    mode tcp
    #日志类别
    option tcplog
    #不记录检查检查日志信息
    option dontlognull
    #3次失败则认为服务不可用
    retries 3
    option redispatch
    #每个进程可用的最大连接数
    maxconn 2000
    #连接超时
    contimeout 5s
    #客户端超时
    clitimeout 60s
    #服务端超时
    srvtimeout 15s    
#绑定配置
listen rabbitmq_cluster
    bind *:5677
    #配置TCP模式
    mode tcp
    #balance url_param userid
    #balance url_param session_id check_post 64
    #balance hdr(User-Agent)
    #balance hdr(host)
    #balance hdr(Host) use_domain_only
    #balance rdp-cookie
    #balance leastconn
    #balance source //ip
    #简单的轮询
    balance roundrobin
    #server rabbit1 定义服务内部标识,
    #127.0.0.1:5672 服务连接IP和端口,
    #check inter 5000 定义每隔多少毫秒检查服务是否可用,
    #rise 2 服务故障后需要多少次检查检查才能被再次确认可用,
    #fall 2 经历多次失败的检查检查后,haproxy才会停止使用此服务
    #weight 1 定义服务权重
    server rabbit1 192.168.6.100:5672 check inter 5000 rise 2 fall 2 weight 1
    server rabbit2 192.168.6.100:5673 check inter 5000 rise 2 fall 2 weight 1
    server rabbit3 192.168.6.100:5674 check inter 5000 rise 2 fall 2 weight 1
#haproxy监控页面地址
listen stats
    bind 192.168.6.100:8100
    mode http
    option httplog
    stats enable
    stats uri /rabbitmq-stats
    stats refresh 5s
复制代码

 



启动HAproxy负载

/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg

//查看haproxy进程状态

ps -ef | grep haproxy

访问如下地址对mq节点进行监控  http://192.168.6.100:8100/rabbitmq-stats

 

springboot yml文件中访问mq集群地址:

spring: 
  rabbitmq: 
    host: 192.168.6.100
    port: 5677
    username: admin
    password: 123456
  virtual-host: /
  #addresses: 192.168.6.100:5672,192.168.6.100:5673,192.168.6.100:5674

 




RabbitMQ延迟消息基于插件x-delayed-message

rabbitmq版本3.7及以下

下载插件

地址:Releases · rabbitmq/rabbitmq-delayed-message-exchange · GitHub

 

下载的插件放到rabbitmq安装目录的plugins里面,重启rabbitmq就可以了。

 

下载  .ez 文件

/usr/lib/rabbitmq/lib/rabbitmq_server-3.10.0/plugins


启用插件,切换至sbin目录下,执行以下命令

  rabbitmq-plugins enable rabbitmq_delayed_message_exchange

 

 

 

 

systemctl restart rabbitmq-server.service




 

 

















posted @   坤王  阅读(644)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示