集群模式

路由模式

配置代理

假设3台服务器都无法访问外网,使用跳板机做访问代理(如果可以访问外网,可以跳过该步骤)

proxy={proxy_address}

export https_proxy=$proxy
export http_proxy=$proxy

安装 & 配置环境

服务器分别命名mq1, mq2, mq3

服务器 ip
mq1 192.168.0.111
mq2 192.168.0.112
mq3 192.168.0.113

下面很多地方会用到hostname来标识节点名称,所以在每台服务器上配置一下hosts

mq1=192.168.0.111
mq2=192.168.0.112
mq3=192.168.0.113

cat << EOF >> /etc/hosts
$mq1    mq1
$mq2    mq2
$mq3    mq3
EOF

在每台服务器上安装好rabbitmq-server服务

cat << EOF > /etc/yum.repos.d/rabbitmq-erlang.repo
[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/21/el/7
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1
EOF
yum install -y socat erlang

wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.7/rabbitmq-server-3.7.7-1.el7.noarch.rpm -O mq.rpm
rpm -Uvh mq.rpm && rm -f mq.rpm

mkdir /etc/systemd/system/rabbitmq-server.service.d/
cat << EOF > /etc/systemd/system/rabbitmq-server.service.d/limits.conf
[Service]
LimitNOFILE=300000
EOF

systemctl enable rabbitmq-server
service rabbitmq-server start
rabbitmq-plugins enable rabbitmq_management

集群组建

  • 同步cookie

mq1上执行

scp /var/lib/rabbitmq/.erlang.cookie mq2:
scp /var/lib/rabbitmq/.erlang.cookie mq3:

mq2, mq3上执行

chown rabbitmq:rabbitmq .erlang.cookie
chmod 400 .erlang.cookie
mv -f .erlang.cookie /var/lib/rabbitmq/
  • 加入集群

在mq2, mq3上执行

rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@mq1
rabbitmqctl start_app

# 验证
rabbitmqctl cluster_status

rabbitmq的日志存放在/var/logs/rabbitmq目录里,如果遇到意外错误,查看日志排查原因

  • 设置策略

任意节点执行如下代码则切换到集群模式(如果采用系统默认的路由模式,可以跳过此步)

rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

创建用户

任意节点执行

username=dingding
password=dingding1234

# 添加用户
rabbitmqctl add_user ${username} ${password}

# 加入管理员
rabbitmqctl set_user_tags ${username} administrator

# 对根目录设置消费权限
rabbitmqctl set_permissions -p / ${username} ".*" ".*" ".*"

LB

建议将mq1, mq2, mq3写在 /etc/hosts里面

# /etc/haproxy/haproxy.cfg
listen  mq *:5672
    mode tcp
    balance     roundrobin
    timeout client  3h
    timeout server  3h
    option          clitcpka
    server _1 mq1:5672 check inter 5s rise 2 fall 3
    server _2 mq2:5672 check inter 5s rise 2 fall 3
    server _3 mq3:5672 check inter 5s rise 2 fall 3
listen mq-web *:15672
    mode http
    balance     roundrobin
    server _1 mq1:15672
    server _2 mq2:15672
    server _3 mq3:15672