RabbitMQ3.8.9安装和集群搭建

centos7 RABBITMQ 安装和集群搭建

一.安装erlang

1.安装依赖

yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto perl wget gtk2-devel binutils-devel

2.下载安装包

在/usr/local下载

cd /usr/local
wget http://erlang.org/download/otp_src_23.2.tar.gz

或者去erlang官网:https://www.erlang.org/downloads ,下载1

3.解压压缩包

tar -zxvf otp_src_23.2.tar.gz

创建erlang文件夹

mkdir erlang

切换目录

cd otp_src_23.2

4.配置安装路径

./configure --prefix=/usr/local/erlang

在这里插入图片描述

出现这个警告可以忽略直接

make install

5.添加环境变量

echo 'export PATH=$PATH:/usr/local/erlang/bin' >> /etc/profile

刷新环境变量

source /etc/profile

6.测试结果

输入erl 可以查看到
在这里插入图片描述
此时erlang环境安装成功

二.RabbitMq 安装

首先进入rabbitmq官网 https://www.rabbitmq.com

查看erlang版本和rabbitmq版本关系
在这里插入图片描述
从官网看到最新的3.8.9版本放弃了erlang21.3的支持,最低支持22.3版本

1.下载安装包

打开官网https://www.rabbitmq.com/download.html

下载Linux二进制版本

在这里插入图片描述

2.解压文件

将下载的文件上传到/usr/local文件夹下,并解压文件

xz -d rabbitmq-server-generic-unix-3.8.9.tar.xz
tar -xvf rabbitmq-server-generic-unix-3.8.9.tar

3.修改环境变量

echo 'export PATH=$PATH:/usr/local/rabbitmq_server-3.8.9/sbin' >> /etc/profile
source /etc/profile

4启动rabbitmq

rabbitmq-server -detached

5.查看状态

rabbitmqctl status

在这里插入图片描述
此时已经启动成功

6.开启web插件

rabbitmq-plugins enable rabbitmq_management

在这里插入图片描述

7.开放防火墙端口

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

刷新防火墙配置

firewall-cmd --reload

此时可以登录http://localhost:15672/ 查看

默认账号密码:guest guest(这个账号只允许本机访问)

如果不是本机会提示在这里插入图片描述

8.添加用户

rabbitmqctl add_user admin 654321

9.用户授权

rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

​ 最后要设置tag ,不设置tag也无法登录。

rabbitmqctl set_user_tags admin administrator

10.常见错误

在102机器上启动时报错

Error: unable to perform an operation on node 'rabbit@localhost'. Please see diagnostics information and suggestions below.

Most common reasons for this are:

 * Target node is unreachable (e.g. due to hostname resolution, TCP connection or firewall issues)
 * CLI tool fails to authenticate with the server (e.g. due to CLI tool's Erlang cookie not matching that of the server)
 * Target node is not running

In addition to the diagnostics info below:

 * See the CLI, clustering and networking guides on https://rabbitmq.com/documentation.html to learn more
 * Consult server logs on node rabbit@localhost
 * If target node is configured to use long node names, don't forget to use --longnames with CLI tools

DIAGNOSTICS
===========

attempted to contact: [rabbit@localhost]

rabbit@localhost:
  * connected to epmd (port 4369) on localhost
  * epmd reports: node 'rabbit' not running at all
                  no other nodes on localhost
  * suggestion: start the node

Current node details:
 * node name: 'rabbitmqcli-7572-rabbit@localhost'
 * effective user's home directory: /root
 * Erlang cookie hash: Iggc1bCk4xncAKHjiw3nbg==


查看日志,默认目录在/usr/local/rabbitmq_server-3.8.9/var/log/rabbitmq/log/crash.log

打开日志可以查看到

2020-12-24 14:13:13 =SUPERVISOR REPORT====
     Supervisor: {<0.688.0>,tcp_listener_sup}
     Context:    start_error
     Reason:     {shutdown,{failed_to_start_child,ranch_acceptors_sup,{listen_error,{acceptor,{0,0,0,0,0,0,0,0},5672},eaddrinuse}}}
     Offender:   [{pid,undefined},{id,{ranch_listener_sup,{acceptor,{0,0,0,0,0,0,0,0},5672}}},{mfargs,{ranch_listener_sup,start_link,[{acceptor,{0,0,0,0,0,0,0,0},5672},ranch_tcp,#{connection_type => supervisor,handshake_timeout => 5000,max_connections => infinity,num_acceptors => 10,socket_opts => [{ip,{0,0,0,0,0,0,0,0}},{port,5672},inet6,{backlog,128},{nodelay,true},{linger,{true,0}},{exit_on_close,false}]},rabbit_connection_sup,[]]}},{restart_type,permanent},{shutdown,infinity},{child_type,supervisor}]

Reason 说明监听的5672端口被占用,发现本机安装了ActiveMq,关闭activemq 即可启动。

三.集群配置

1.cookie 文件位置:

在UNIX系统上,cookie通常位于/var/lib/rabbitmq/.erlang.cookie(由服务器使用)和$ HOME / .erlang.cookie(由CLI工具使用)中。请注意,由于$ HOME的值因用户而异,因此有必要为每个将使用CLI工具的用户放置cookie文件的副本。这适用于非特权用户和root。

如果我们使用解压缩安装方式(二进制安装或者编译安装),那么该文件存在位置为 H O M E 目 录 下 。 即 HOME目录下。即 HOMEHOME/.erlang.cookie。如果我们使用root安装,则位置为:/root/.erlang.cookie,其他用户为/home/用户名/.erlang.cookie。

2.节点名称的修改

配置集群时,节点之间的名字不能相同,默认情况下:

Default:

  • Unix*: rabbit@$HOSTNAME
  • Windows: rabbit@%COMPUTERNAME%
RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit01 rabbitmq-server -detached

RABBITMQ_NODENAME 代表@前面的节点名称,默认就是rabbit。

查看rabbit01节点状态的命令为,不加-n 默认查看RABBITMQ_NODENAME=rabbit节点的状态

rabbitmqctl status -n rabbit01

单机多节点部署时就可以更改node_name 和 node_port实现。

修改主机名称:

hostnamectl set-hostname sit168.localdomain

所有服务器的hosts文件中添加另外其他服务器的hostname

echo 192.168.2.100 sit100 >> /etc/hosts
echo 192.168.2.101 sit101 >> /etc/hosts

1.停止命令

rabbitmqctl stop

2. 以集群命令分别启动三台RabbitMQ服务

rabbitmq-server -detached

3. 将其他2个slave加入集群

#分别在 2台子节点中 执行该命令
rabbitmqctl stop_app
# => Stopping node rabbit@sit100 ...done.

rabbitmqctl reset
# => Resetting node rabbit@sit100 ...

rabbitmqctl join_cluster rabbit@sit168
# => Clustering node rabbit@sit100 with [rabbit@sit168] ...done.

rabbitmqctl start_app
# => Starting node rabbit@sit100 ...done.

在rabbitmqctl join_cluster rabbit@rabbit1出现错误如下:

* connected to epmd (port 4369) on sit168
* epmd reports node 'rabbit' uses port 25672 for inter-node and CLI tool traffic 

防火墙开放4369和25672端口即可。

查看集群状态rabbitmqctl cluster_status
在这里插入图片描述

查看管理工作台:
在这里插入图片描述

创建 RAM 节点

We can declare a node as a RAM node when it first joins the cluster. We do this with rabbitmqctl join_cluster as before, but passing the --ram flag:

# on rabbit2
rabbitmqctl stop_app
# => Stopping node rabbit@rabbit2 ...done.

rabbitmqctl join_cluster --ram rabbit@rabbit1
# => Clustering node rabbit@rabbit2 with [rabbit@rabbit1] ...done.

rabbitmqctl start_app
# => Starting node rabbit@rabbit2 ...done.

4.其他命令

#在主节点上 操作要移除的集群节点
rabbitmqctl forget_cluster_node rabbit@sit100

#查看集群状态
rabbitmqctl cluster_status

#在要修改的集群中 修改集群名称
rabbitmqctl set_cluster_name xxx
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RabbitMQ本身并不直接支持分布式事务,但是可以通过一些机制来实现分布式事务。 一种常用的方式是使用两阶段提交(Two-Phase Commit,简称2PC)协议来实现分布式事务。在这种方案中,事务的协调者(coordinator)会与多个参与者(participants)进行通信,以确保所有参与者在提交或者回滚事务时的一致性。 在RabbitMQ中,可以将消息生产者作为事务的协调者,将消息消费者作为参与者。下面是一个简单的示例: 1. 生产者发送消息到RabbitMQ,并开启一个事务。 2. 生产者将消息发送给消费者,并等待消费者返回确认消息。 3. 如果所有的消费者都成功处理了消息,则协调者发送“prepare”消息给所有的参与者。 4. 参与者收到“prepare”消息后,将消息持久化到本地存储,并发送“ready”消息给协调者。 5. 协调者收到所有参与者的“ready”消息后,发送“commit”消息给所有的参与者。 6. 参与者收到“commit”消息后,正式提交事务,并发送确认消息给协调者。 7. 协调者收到所有参与者的确认消息后,完成事务。 需要注意的是,如果任何一个参与者在处理消息时出现异常,协调者将发送“rollback”消息,参与者接收到“rollback”消息后会回滚事务。 这只是一个简单的示例,实际的实现可能需要考虑更多的细节和异常处理。另外,还有其他的分布式事务解决方案,如Saga模式、TCC(Try-Confirm-Cancel)模式等,也可以根据具体需求选择合适的方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值