1.RabbitMQ单机环境搭建
官网:https://www.rabbitmq.com/
版本:3.8.14
Erlang版本: 23.2.3-1
1.1 安装依赖环境
备份sources.list文件:cp /etc/apt/sources.list /etc/apt/sources.list.bak
在/etc/apt/sources.list中,加入如下内容:
# 阿里云源
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
#中科大源
deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
#网易163源
deb http://mirrors.163.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-backports main restricted universe multiverse
然后安装依赖包:
#先更新源
sudo apt update
sudo apt install build-essential libssl-dev libncurses5-dev m4 unixodbc unixodbc-dev libc6
1.2 安装Erlang
下载地址:https://www.erlang-solutions.com/downloads/#
1.2.1 添加存储库条目
要将Erlang Solutions存储库(包括我们用于apt-secure的公钥)添加到您的系统,请调用以下命令:
sudo wget https://packages.erlang-solutions.com/erlang-solutions_2.0_all.deb
sudo dpkg -i erlang-solutions_2.0_all.deb
或者:手动添加存储库条目:
deb https://packages.erlang-solutions.com/ubuntu trusty contrib
deb https://packages.erlang-solutions.com/ubuntu saucy contrib
deb https://packages.erlang-solutions.com/ubuntu precise contrib
1.2.2 添加Erlang solutions公钥
sudo wget https://packages.erlang-solutions.com/ubuntu/erlang_solutions.asc
sudo apt-key add erlang_solutions.asc
1.2.3 安装Erlang
sudo apt update
sudo apt install erlang
1.3 安装Socat
sudo apt install socat
1.4 安装Rabbitmq-Server
方式一(此方式需要翻墙下载相关依赖包不然会很慢,可以翻墙推荐此方式):
sudo curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.deb.sh | sudo bash
sudo apt update
sudo apt install rabbitmq-server
方式二:
下载地址:https://packagecloud.io/rabbitmq/rabbitmq-server
上传:
rabbitmq-server_3.8.14-1_all.deb(ubuntu/focal)
安装:
sudo dpkg -i rabbitmq-server_3.8.14-1_all.deb
1.5 启动
#启动服务
sudo systemctl start rabbitmq-server
#设置开机自启
sudo systemctl enable rabbitqm-server
#停止服务
sudo systemctl stop rabbitmq-server
#重启服务
sudo systemctl restart rabbitmq-server
#查看状态
sudo rabbitmqctl status
注意:如果启动失败,请使用lsof -i:端口命令,查看5672,15672端口是否占用!!!
1.6 开启管理界面及配置
#开启管理界面
rabbitmq-plugins enable rabbitmq_management
1.6.1 开启guest账户访问
在/etc/rabbitmq下,新建rabbitmq.conf,加入如下内容:
loopback_users.guest = false
#重新启动rabbitmq服务
sudo systemctl restart rabbitmq-server
1.6.2 建立admin账户
1.6.2.1 添加admin用户,密码设置为admin
sudo rabbitmqctl add_user admin admin
1.6.2.2 赋予权限
sudo rabbitmqctl set_user_tags admin administrator
1.6.2.3 赋予virtual host中所有资源的配置、写、读权限以便管理其中的资源
sudo rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'
1.6.3 Web管理界面连接
访问地址:http://10.168.5.37:15672/
可以使用刚才建立的admin账户,或者默认的guest账户

2.RabbitMQ集群环境搭建
| 服务器ip | hostname | rabbitmq节点名称 | 节点说明 |
|---|---|---|---|
| 10.168.5.37 | ubuntu1 | rabbit1 | rabbitmq master |
| 10.168.5.38 | ubuntu2 | rabbit2 | rabbitmq slave |
| 10.168.5.39 | ubuntu3 | rabbit3 | rabbitmq slave |
集群架构图:
2.1 修改三个节点hosts文件
在/etc/hosts中,加入如下内容:
10.168.5.37 ubuntu1
10.168.5.38 ubuntu2
10.168.5.39 ubuntu3
2.2 修改各节点的名称
关闭所有的rabbitmq节点:
systemctl stop rabbitmq-server
在/etc/rabbitmq/新建rabbitmq-env.conf文件,加入如下内容:
#节点1就是rabbit1,节点2就是rabbit2,注意不要复制粘贴忘记更改!!!
RABBITMQ_NODENAME=rabbit1
2.3 同步各节点的RabbitMQ的cookie文件
只需要在主节点中执行下面命令:
scp /var/lib/rabbitmq/.erlang.cookie root@ubuntu2:/var/lib/rabbitmq/
2.4 逐个节点启动RabbitMQ服务:
systemctl start rabbitmq-server
2.5 将ubuntu1设为主节点
ubuntu1节点操作:
#停止服务
root@ubuntu1:~# rabbitmqctl -n rabbit1 stop_app
Stopping rabbit application on node rabbit1@ubuntu1 ...
#重置
root@ubuntu1:~# rabbitmqctl -n rabbit1 reset
Resetting node rabbit1@ubuntu1 ...
#启动
root@ubuntu1:~# rabbitmqctl -n rabbit1 start_app
Starting node rabbit1@ubuntu1 ...
ubuntu2节点操作:
#停止服务
root@ubuntu2:~# rabbitmqctl -n rabbit2@ubuntu2 stop_app
Stopping rabbit application on node rabbit2@ubuntu2 ...
#重置
root@ubuntu2:~# rabbitmqctl -n rabbit2@ubuntu2 reset
Resetting node rabbit2@ubuntu2 ...
#加入到主节点ubuntu1,''里面的内容是主节点的主机别名
root@ubuntu2:~# rabbitmqctl -n rabbit2 join_cluster rabbit1@'ubuntu1'
Clustering node rabbit2@ubuntu2 with rabbit1@ubuntu1
#启动服务
root@ubuntu2:~# rabbitmqctl -n rabbit2@ubuntu2 start_app
Starting node rabbit2@ubuntu2 ...
ubuntu3节点操作:
#停止服务
root@ubuntu3:~# rabbitmqctl -n rabbit3@ubuntu3 stop_app
Stopping rabbit application on node rabbit3@ubuntu3 ...
#重置
root@ubuntu3:~# rabbitmqctl -n rabbit3@ubuntu3 reset
Resetting node rabbit2@ubuntu3 ...
#加入到主节点ubuntu1,''里面的内容是主节点的主机别名
root@ubuntu3:~# rabbitmqctl -n rabbit3 join_cluster rabbit1@'ubuntu1'
Clustering node rabbit3@ubuntu3 with rabbit1@ubuntu1
#启动服务
root@ubuntu3:~# rabbitmqctl -n rabbit3@ubuntu3 start_app
Starting node rabbit3@ubuntu3 ...
2.6 查看集群的状态
root@ubuntu1:~# rabbitmqctl cluster_status
....
....
Cluster name: rabbit1@ubuntu1
Disk Nodes
rabbit1@ubuntu1
rabbit2@ubuntu2
Running Nodes
rabbit1@ubuntu1
rabbit2@ubuntu2
Versions
rabbit1@ubuntu1: RabbitMQ 3.8.14 on Erlang 23.2.3
rabbit2@ubuntu2: RabbitMQ 3.8.14 on Erlang 23.2.3
.....
.....
2.7 RabbitMQ镜像集群的配置
上面已经完成RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制。虽然该模式解决一项目组节点压力,但队列节点宕机直接导致该队列无法应用,只能等待重启,所以要想在队列节点宕机或故障也能正常应用,就要复制队列内容到集群里的每个节点,必须要创建镜像队列。
镜像队列是基于普通的集群模式的,然后再添加一些策略,所以得先配置普通集群,然后才能设置镜像队列,我们按照上面集群接着做。
设置镜像队列的方式一:
可用通过开启网页的管理端Admin->Policies的方式:

设置镜像队列的方式二,命令的方式:
rabbitmqctl set_policy ty2 “^” ‘{“ha-mode”:“all”}’

- Name:策略名称。
- Pattern:匹配规则,如果是匹配所有的队列,是^。
- Definition:使用ha-mode模式中all,也是同步所有交换机以及队列。
3 负载均衡-HAProxy
3.1 安装HAProxy
sudo apt-get install haproxy
3.2 配置HAProxy
配置文件路径:/etc/haproxy/haproxy.cfg
先备份:
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg_bak
3.2.1 HAProxy的具体配置
清空/etc/haproxy/haproxy.cfg里面的内容,创建/usr/local/haproxy,/usr/local/haproxy/run/目录
加入如下配置:
#全局配置
global
#日志输出配置,所有日志都记录在本机,通过local0输出
log 127.0.0.1 local0 info
#最大连接数
maxconn 100000
#改变当前的工作目录
chroot /usr/local/haproxy
#以指定的UID运行haproxy进程
uid 99
#以指定的GID运行haproxy进程
gid 99
#以守护进程方式运行haproxy
daemon
#debug
#当前进程pid文件
pidfile /usr/local/haproxy/run/haproxy.pid
#默认配置
defaults
#应用全局的日志配置
log global
#默认的模式mode{tcp|http|health}
#tcp是4层,http是7层,health只返回OK
mode tcp
#日志类别tcplog
option tcplog
#不记录健康检查日志信息
option dontlognull
#3次失败则认为服务不可能
retries 3
#每个进程可用的最大连接数
maxconn 2000
#连接超时
timeout connect 5s
#客户端超时
timeout client 120s
#服务端超时
timeout server 120s
#绑定配置
listen rabbitmq_cluster
bind 0.0.0.0:5671
#配置TCP模式
mode tcp
#加权轮询
balance roundrobin
#RabbitMQ集群节点配置
server rabbit1 10.168.5.37:5672 check inter 5000 rise 2 fall 3 weight 1
server rabbit2 10.168.5.38:5672 check inter 5000 rise 2 fall 3 weight 1
server rabbit3 10.168.5.39:5672 check inter 5000 rise 2 fall 3 weight 1
#haproxy监控页面地址
listen monitor
bind 0.0.0.0:8100
mode http
option httplog
stats enable
stats uri /status
stats refresh 5s
在上面的配置中“listen rabbitmqcluster bind 0.0.0.0:5671”这里定义了客户端连接IP地址和端口号。这里配置的负载均衡算法是roundrobin—加权轮询。与配置RabbitMQ集群负载均衡最为相关的是“ server rmqnode1 ip1:5672 check inter 5000 rise 2 fall 3 weight 1”这种,它标识并且定义了后端RabbitMQ的服务。主要含义如下:
(a)“server”部分:定义HAProxy内RabbitMQ服务的标识;
(b)“ip1:5672”部分:标识了后端RabbitMQ的服务地址;
©“check inter”部分:表示每隔多少毫秒检查RabbitMQ服务是否 可用;
(d)“rise”部分:表示RabbitMQ服务在发生故障之后,需要多少次健康检查才能被再次确认可用;
(e)“fall”部分:表示需要经历多少次失败的健康检查之后,HAProxy才会停止使用此RabbitMQ服务。
3.2.2 启动HAProxy负载
#重启服务
systemctl restart haproxy
#启动服务
systemctl start haproxy
3.2.2 查看haproxy进程状态
ps -ef | grep haproxy