目录

普通集群搭建

安装erlang

安装rabbitmq

加入集群

设置镜像模式

springboot连接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