目录
rabbitmq镜像模式下,消息在所有节点上的都存在,故当主节点异常,从节点能自动继续提供服务。此次部署没有引入负载均衡策略,故本质上还是一台服务器提供服务。
服务器A:172.16.11.32部署主节点
服务器B:172.16.11.33部署从节点
操作系统:centos 7
erlang安装包:otp_src_22.3.tar.gz
rabbitmq安装包:rabbitmq-server-generic-unix-3.8.4.tar.xz
普通集群搭建
安装前先设置两台服务的hosts文件信息,后续集群配置时mq之间的通信会基于主机名完成。
#配置hosts文件,配置ip和主机名的映射关系,两台服务器都需要配置
vim /etc/hosts
#新增以下内容
172.16.11.32 mq01
172.16.11.33 mq02
安装erlang
1.下载或上传安装包到服务器
wget http://erlang.org/download/otp_src_22.3.tar.gz
2.解压安装包
tar -xvzf otp_src_22.3.tar.gz
3.安装相关依赖,需要网络畅通
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel
4.新建文件夹,erlang存储位置
mkdir erlang
5.编译环境检查(源码安装:编辑环境检查->编译->安装)
#进入解压后的目录
cd otp_src_22.3
#/app/erlang为新建文件夹位置
./configure --prefix=/app/erlang --without-javac
6. 编译安装
make && make install
7.验证是否安装成功
#进入可执行文件夹bin目录
./bin/erl
#执行以下语句看是否正常输出hello word
io:format("hello world~n", []).
8.配置环境变量
#配置当前用户的环境变量
vim ~/.bashrc
#新增以下内容,指定bin的目录
export PATH=$PATH:/app/erlang/bin
#使环境变量生效
source ~/.bashrc
安装rabbitmq
1.下载或上传安装包
2.直接解压即可
#解压为rabbitmq-server-generic-unix-3.8.4.tar文件
xz -d rabbitmq-server-generic-unix-3.8.4.tar.xz
#再解压tar文件
tar -xvf rabbitmq-server-generic-unix-3.8.4.tar
3.开启web插件管理
#进入mq的sbin目录
cd /app/rabbitmq_server-3.8.4/sbin
#允许使用web插件
./rabbitmq-plugins enable rabbitmq_management
4.启动服务
#启动服务
./rabbitmq-server start
#后台运行模式启动
./rabbitmq-server -detached
5.添加用户
#设置用户名和密码:test/test
rabbitmqctl add_user test test
#将test设置为管理员
rabbitmqctl set_user_tags test administrator
#授权使用"/"虚拟机
rabbitmqctl set_permissions -p / test ".*" ".*" ".*"
加入集群
1.分别启动两台服务器
./rabbitmq-server start
2.在启动状态下,将服务器A上的 .erlang.cookie文件拷贝到服务器B
#网络和权限允许情况下$home/.erlang.cookie
scp /app/zj/.erlang.cookie 172.16.11.33:/app/zj
.erlang.cookie为隐藏文件,可用ll -a查看。如果无法复制,则手动拷贝到另一台服务器,需要确保两边的cookie保持一致,集群依靠cookie通信。复制时可能存在换行符问题(一边有换行符,一边没有。需要改成一致)
3.关闭服务
./rabbitmqctl stop
4.后台启动服务
./rabbitmq-server -detached
5.从节点加入到集群
#rabbitmqctl是客户端命令,stop_app表示只关闭mq服务,不关闭集群
./rabbitmqctl stop_app
#重置
./rabbitmqctl reset
#将从节点加入集群,默认disk磁盘模式
./rabbitmqctl join_cluster rabbit@mq01
#重启mq服务
./rabbitmqctl start_app
设置镜像模式
任意节点执行命令,设置镜像模式
#用法:set_policy {name} {pattern} {definition}
#name: policy的名称,可以自定义
#Pattern: queue的匹配模式(正则表达式) "^"表示所有队列
#ha-mode: 指明镜像队列的模式
#all: 表示在集群中所有的节点上进行镜像
./rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
查看集群状态
./rabbitmqctl cluster_status
springboot连接rabbitmq镜像模式
spring:
rabbitmq:
#指定多个rabbitmq的地址,默认使用第一个主节点地址创建连接,如果主节点异常,则自动切换到从节点
addresses: 172.16.11.32:5672,172.16.11.33:5672
username: test
password: test
#开启发送确认
publisherConfirmType: CORRELATED
#开启发送失败退回
publisherReturns: true
listener:
simple:
#手动应答,开启ack
acknowledge-mode: manual
#是否支持重试
retry:
enabled: true