《Linux 部署RabbitMq单机版和集群版》

自己搭建遇到的坑,记录下,防止下次重新搭建又要弄半天。
有2种方式,源码版和docker版,先说下第一种源码版

Centos环境源码安装

一、单机版

先上官网文档地址(centos):https://www.rabbitmq.com/install-rpm.html
首先要先安装依赖环境erlang:
安装erlang有三种方式
安装之前需要先查看RabbitMQ与Erlang之间版本兼容性: https://www.rabbitmq.com/which-erlang.html
1.去官网下载rpm包进行安装,下载地址:https://www.erlang-solutions.com/downloads/

2.使用yum安装(这种方式安装的版本可能过老,不建议)

3.使用RabbitMQ官方制作的依赖包

这里采用的是方式1,官网需要魔法,不然太慢
在这里插入图片描述
版本不知道为什么显示不出来,总之,选一个你需要的,我现在选了一个最新版本的
RabbitMq3.13.0 erlang 26.0 依赖关系如图:
在这里插入图片描述

erlang安装:

rpm -Uvh esl-erlang_26.2.1_1~centos~7_x86_64.rpm
yum install epel-release
sudo yum install erlang

因为erlang在默认的yum库中不可用,所以需要先安装epel存储库:

yum -y install epel-release

接下来进行erlang的安装:

yum -y install erlang socat

关于erlang版本
使用erl -version查看

erl -version
erl -v

在这里插入图片描述

RabbitMQ安装

安装RabbitMQ有几种方式:rpm包安装,yum安装

具体安装方式在一开始的官方文档地址中都有,这边我用的是rpm包安装方式,所以先去下载rpm包

先放官方网址:https://github.com/rabbitmq/rabbitmq-server/releases

根据使用的系统选择对应的rpm包
在这里插入图片描述
因为在安装rabbitmq时需要依赖于一个socat组件,所以先安装socat:

yum install socat

接下来安装rabbitmq:

rpm -Uvh rabbitmq-server-3.13.0-1.el8.noarch.rpm
yum install rabbitmq-server -y

启动rabbitmq并查看状态:

systemctl start rabbitmq-server
systemctl status rabbitmq-server

设置开启自启:

systemctl enable rabbitmq-server

RabbitMQ管理界面

开启管理页面插件

rabbitmq-plugins enable rabbitmq_management

管理界面默认有一个来宾账号密码:guest/guest,但是只能通过本地访问,所以还需要创建一个账号并赋予权限:

rabbitmqctl add_user admin admin         #admin admin分别为账号名密码
rabbitmqctl set_user_tags admin administrator

四种身份权限:
1: administrator 超级管理员
2: monitoring 监控者
3: policymaker 策略规则制定者
4: management 普通管理者

之后就可以通过rabbitmq主机上的15672端口实现访问管理界面,需要注意的是如果不是本地访问注意在防火墙上开启15672端口,防火墙开启端口:

firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --query-port=15672/tcp

如果是云服务器,在防火墙那里手动添加即可。

管理界面:

在这里插入图片描述

关于rabbitmq一些参数配置可参考官方文档:https://www.rabbitmq.com/configure.html

二、集群安装

官方文档:https://www.rabbitmq.com/clustering.html#overview-hostname-requirements
1.搭建单机集群前首先停止所有rabbitmq服务

systemctl stop rabbitmq-server

2.启动第一个节点:

sudo RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit-1 rabbitmq-server start &

3.启动第二个节点(将5672端口改为5673,15672端口改为15673端口,因为是单机搭建集群,不修改就会端口冲突):

sudo RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]"  RABBITMQ_NODENAME=rabbit-2 rabbitmq-server start &

4.启动第三个节点:

sudo RABBITMQ_NODE_PORT=5674 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]"  RABBITMQ_NODENAME=rabbit-3 rabbitmq-server start &

5.将第一个节点设为主节点:

sudo rabbitmqctl -n rabbit-1 stop_app       #停止应用
sudo rabbitmqctl -n rabbit-1 reset			#清除节点上的历史数据
sudo rabbitmqctl -n rabbit-1 start_app		#启动应用

6.将第二个节点设为从节点:
注意:@VM-4-8-centos是你自己虚拟机的那个名字
在这里插入图片描述

sudo rabbitmqctl -n rabbit-2 stop_app
sudo rabbitmqctl -n rabbit-2 reset
sudo rabbitmqctl -n rabbit-2 join_cluster rabbit-1@VM-4-8-centos
sudo rabbitmqctl -n rabbit-2 start_app

7.再将第三个节点设为从节点:

sudo rabbitmqctl -n rabbit-3 stop_app
sudo rabbitmqctl -n rabbit-3 reset
sudo rabbitmqctl -n rabbit-3 join_cluster rabbit-1@VM-4-8-centos
sudo rabbitmqctl -n rabbit-3 start_app

注:如果是多机部署集群,需要保持.erlang.cookie的一致,需要将其中一个节点的cookie文件复制到其他节点的主机上,cookie文件位置/var/lib/rabbitmq/.erlang.cookie
我们目前练习使用,因为没有多台机器,只能模拟

8.为每个节点添加用户名密码,并授予权限

rabbitmqctl -n rabbit-1 add_user admin admin
rabbitmqctl -n rabbit-1 set_user_tags admin administrator
rabbitmqctl -n rabbit-1 set_permissions -p / admin ".*" ".*" ".*"

9.进入主节点web页面监控:
在这里插入图片描述

RabbitMQ镜像集群配置

面已经完成RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制。虽然该模式解决一项目组节点压力,但队列节点宕机直接导致该队列无法应用,只能等待重启,所以要想在队列节点宕机或故障也能正常应用,就要复制队列内容到集群里的每个节点,必须要创建镜像队列。

镜像队列是基于普通的集群模式的,然后再添加一些策略,所以你还是得先配置普通集群,然后才能设置镜像队列,我们就以上面的集群接着做。
设置的镜像队列可以通过开启的网页的管理端Admin->Policies,也可以通过命令。

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

在这里插入图片描述

  • Name:策略名称
  • Pattern:匹配的规则,如果是匹配所有的队列,是^.
  • Definition:使用ha-mode模式中的all,也就是同步所有匹配的队列。问号链接帮助文档。

三、负载均衡-HAProxy

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案,包括Twitter,Reddit,StackOverflow,GitHub在内的多家知名互联网公司在使用。HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。

安装HAProxy

//下载依赖包
yum install gcc vim wget
//上传haproxy源码包
//解压
tar -zxvf haproxy-1.6.5.tar.gz -C /usr/local
//进入目录、进行编译、安装
cd /usr/local/haproxy-1.6.5
make TARGET=linux31 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
mkdir /etc/haproxy
//赋权
groupadd -r -g 149 haproxy
useradd -g haproxy -r -s /sbin/nologin -u 149 haproxy
//创建haproxy配置文件
mkdir /etc/haproxy
vim /etc/haproxy/haproxy.cfg

配置文件路径:/etc/haproxy/haproxy.cfg

#logging options
global
	log 127.0.0.1 local0 info
	maxconn 5120
	chroot /usr/local/haproxy
	uid 99
	gid 99
	daemon
	quiet
	nbproc 20
	pidfile /var/run/haproxy.pid

defaults
	log global
	
	mode tcp

	option tcplog
	option dontlognull
	retries 3
	option redispatch
	maxconn 2000
	contimeout 5s
   
     clitimeout 60s

     srvtimeout 15s	
#front-end IP for consumers and producters

listen rabbitmq_cluster
	
	
	
	mode tcp
	#balance url_param userid
	#balance url_param session_id check_post 64
	#balance hdr(User-Agent)
	#balance hdr(host)
	#balance hdr(Host) use_domain_only
	#balance rdp-cookie
	#balance leastconn
	#balance source //ip
	
	balance roundrobin
	
        server node1 127.0.0.1:5672 check inter 5000 rise 2 fall 2
        server node2 127.0.0.1:5673 check inter 5000 rise 2 fall 2
        server node3 127.0.0.1:5674 check inter 5000 rise 2 fall 2


listen stats
	bind 0.0.0.0:8100
	mode http
	option httplog
	stats enable
	stats uri /rabbitmq-stats
	stats refresh 5s

启动HAproxy负载

/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
//查看haproxy进程状态
ps -ef | grep haproxy

访问如下地址对mq节点进行监控
http://你的ip地址:8100/rabbitmq-stats

在这里插入图片描述
负载均衡之后,如果是在SpringBoot项目中,就不用填RabbitMq的集群地址了,直接填Haproxy的地址就行

设置里的bind 0.0.0.0:5675 这个端口

  • 24
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值