RabbitMQ的环境搭建

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账户
![image.png](https://img-blog.csdnimg.cn/img_convert/9e6808fa823c1216a859c10b44d71cff.png#align=left&display=inline&height=364&margin=[object Object]&name=image.png&originHeight=631&originWidth=979&size=57579&status=done&style=none&width=564)

2.RabbitMQ集群环境搭建

服务器iphostnamerabbitmq节点名称节点说明
10.168.5.37ubuntu1rabbit1rabbitmq master
10.168.5.38ubuntu2rabbit2rabbitmq slave
10.168.5.39ubuntu3rabbit3rabbitmq 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

版权声明:本文为tyhp1原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。