提前准备
rabbitmq-server-generic-unix-3.12.12.tar.xz
otp_src_26.2.1.tar.gz
3台服务器
#添加hosts文件
vim /etc/hosts
服务器1的ip 对应机器的主机名
服务器2的ip 对应机器的主机名
服务器3的ip 对应机器的主机名
#切换yum源
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
#其他系统可通过此网站查看
https://developer.aliyun.com/mirror/epel?spm=a2c6h.13651102.0.0.3e221b114WgcJe
yum clean all
yum install -y make gcc gcc-c++ m4 openssl openssl-devel ncurses-devel unixODBC unixODBC-devel java java-devel
#安装依赖
mkdir /data
#将两个tar包上传到此目录
#下面进编译安装erlang
tar -xf otp_src_26.2.1.tar.gz
cd otp_src_26.2.1
./configure --prefix=/opt/erlang
make
make install
#编译
#如果出现以下关键字报错
wxWidgets must be installed on your system.
解决方法为替换epel源 上面已经替换过了
yum install –y wxWidgets-devel
mv /usr/bin/wx-config-3.0 /usr/bin/wx-config
#再次编译即可
#编译完成后 需配置环境变量
vim /etc/profile
export PATH=$PATH:/opt/erlang/bin
export PATH=$PATH:/data/rabbitmq_server-3.12.12/sbin
#添加以上两行保存退出
source /etc/profile
erl -version
#查看是否生效
cd /data/
tar -xf rabbitmq-server-generic-unix-3.12.12.tar.xz
cd rabbitmq_server-3.12.12
###################################################
以上操作3台服务器都需要操作
###################################################
#取其中一台服务器这里称为A服务器,启动rabbitmq服务
rabbitmq-server -detached
rabbitmqctl status
#查看状态
#将A服务器/root目录下.erlang.cookie 文件scp给其他两台服务器
scp /root/.erlang.cookie root@服务器2:/root
scp /root/.erlang.cookie root@服务器3:/root
#现在可以启动另外两台服务器的rabbitmq服务
rabbitmq-server -detached
rabbitmqctl status
#查看状态
rabbitmqctl stop_app
#停止节点
rabbitmqctl join_cluster rabbit@集群名称
#加入服务器A的节点组成集群
#节点名称需要去A服务器查询
#A服务器执行
rabbitmqctl cluster_status
#输出的内容前两行应该有就
#另外两台服务器执行完加入A节点的命令后,组成了一个集群,可在A服务器执行查看
rabbitmqctl cluster_status
#如果输出的信息看不到三个几点,需将执行加入命令的两台服务器的rabbitmq重启一下
rabbitmqctl stop
rabbitmq-server -detached
#服务器A重新执行查看命令 即可看到
rabbitmqctl cluster_status
#下面进行配置用户名密码权限的操作 只需在三台服务器中一台执行即可
rabbitmqctl add_user admin 123456
#创建用户名为admin 密码为123456
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
#给admin客户最大权限
rabbitmqctl set_user_tags admin administrator
#给admin加入管理员权限
rabbitmqctl set_permissions -p '/' admin '.' '.' '.' -n rabbit@集群名称
#下面进行开启web页面 以及mqtt协议
abbitmq-plugins enable rabbitmq_management
#开启web页面
rabbitmq-plugins enable rabbitmq_mqtt rabbitmq_web_mqtt rabbitmq_web_stomp rabbitmq_web_stomp_examples
#开启mqtt协议 和 websocket协议
#开启镜像模式
#在任意一个节点上执行:
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all" , "ha-sync-mode":"automatic"}'
参数含义:
pattern: 队列名字的通配符
ha-mode:镜像队列提供了三种模式:
all:全部的节点队列都做镜像;
exactly:指定镜像队列的节点最高镜像数量;
nodes:只为指定具体节点配置镜像队列;
ha-sync-mode :节点之前的同步模式。有自动和手动两种,默认是手动,这里设置为自动。
或者指定vhost:
rabbitmqctl set_policy -p demo ha-all "^" '{"ha-mode":"all" , "ha-sync-mode":"automatic"}'
将所有队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态保持一直。
到这里,RabbitMQ 高可用集群就已经搭建好了,最后一个步骤就是搭建均衡器。
策略名称:自定义
“^”:匹配所有队列
ha-sync-mode: 默认为手动,可以配置为自动,区别在于,如果是自动做镜像回复,则该队列会处于不可用状态直到同步完成。
======================================================================================
#开启这两个协议后 需要重启集群
rabbitmqctl stop
rabbitmq-server -detached
#重启后 执行查看节点状态
rabbitmqctl cluster_status
#最后浏览器访问
ip:15672
输入账号admin 密码123456 即可
rabbitmqctl set_vm_memory_high_watermark 0.8
#设置rabbitmq最大内存为80%
参考文章: