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 ,下载
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目录下。即 HOME目录下。即HOME/.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