RabbitMQ集群环境搭建

  • 一、安装基础工具包
  • 二:安装Erlang和RabbitMQ
    • 1. 安装Erlang
    • 2. 安装RabbitMQ
    • 3. 启动RabbitMQ
    • 4. 启动RabbitMQ管理台
  • 三:RabbitMQ集群
  • 四:Haproxy负载均衡和KeepAlived高可用
    • 1. 安装Haproxy
    • 2. 安装KeepAlived
  • 五:Prometheus和Grafana监控
    • 1. 安装Prometheus
    • 2. 安装Grafana
    • 3. 安装RabbitMQ_Exporter
    • 4. 新增Grafana的RabbitMQ面板

RabbitMQ是遵从AMQP协议、使用Erlang语言开发的消息中间件。
安装RabbitMQ之前需要先安装Erlang环境。

由于我安装的CentOS是Minimal版本,防火墙默认都是不通的(可以使用firewall-cmd将防火墙关闭,也可以针对软件端口打开),且很多Linux命令工具都没有安装,需要我在安装完系统后自己再单独安装这些基础工具,方便后续的操作。

一、安装基础工具包

  1. ip addr
    刚安装完系统,网络是没有打开的。需要运行命令打开网络
    ip addr # 首先使用ip addr查看连接网络的网卡名,我的是ens33
    cd /etc/sysconfig/network-scripts/ # 然后进入网络配置文件夹
    vi ifcfg-ens33 # 修改网卡对应的配置文件,打开网络是将ONBOOT=no 改为 =yes
    service network restart # 重启网络

如果需要设置固定IP,可以修改BOOTPROTO=static,并添加内容:

IPADDR=192.168.124.127 #静态IP
NETMASK=255.255.255.0 #子网掩码
DNS1=192.168.31.1 #DNS 配置
GATEWAY=192.168.124.2 #默认网关
  1. ifconfig
    ifconfig命令在net-tools…包中(我的是net-tools.x86_64),可以使用“yum search ifconfig”查找命令所在的包
    yum -y install net-tools.x86_64 # 安装网络工具包

  2. yum
    yum在CentOS7minimal版本中是默认安装的,不过需要配置源
    cd /etc/yum.repos.d # 默认的软件源在/etc/yum.repos.d文件夹中,进入文件夹
    wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # 将默认软件源改为aliyun(随手备份是使用Linux的必备技能,将源文件CentOS-Base.repo.bak备份)
    yum clean all # 清除缓存
    yum makecache # 重建缓存

  3. wget
    yum -y install wget # 安装wget

  4. vim
    yum -y install vim # 安装vim

二:安装Erlang和RabbitMQ

Erlang和RabbitMQ要求版本对应,可以从RabbitMQ官网中查询到Erlang和RabbitMQ的版本要求。我的Erlang版本是23.2,RabbitMQ版本是3.10.5。

1. 安装Erlang

wget http://erlang.org/download/otp_src_23.2.tar.gz # 下载Erlang
tar -xvf otp_src_23.2.tar.gz # 解压缩
./configure --prefix=/usr/local/erlang
make && make install # 安装后的Erlang会在/usr/local生成erlang文件夹。如果安装的过程中出现Error的错误,则需要解决后重新安装。
vim /etc/profile # 配置Erlang环境变量路径,添加内容:

# Erlang
export PATH=$PATH:/usr/local/erlang/bin

source /etc/profile # 编译生效

2. 安装RabbitMQ

wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.10.5/rabbitmq-server-generic-unix-3.10.5.tar.xz # 下载RabbitMQ
tar -xvf rabbitmq-server-generic-unix-3.10.5.tar.xz # 解压缩
vim /etc/profile # 配置RabbitMQ环境变量路径,添加内容:

 # RabbitMQ
export PATH=$PATH:/usr/local/rabbitmq_server-3.10.5/sbin

source /etc/profile # 编译生效

3. 启动RabbitMQ

① 后台启动
rabbitmq-server --detached >nohub.out &
② 前台启动
rabbitmq-server start
③ Linux服务启动
service rabbitmq-server start
④ 停止RabbitMQ服务
rabbitmqctl stop

4. 启动RabbitMQ管理台

RabbitMQ管理页面的默认端口是15672,需要开通防火墙。且这个版本guest不能直接登录,需要新增admin账户,设置administrator用户标签,设置权限。
rabbitmqctl add_user admin admin # 设置账号密码都是admin
rabbitmqctl set_user_tag admin administrator # 设置用户标签
rabbitmqctl set_permission -p / admin “." ".” “.*” # 设置权限
rabbitmq-plugins enable rabbitmq_management # RabbitMQ管理页面通过rabbitmq_management自带plugin实现

启动RabbitMQ管理台成功后,就可以通过15672端口访问后台管理页面了:

三:RabbitMQ集群

我的RabbitMQ集群架构:

集群机器均添加hosts IP映射:
rmq126 192.168.124.126
rmq127 192.168.124.127
rmq128 192.168.124.128

RabbitMQ通过用户根目录下的“.erlang.cookie”文件进行集群间认证通信的,可以使用cp功能进行复制,确保该文件内容完全一致。

rabbitmqctl join_cluster --ram rabbit@主机host # --ram的意思是将节点以内存节点的类型加入,–disc的意思是以磁盘节点加入。
启动rabbitmq-server --detached >nohub.out &

停止节点服务:rabbitmqctl stop_app
启动节点服务:rabbitmqctl start_app
查看集群状态:rabbitmqctl cluster_status
修改节点类型:rabbitmqctl change_cluster_node_type disc # 内存节点性能更高;但如果需要做延迟队列(数据需要落盘来保证消息不丢失),就必须定义成磁盘节点

四:Haproxy负载均衡和KeepAlived高可用

Haproxy支持4层(TCP层)和7层(应用层、http)网络请求的负载均衡,RabbitMQ的消息通信是在4层,所以选择Haproxy给RabbitMQ做负载均衡,KeepAlived提供虚拟IP给客户端访问。
访问路径:Client -> VIP(Virtual IP) -> Haproxy(负载) -> RabbitMQ

1. 安装Haproxy

yum install -y haproxy
vim /etc/haproxy/haproxy.cfg # 配置RabbitMQ负载节点(备份原文件)

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log 127.0.0.1 local2
chroot /var/lib/haproxy # 改变当前工作目录
pidfile /var/run/haproxy.pid # haproxy 的 pid 存放路径,启动进程的用户必须有权限访问此文件
maxconn 4000 # 最大连接数,默认 4000
user root # 默认用户
group root # 默认组
daemon # 创建 1 个进程进入 deamon 模式运行。此参数要求将运行模式设置为 daemon
stats socket /var/lib/haproxy/stats # 创建监控所用的套接字目录
#---------------------------------------------------------------------
# defaults settings
#---------------------------------------------------------------------
# 注意:因为要使用 tcp 的负载,屏蔽掉与 http 相关的默认配置
defaults
mode http # 默认的模式 mode { tcp|http|health },tcp 是 4 层,http 是 7 层,health 只会返回 OK
log global
# option httplog # 采用 http 日志格式
option dontlognull # 启用该项,日志中将不会记录空连接。所谓空连接就是在上游的负载均衡器
# option http-server-close # 每次请求完毕后主动关闭 http 通道
# option forwardfor except 127.0.0.0/8 # 如果后端服务器需要获得客户端真实 ip 需要配置的参数,可以从 Http Header 中获得客户端 ip
option redispatch # serverId 对应的服务器挂掉后,强制定向到其他健康的服务器
retries 3 # 3 次连接失败就认为服务不可用,也可以通过后面设置
# timeout http-request 10s
timeout queue 1m
timeout connect 10s # 连接超时时间
timeout client 1m # 客户端连接超时时间
timeout server 1m # 服务器端连接超时时间
# timeout http-keep-alive 10s
timeout check 10s
maxconn 3000 # 最大连接数
###################### 打开 haproxy 的监测界面###############################
listen status
bind 0.0.0.0:9188
mode http
stats enable
stats refresh 30s
stats uri /stats #设置 haproxy 监控地址为 http://localhost:9188/stats
stats auth admin:123456 #添加用户名密码认证
stats realm (Haproxy\ statistic)
stats admin if TRUE
######################监听 rabbitmq 的 web 操作页面############################
listen rabbitmq_admin
bind 0.0.0.0:15670
server rmq127 192.168.124.127:15672
server rmq128 192.168.124.128:15672
#######################监听 rabbimq_cluster #################################
listen rabbitmq_cluster
bind 0.0.0.0:5670
mode tcp
#负载均衡算法(#banlance roundrobin 轮询,balance source 保存 session 值,支持 static-rr,leastconn,first,uri 等参数)
balance roundrobin
#check inter 5000 是检测心跳频率
#rise 2 是 2 次正确认为服务器可用
#fall 2 是 2 次失败认为服务器不可用
server rabbit1 192.168.124.127:5672 check inter 5000 rise 2 fall 2
server rabbit2 192.168.124.128:5672 check inter 5000 rise 2 fall 2

vim /etc/profile # 配置Haproxy环境变量路径
haproxy -f /etc/haproxy/haproxy.cfg # 根据配置文件启动Haproxy
service haproxy status # 查看服务状态

服务启动成功后,15670端口就可以访问到RabbitMQ,9188/stats可以访问到Haproxy

2. 安装KeepAlived

KeepAlived实现了vrrp协议,能够为Haproxy提供虚拟IP和路由选择的功能,有Master和Backup节点来保证其高可用性。当Master节点挂了以后,能够自动切换到其他Backup作为Master进行工作。

yum install -y keepalived
vim /etc/keepalived/keepalived.conf # 配置虚拟ip作为与客户端交互的统一入口 192.168.124.199

Master节点: router_id NodeA,state MASTER, priority 100

global_defs {router_id NodeA # 起一个唯一的名字,不能与备机相同
}
vrrp_script chk_haproxy {script "/etc/keepalived/check_haproxy.sh"interval 5weight 2
}
vrrp_instance VI_1 {state MASTER # 这里标记为主interface ens33 # 这里的必须和你的网卡一致,ipconfig 获得virtual_router_id 1 # 这里表示路由的唯一标识与备机一致priority 100 # 配置优先级advert_int 1authentication {auth_type PASSauth_pass root # 配置认证密码}virtual_ipaddress { # 配置虚拟 ip 地址,就是开放的地址,与本机 ip 不同192.168.124.199}track_script {chk_haproxy}
}

Backup节点: router_id NodeB,state BACKUP,priority 50

global_defs {router_id NodeB
}
vrrp_script chk_haproxy {script "/etc/keepalived/check_haproxy.sh"interval 5weight 2
}
vrrp_instance VI_1 {state BACKUP # 通过 BACKUP 表示该机器为备机interface ens33 # 与网卡一致,ipconfig 获得virtual_router_id 1 # 与主机一致priority 50advert_int 1authentication {auth_type PASSauth_pass root}virtual_ipaddress { # 开放的虚拟地址192.168.124.199}track_script {chk_haproxy}
}

将KeepAlived添加到服务service,将KeepAlived设置自动启动Haproxy,如果Haproxy节点出现问题,则先自动重启,若重启不成功就关闭该keepalived服务,切换到backup进行服务:
vim /etc/keepalived/check_haproxy.sh

#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then
haproxy -f /etc/haproxy/haproxy.cfg
fi
sleep 2
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then
service keepalived stop
fi

service keepalived start # 启动KeepAlived
service keepalived status # 查看keepalived状态
tail -f /var/log/messages # 查看日志

Keepalived服务启动成功后,可以通过虚拟IP 192.168.124.199访问到RabbitMQ的服务了:

至此实现了RabbitMQ的负载均衡和高可用。

五:Prometheus和Grafana监控

我在192.168.124.126这台机器上安装监控

1. 安装Prometheus

Prometheus基于Go语言开发,需要安装Golang提供运行环境。Prometheus可以为RabbitMQ服务器提供软硬件资源的监控服务。有了服务器的监控能力,这个能力不限于RabbitMQ,也可以为其他应用提供监控能力。

  • 安装Golang 1.18.4版本
    wget https://go.dev/dl/go1.18.4.linux-amd64.tar.gz # 下载安装包
    tar -xvf go1.18.4.linux-amd64.tar.gz # 解压缩
    vim /etc/profile # 配置环境变量
# Go Lang
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin

source /etc/profile

  • 安装Prometheus
    wget https://github.com/prometheus/prometheus/releases/download/v2.37.0-rc.1/prometheus-2.37.0-rc.1.linux-amd64.tar.gz # 下载安装包
    tar -xvf prometheus-2.37.0-rc.1.linux-amd64.tar.gz # 解压缩
    vim /etc/profile # 配置环境变量
# Prometheus
export PATH=$PATH:/usr/local/prometheus

source /etc/profile

  • 启动Prometheus
    prometheus --config.file=/usr/local/prometheus/prometheus.yml &

启动成功后,通过9090端口可以访问到Prometheus的监控页面

  • 添加Prometheus服务自启
    通过 添加Prometheus服务 的方式可以
    vim /etc/systemd/system/prometheus.service # 新增prometheus.service文件,写入以下内容:
[Unit]
Description=Prometheus Monitoring System
Documentation=Prometheus Monitoring System
[Service]
ExecStart=/usr/local/prometheus/prometheus
--config.file=/usr/local/prometheus/prometheus.yml
--web.listen-address=:9090
Restart=on-failure
[Install]
WantedBy=multi-user.target

执行以下系统命令,设置成开机启动:
systemctl daemon-reload
systemctl enable prometheus
systemctl start prometheus
systemctl status prometheus # 检查服务状态

2. 安装Grafana

Grafana是可定制化监控页面。让资源监控页面更好看了
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.0.2-1.x86_64.rpm
yum -y install grafana
systemctl daemon-reload
systemctl enable grafana-server.service
systemctl start grafana-server.servic

服务启动成功后,通过默认的3000端口可以访问到Grafana监控页面,然后添加Prometheus数据源,就可以查看Prometheus监控的资源情况了。

3. 安装RabbitMQ_Exporter

提供RabbitMQ集群资源的监控,让Prometheus有了RabbitMQ的监控能力。
wget https://github.com/kbudde/rabbitmq_exporter/releases/download/v1.0.0-RC17/rabbitmq_exporter_1.0.0-RC17_linux_amd64.tar.gz # 下载RabbitMQ_Exporter
tar -xvf rabbitmq_exporter_1.0.0-RC17_linux_amd64.tar.gz # 解压缩
mv rabbitmq_exporter_1.0.0-RC17_linux_amd64 /usr/local/rabbitmq_exporter # 移动到/usr/local文件夹中,并修改文件夹名字

启动RabbitMQ_Exporter,RABBIT_URL可以使用Keep Alived的VIP,防止某一台挂掉:
RABBIT_USER=admin RABBIT_PASSWORD=admin OUTPUT_FORMAT=JSON PUBLISH_PORT=9099 RABBIT_URL=http://192.168.124.199:15672 nohup ./rabbitmq_exporter &

ss -nutlp | grep 9099 # 查看端口监听是否生效

vim /usr/local/prometheus/prometheus.yml # 在prometheus.yml文件中添加rabbitmq_exporter的目标host:

  - job_name: "rabbitmq"static_configs:- targets: ["192.168.124.126:9099"]

systemctl restart prometh # 重启Prometheus

如果遇到时间不同步的问题,执行以下操作:
prometheus --config.file=“/usr/local/prometheus/prometheus.yml” --storage.tsdb.path=“/usr/local/prometheus/tsdb_data” --web.enable-lifecycle --web.enable-admin-api &
或者通过同步aliyun服务器时间:
yum install ntpdate
ntpdate ntp.aliyun.com

4. 新增Grafana的RabbitMQ面板

导入RabbitMQ Monitoring(ID:4279)监控面板,就可以直观的看到服务器和资源信息了

至此基于Prometheus、Grafana对RabbitMQ集群的监控系统搭建完毕。

RabbitMQ集群环境搭建相关推荐

  1. 高吞吐消息中间件Kafka集群环境搭建(3台kafka,3台zookeeper)

    高吞吐消息中间件Kafka集群环境搭建(3台kafka,3台zookeeper) 一.集群搭建要求 1.搭建设计 2.分配六台Linux,用于安装拥有三个节点的Kafka集群和三个节点的Zookeep ...

  2. 2W 字详解 Redis 6.0 集群环境搭建实践

    原文链接:https://www.cnblogs.com/hueyxu/p/13884800.html 本文是Redis集群学习的实践总结(基于Redis 6.0+),详细介绍逐步搭建Redis集群环 ...

  3. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(九)安装kafka_2.11-1.1.0

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  4. hadoop集群环境搭建准备工作

    一定要注意hadoop和linux系统的位数一定要相同,就是说如果hadoop是32位的,linux系统也一定要安装32位的. 准备工作: 1 首先在VMware中建立6台虚拟机(配置默认即可).这是 ...

  5. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十一)NIFI1.7.1安装

    一.nifi基本配置 1. 修改各节点主机名,修改/etc/hosts文件内容. 192.168.0.120master192.168.0.121slave1192.168.0.122 slave2 ...

  6. 『高级篇』docker之DockerSwarm的集群环境搭建(28)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『高级篇』docker之DockerSwarm的集群环境搭建(28) 上次了解了docker Swarm,这次一起动手操作,搭 ...

  7. Ubuntu下基于 Cilium CNI 的 Kubernetus集群环境搭建

    Ubuntu下基于 Cilium CNI 的 Kubernetus集群环境搭建 1. 前言 2. 安装三个Ubuntu 2.1 三个机器都关闭防火墙 2.2 三个机器都关闭swap 2.3 三个机器都 ...

  8. Hadoop 2.x 完全分布式HA集群环境搭建

    Hadoop 2.x 完全分布式HA集群环境搭建 目录 Hadoop 2.0 环境搭建 前提:环境准备 第一步:修改hadoop-env.sh配置文件,配置好JAVA_HOME环境变量 第二步:修改h ...

  9. 学习笔记之-Kubernetes(K8S)介绍,集群环境搭建,Pod详解,Pod控制器详解,Service详解,数据存储,安全认证,DashBoard

    笔记来源于观看黑马程序员Kubernetes(K8S)教程 第一章 kubernetes介绍 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署 ...

最新文章

  1. JavaScript正则表达式快速判断技巧
  2. HOG特征向量的代码
  3. window环境使用C++实现WebSocket
  4. RabbitMQ路由模式
  5. 今日arXiv精选 | 14篇EMNLP 2021最新论文
  6. mongo-rename操作
  7. 使用泛型前 VS 使用泛型后
  8. Day04-循环和列表
  9. 2017.9.24 森林 失败总结
  10. java 英语_Java常用英语汇总(更新升级版)
  11. LinuxC网络编程
  12. phpword模板替换并插入表格
  13. Linux中的截图工具
  14. 【Unity编辑器扩展实践】、扩展Hierarchy菜单
  15. 天翼云流量服务器,天翼云CDN常见问题解答
  16. 2020书单、影单、电视剧
  17. chrome插件(Markdown Nice):用 markdown 写微信公众号
  18. 如何修复excel文件损坏
  19. GATE V9.0安装指南
  20. 云南原乡|坐拥腾冲旅游绝佳位置 是旅居养生度假投资首选

热门文章

  1. Vue + JavaScript 开发在线版蜘蛛纸牌
  2. R语言使用dgamma函数生成Gamma分布密度函数数据、使用plot函数可视化Gamma分布密度函数数据(Gamma Distribution)
  3. 【python】TensorFlow框架下CNN神经网络的花卉识别系统
  4. 矿产行业供应链协同系统解决方案:构建数智化平台,保障矿产资源安全供应
  5. 众昂矿业:萤石资源地区分布及资源特点解读
  6. Flink1.11 intervalJoin watermark生成,状态清理机制源码理解Demo分析
  7. 在斜坡上哪个物体滚的最快_(教科版)小学科学三年级下册第一单元第4课《物体在斜面上运动》教案...
  8. 致青春触动心灵的英语美文——我们不是骄纵的孩子
  9. centOS安装python3.7
  10. 易飞安装在VMware虚拟机方法