RabbitMQ单机部署和集群部署
Posted 夏志121
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RabbitMQ单机部署和集群部署相关的知识,希望对你有一定的参考价值。
目录
一、单机部署
在centos7虚拟机中使用Docker来安装
(1)下载镜像
方式一:在线拉取
docker pull rabbitmq:3-management
方式二:先下载好后,在本地加载
上传到虚拟机后,使用命令加载镜像即可:
docker load -i mq.tar
(2)安装MQ
执行下面的命令来运算MQ容器:
docker run \\
-e RABBITMQ_DEFAULT_USER=itcast \\
-e RABBITMQ_DEFAULT_PASS=123321 \\
--name mq \\
--hostname mq1 \\
-p 15672:15672 \\
-p 5672:5672 \\
-d \\
rabbitmq:3-management
二、集群部署
(1)集群分类
在RabbitMQ的官方文档中,讲述了两种集群的配置方式:
普通模式:普通模式集群不进行数据同步,每个MQ都有自己的队列、数据信息(其它元数据信息如交换机等会同步)。例如我们有2个MQ:mq1,和mq2,如果你的消息在mq1,而你连接到了mq2,那么mq2会去mq1拉取消息,然后返回给你。如果mq1宕机,消息就会丢失。
镜像模式:与普通模式不同,队列会在各个q的镜像节点之间同步,因此你连接到任何一个镜像节点,均可获取到消息。而且如果一个节点宕机,并不会导致数据丢失。不过,这种方式增加了数据同步的带宽消耗。
(2)设置网络
首先,需要让3台MQ互相知道对方
分别在3台机器中,设置/etc/hosts文件,添加如下内容
192.168.150.101 mq1
192.168.150.102 mq2
192.168.150.103 mq3
并在每台机器上测试,是否可用ping通对方
rabbitmq单机和集群部署
rabbitmq单机和集群部署
一、单机部署
1、准备工作
① 服务器相关
服务器名 | IP地址 | 系统 | 服务器架构 |
---|---|---|---|
rabbitmq | 192.103.100.57 | Centos 7.7 | el7.x86_64 |
② 服务器优化
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
关闭selinux
临时关闭SELinux setenforce 0
永久关闭SELinux(重启后生效)编辑/etc/selinux/config 文件,将SELinux的默认值enforcing 改为 disabled,下次开机就不会再启动
③ 系统依赖
RabbitMQ的安装需要Erlang环境,需要先安装ERlang环境并添加到系统环境变量中。需要注意的是版本对应关系,如下图。
我们此次安装的erlang版本是23.2
2、部署安装
2.1 安装依赖环境
安装GCC GCC-C++ Openssl等模块
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel
yum -y install unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel
yum install build-essential unixODBC unixODBC-devel make m4 ncurses-devel tk tc -y
yum -y install fop.noarch
yum -y install ncurses-devel
2.2 安装erlang环境
1)下载erlang解压并重命名,内网环境的话本机下载上传至服务器
cd /data/
wget http://erlang.org/download/otp_src_23.2.tar.gz
tar xvf otp_src_23.2.tar.gz
mv otp_src_23.2 /usr/local/erlang
2)首先是./configure,检查编译环境并配置安装路径,将目录切换到erlang,运行如下命令:
cd /usr/local/erlang
./configure --prefix=/usr/local/erlang --without-javac
3)然后对源代码进行编译并安装,运行如下命令:(会报错Error 2 似乎不影响)
make && make install
4)将erlang环境加入环境变量
vim /etc/profile
export PATH=$PATH:/usr/local/erlang/bin
验证是否安装成功,执行下面的命令,若看到版本号则说明安装成功,如下图
2.3 安装 rabbitmq
1)下载 rabbitmq 内网环境的话本机下载上传至服务器
cd /data/
wget https://github.com/rabbitmq/rabbitmq-server/releases/v3.8.7/rabbitmq-server-generic-unix-3.8.7.tar.xz
2)安装RabbitMQ
进入目录并解压RabbitMQ
cd /data/
tar -xvf rabbitmq-server-generic-unix-3.9.7.tar.xz
3)随后移动至/data/下 改名rabbitmq:
mv rabbitmq_server-3.9.7/ rabbitmq
注意,两台都需安装可使用scp命令复制。
4)其命令文件存在于sbin文件夹下,因此需要将sbin文件夹的路径添加到PATH中:修改/etc/profile
vim /etc/profile
export PATH=/data/rabbitmq/sbin:$PATH
5)执行命令,使得PATH路径更新,rabbitMQ安装成功
source /etc/profile
6)随后启用MQ后台管理方式:
rabbitmq-plugins enable rabbitmq_management
2.4 创建RabbitMQ配置文件并修改
1)RabbitMQ拥有三个配置文件,RabbitMQ配置文件所在位置为/data/rabbitmq/etc/rabbitmq下
cd /data/rabbitmq/etc/rabbitmq
2)新增配置文件 rabbitmq-env.conf (每个节点对应各自的NODENAME)
cat <<EOF > rabbitmq-env.conf
NODENAME=rabbit@rabbitmq1
MNESIA_BASE=/data/rabbitmq/mnesia
LOG_BASE=/data/rabbitmq/log
EOF
### 配置文件参数解释如下:
NODENAME=rabbit@rabbitmq1 #节点名字,全局唯一
MNESIA_BASE=/data/rabbitmq/mnesia #消息落地存放位置
LOG_BASE=/data/rabbitmq/log #日志位置
2.5 优化相关参数
rabbitmq.conf配置优化
vm_memory_high_watermark, 0.40,
#最大使用内存40%,erlang开始GC
#(vm_memory_high_watermark:内存阈值,默认为0.4。意思为物理内存的40%。40%的内存并不是内存的最大的限制,它是一个发布的节制,当达到40%时Erlang会做GC。
# Erlang GC 在最坏情况下会消耗一倍的内存。最坏的情况时使用)
vm_memory_high_watermark_paging_ratio, 0.8,
#32G内存,32*0.8*0.2时开始持久化磁盘,如机器内存16G,当RABBITMQ占用内存1.28G(16*0.4*0.2)时把内存数据放到磁盘。
disk_free_limit, "10GB",
#磁盘使用量剩余10G时,不收发消息
2.6 添加RabbitMQ用户(新建用户三个mq都需要)
配置文件添加并修改过后,需要重启RabbitMQ后并创建用户,先用kill命令杀掉所有RabbitMQ的进程,然后启动mq(以守护进程启动)
rabbitmq-server -detached (忽略警告)
创建用户并加入用户组:(admin为用户名,hanweb为密码,请自行更换强度高的用户名密码)
rabbitmqctl add_user admin Bjwl_1912
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
rabbitmqctl set_user_tags admin administrator
运行命令查看所有用户
rabbitmqctl list_users
二、集群部署
1、准备工作
① 服务器相关(服务器优化 和 系统依赖跟单机一致)
服务器名 | IP地址 | 系统 | 服务器架构 |
---|---|---|---|
rabbitmq1 | 192.103.100.47 | Centos 7.7 | el7.x86_64 |
rabbitmq2 | 192.103.100.49 | Centos 7.7 | el7.x86_64 |
rabbitmq3 | 192.103.100.50 | Centos 7.7 | el7.x86_64 |
② 所有服务器配置 hosts
vim /etc/hosts
输入:
192.103.100.47 rabbitmq1
192.103.100.49 rabbitmq2
192.103.100.50 rabbitmq3
除了 rabbitmq-env.conf 需要配置各自节点名称之外,其他步骤同单机一致
2、添加RabbitMQ至集群
2.1 注意事项
现在我们两台按照上面的步骤做完之后,可以建立集群了。需要注意的是,以上步骤的顺序很重要,
1、erlang环境安装后需配置环境变量并且需要注意版本是否对应。
2、防火墙 seliunx 是否关闭
3、若两个节点不在一个服务器上,hosts是否配置完成
4、RabbitMQ解压后,将sbin目录添加至PATH
5、RabbitMQ的配置文件是否正确配置
2.2 先将其他两个节点mq服务停掉
rabbitmqctl stop_app
2.3 配置 erlang.cookie
将三台mq的.erlang.cookie文件内容设置相同,该文件一般在用户目录下。若未给erlang设置用户,则该文件就在/root下,
先给该文件赋权为400,该文件必须为只读才可创建集群,即
chmod 400 .erlang.cookie然后将赋权后的该文件复制到另外一台相同目录下并替换原有文件。注意,替换后需检查该文件权限是否正确,若有变化需重新赋权。
scp .erlang.cookie root@192.103.100.49:/root/
scp .erlang.cookie root@192.103.100.50:/root/
2.4 后台启动其他两台mq服务
rabbitmq-server start &
**注意:**若启动报下列错,说明端口被占用
could not bind to distribution port 25672, it is in use by another node: rabbit@rabbitmq1
解决方法:
1)先使用ss -tnlp 查看是否有25672端口在使用;
2)然后使用kill -9 结束占用的程序即可
2.5 执行加入集群命令
停止mq节点rabbit@rabbitmq2和mq节点rabbit@rabbitmq3节点,并分别执行加入集群命令。
注意这边的停止mq节点并非停止mq进程,不可以直接kill掉mq进程!!
rabbit@rabbitmq2执行命令添加磁盘节点:
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbitmq1
rabbitmqctl start_app
rabbit@rabbitmq3执行命令添加内存节点:
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@rabbitmq1
rabbitmqctl start_app
2.6 集群创建成功后查看状态
rabbitmqctl cluster_status
可以看到集群状态,三个节点,两个disc节点和一个ram节点。
以上是关于RabbitMQ单机部署和集群部署的主要内容,如果未能解决你的问题,请参考以下文章