List

  CentOS7.3
prometheus-2.2.1.linux-amd64.tar.gz
haproxy_exporter-0.11.0.linux-amd64.tar.gz
节点名 IP 软件版本 硬件 网络 说明
Prometheus 192.168.43.144 list 里面都有 2C4G Nat,内网 测试环境
RabbitMQ 192.168.43.213 list 里面都有 2C4G Nat,内网 测试环境
RabbitMQ 192.168.43.251 list 里面都有 2C4G Nat,内网 测试环境

部署Prometheus

部署Promehteus请看我前面写的文章

https://www.cnblogs.com/you-men/p/12839535.html

部署RabbitMQ

修改主机名

由于 RabbitMQ 集群连接是通过主机名来连接服务的,必须保证各个主机名之间可以 ping 通

hostnamectl set-hostname rabbitmq-2
hostnamectl set-hostname rabbitmq-1 echo "192.168.43.213 rabbitmq-1" >> /etc/hosts
echo "192.168.43.251 rabbitmq-2" >> /etc/hosts
scp /etc/hosts rabbitmq-2:/etc/
安装RabbitMQ
# 更新 yum源
yum install epel-release
yum -y install rabbitmq-server
同步Erlang cookie

RabbitMQ 集群是通过 Erlang 的集群实现的,当集群中的节点进行通信时,Erlang 节点会进行认证。如果节点之间的 Erlang cookie 不相同,则会认证失败。因此,需要在集群中的所有节点上同步 cookie 文件

这里将 rabbitmq-1 的该文件复制到 rabbitmq-2,由于这个文件权限是 400 为方便传输,先修改权限,非必须操作,所以需要先修改 rabbitmq-2 中的该文件权限为 777

[root@rabbitmq-1 ~]# service rabbitmq-server start
Redirecting to /bin/systemctl start rabbitmq-server.service
[root@rabbitmq-1 ~]# cat /var/lib/rabbitmq/.erlang.cookie
KNTAXWSNMNNODXVTCRZZ # 用scp 拷贝到rabbitmq-2
scp /var/lib/rabbitmq/.erlang.cookie rabbitmq-2:/var/lib/rabbitmq/.erlang.cookie # 我们到另一台机器发现拷贝过来的权限有问题,所以需要修改
[root@rabbitmq-2 ~]# ls -l /var/lib/rabbitmq/.erlang.cookie
-r-------- 1 root root 20 May 7 23:27 /var/lib/rabbitmq/.erlang.cookie chmod 400 /var/lib/rabbitmq/.erlang.cookie
chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
service rabbitmq-server start
组成集群

在rabbitmq-2执行如下命令

[root@rabbitmq-2 ~]# rabbitmqctl stop_app # 停止rabbitmq服务
[root@rabbitmq-2 ~]# rabbitmqctl reset # 清空节点状态
[root@rabbitmq-2 ~]# rabbitmqctl join_cluster rabbit@rabbitmq-1 # node2和node1构成集群,node2必须能通过node1的主机名ping通 [root@rabbitmq-2 ~]# rabbitmqctl start_app # 开启rabbitmq服务 # 接下来我们到任意一台机器上面查看集群状态:
[root@rabbitmq-2 ~]# rabbitmqctl cluster_status
Cluster status of node 'rabbit@rabbitmq-1' ...
[{nodes,[{disc,['rabbit@rabbitmq-1','rabbit@rabbitmq-2']}]},
{running_nodes,['rabbit@rabbitmq-2','rabbit@rabbitmq-1']},
{cluster_name,<<"rabbit@rabbitmq-1">>},
{partitions,[]}]
...done.
RabbitMQ常用命令
rabbitmqctl list_users
# 查看rabbitmq用户列表,默认用户名密码都为guest rabbitmqctl add_user admin1 123
# 新增用户 rabbitmqctl set_user_tags admin1 administrator
# 设置用户admin1为管理员级别 # 其他命令
rabbitmqctl add_user <username> <password>
rabbitmqctl delete_user <username>
rabbitmqctl change_password <username> <newpassword>
rabbitmqctl clear_password <username>
rabbitmqctl authenticate_user <username> <password>
rabbitmqctl set_user_tags <username> <tag> ...
rabbitmqctl list_users
配置rabbitmq用户管理界面
# 开启web可视化界面
rabbitmq-plugins enable rabbitmq_management # 需要重启rabbitmq
service rabbitmq-server restart # 接下来浏览器访问IP:15672即可

rabbitmq从3.3.0开始禁止使用guest/guest权限通过除localhost外的访问,否则会报错

需要在/etc/rabbitmq/rabbitmq.config文件中需要添加{loopback_users, []}配置:

[{rabbit, [

{loopback_users, []}

]}].

设置内存节点

如果节点需要设置成内存节点,则加入集群的命令如下:

rabbitmqctl join_cluster --ram rabbit@rabbitmq-1

# –ram指的是作为内存节点,如果不加,那就默认为内存节点。

如果节点在集群中已经是磁盘节点了,通过以下命令可以将节点改成内存节点:

rabbitmqctl stop_app  						# 停止rabbitmq服务
rabbitmqctl change_cluster_node_type ram # 更改节点为内存节点
rabbitmqctl start_app # 开启rabbitmq服务

镜像队列

当节点发生故障时,尽管所有元数据信息都可以从磁盘节点上将元数据拷贝到本节点上,但是队列的消息内容就不行了,这样就会导致消息的丢失,那是因为在默认情况下,队列只会保存在其中一个节点上,我们在将集群队列时也说过。

聪明的 RabbitMQ 早就意识到这个问题了,在 2.6以后的版本中增加了,队列冗余选项:镜像队列。镜像队列的主队列(master)依然是仅存在于一个节点上,其余从主队列拷贝的队列叫从队列(slave)。如果主队列没有发生故障,那么其工作流程依然跟普通队列一样,生产者和消费者不会感知其变化,当发布消息时,依然是路由到主队列中,而主队列通过类似广播的机制,将消息扩散同步至其余从队列中,这就有点像 fanout 交换器一样。而消费者依然是从主队列中读取消息。

一旦主队列发生故障,集群就会从最老的一个从队列选举为新的主队列,这也就实现了队列的高可用了,但我们切记不要滥用这个机制,在上面也说了,队列的冗余操作会导致不能通过扩展节点增加存储空间,而且会造成性能瓶颈。

命令格式如下

rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]

# -p Vhost: 可选参数,针对指定vhost下的queue进行设置
# Name: policy的名称
# Pattern: queue的匹配模式(正则表达式)
# Definition: 镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode
# ha-mode: 指明镜像队列的模式,有效值为 all/exactly/nodes
# all: 表示在集群中所有的节点上进行镜像
# exactly: 表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
# nodes: 表示在指定的节点上进行镜像,节点名称通过ha-params指定
# ha-params: ha-mode模式需要用到的参数
# ha-sync-mode: 进行队列中消息的同步方式,有效值为automatic和manual
# priority: 可选参数,policy的优先级
案例

以下示例声明名为ha-all的策略,它与名称以”ha”开头的队列相匹配,并将镜像配置到集群中的所有节点:

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

上述命令会将所有的队列冗余到所有节点上,一般可以拿来测试。

策略的名称以”two”开始的队列镜像到群集中的任意两个节点,并进行自动同步:

rabbitmqctl set_policy ha-two "^two." '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'

以”node”开头的队列镜像到集群中的特定节点的策略:

rabbitmqctl set_policy ha-nodes "^nodes." '{"ha-mode":"nodes","ha-params":["rabbit@nodeA", "rabbit@nodeB"]}'

集群负载均衡

HAProxy 提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。

集群负载均和架构图:

安装haproxy

yum -y install haproxy

编辑HaProxy

vim /etc/haproxy/haproxy.cfg

#绑定配置
listen rabbitmq_cluster 0.0.0.0:5670
#配置TCP模式
mode tcp
#加权轮询
balance roundrobin
#RabbitMQ集群节点配置
server rabbitmq-1 192.168.171.134:5672 check inter 2000 rise 2 fall 3
server rabbitmq-2 192.168.171.135:5672 check inter 2000 rise 2 fall 3 #haproxy监控页面地址
listen monitor 0.0.0.0:8100
mode http
option httplog
stats enable
stats uri /stats
stats refresh 5s
启动HaProxy

systemctl restart haproxy

浏览器访问IP:8100/stats

部署node_exporter

下载haproxy_exporter
wget https://github.com/prometheus/haproxy_exporter/releases/download/v0.11.0/haproxy_exporter-0.11.0.linux-amd64.tar.gz
下载RabbitMQ_exporter
wget https://github.com/kbudde/rabbitmq_exporter/releases/download/v1.0.0-RC7/rabbitmq_exporter-1.0.0-RC7.linux-amd64.tar.gz

wget https://github.com/deadtrickster/prometheus_rabbitmq_exporter/releases/download/rabbitmq-3.6.12-pre18/prometheus_rabbitmq_exporter-v3.6.12.1.ez
部署rabbitmq_exporter
cp prometheus_rabbitmq_exporter-v3.6.12.1.ez /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/

# 启动rabbitmq_exporter
RABBIT_USER=guest RABBIT_PASSWORD=guest OUTPUT_FORMAT=json PUBLIC_PORT=9090 RABBIT_URL=http://localhost:15672 nohup ./rabbitmq_exporter &
tail -1000f nohup. # 参数说明
# RABBIT_USER:rabbit用户名
# RABBIT_PASSWORD:rabbit密码
# RABBIT_URL:rabbit服务地址和端口
# OUTPUT_FORMAT:输出格式
# PUBLIC_PORT:暴露端口 # 验证服务端口
lsof -i:9419
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rabbitmq_ 1682 root 3u IPv6 23446 0t0 TCP *:9419 (LISTEN)

配置prometheus加入rabbitmq_exporter
tail -7 /usr/local/prometheus/prometheus.yml
- job_name: 'rabbitmq_1'
static_configs:
- targets: ['192.168.43.213:9419'] - job_name: 'rabbitmq_2'
static_configs:
- targets: ['192.168.43.251:9419']

配置grafana

预警指标
序号 预警名称 预警规则 描述
1 集群状态预警 当集群状态不符合预期【!=1】时进行预警
2 节点状态预警 当节点状态不符合预期【!=1】时进行预警
3 等待消费预警 当等待消费的消息数量达到阈值【>1000】时进行预警 延迟消费
4 消费预警 当消费中的消息数量达到阈值【>1000】时进行预警 消费速度慢
部署Haproxy_exporter
tar xvf haproxy_exporter-0.11.0.linux-amd64.tar.gz
cd haproxy_exporter-0.11.0.linux-amd64/
./haproxy_exporter --haproxy.scrape-uri="http://192.168.43.251:8100/stats;csv"

(https://img2020.cnblogs.com/blog/1871335/202006/1871335-20200630180351993-1052219626.png)

08 . Prometheus+Grafana监控haproxy+rabbitmq的更多相关文章

  1. Prometheus + Grafana 监控系统搭

    本文主要介绍基于Prometheus + Grafana 监控Linux服务器. 一.Prometheus 概述(略) 与其他监控系统对比 1 Prometheus vs. Zabbix Zabbix ...

  2. cAdvisor+Prometheus+Grafana监控docker

    cAdvisor+Prometheus+Grafana监控docker 一.cAdvisor(需要监控的主机都要安装) 官方地址:https://github.com/google/cadvisor ...

  3. [转帖]Prometheus+Grafana监控Kubernetes

    原博客的位置: https://blog.csdn.net/shenhonglei1234/article/details/80503353 感谢原作者 这里记录一下自己试验过程中遇到的问题: . 自 ...

  4. prometheus+grafana监控redis

    prometheus+grafana监控redis redis安装配置 https://www.cnblogs.com/autohome7390/p/6433956.html redis_export ...

  5. prometheus+grafana监控mysql

    prometheus+grafana监控mysql 1.安装配置MySQL官方的 Yum Repository(有mysql只需设置监控账号即可) [root@localhost ~]# wget - ...

  6. [转帖]安装prometheus+grafana监控mysql redis kubernetes等

    安装prometheus+grafana监控mysql redis kubernetes等 https://www.cnblogs.com/sfnz/p/6566951.html plug 的模式进行 ...

  7. 【Springboot】用Prometheus+Grafana监控Springboot应用

    1 简介 项目越做越发觉得,任何一个系统上线,运维监控都太重要了.关于Springboot微服务的监控,之前写过[Springboot]用Springboot Admin监控你的微服务应用,这个方案可 ...

  8. 部署Prometheus+Grafana监控

    Prometheus 1.不是很友好,各种配置都手写 2.对docker和k8s监控有成熟解决方案 Prometheus(普罗米修斯) 是一个最初在SoudCloud上构建的监控系统,开源项目,拥有非 ...

  9. Prometheus+Grafana监控SpringBoot

    Prometheus+Grafana监控SpringBoot 一.Prometheus监控SpringBoot 1.1 pom.xml添加依赖 1.2 修改application.yml配置文件 1. ...

随机推荐

  1. 结合 AOP 轻松处理事件发布处理日志

    结合 AOP 轻松处理事件发布处理日志 Intro 前段时间,实现了 EventBus 以及 EventQueue 基于 Event 的事件处理,但是没有做日志(EventLog)相关的部分,原本想增 ...

  2. Java实现 LeetCode 821 字符的最短距离(暴力)

    821. 字符的最短距离 给定一个字符串 S 和一个字符 C.返回一个代表字符串 S 中每个字符到字符串 S 中的字符 C 的最短距离的数组. 示例 1: 输入: S = "loveleet ...

  3. Java实现 第十一届 蓝桥杯 (本科组)省内模拟赛

    有错误的或者有问题的欢迎评论 计算机存储中有多少字节 合法括号序列 无向连通图最少包含多少条边 字母重新排列 凯撒密码加密 反倍数 正整数的摆动序列 螺旋矩阵 小明植树 户户通电 计算机存储中有多少字 ...

  4. Java实现 LeetCode 664 奇怪的打印机(DFS)

    664. 奇怪的打印机 有台奇怪的打印机有以下两个特殊要求: 打印机每次只能打印同一个字符序列. 每次可以在任意起始和结束位置打印新字符,并且会覆盖掉原来已有的字符. 给定一个只包含小写英文字母的字符 ...

  5. Java实现 LeetCode 443 压缩字符串

    443. 压缩字符串 给定一组字符,使用原地算法将其压缩. 压缩后的长度必须始终小于或等于原数组长度. 数组的每个元素应该是长度为1 的字符(不是 int 整数类型). 在完成原地修改输入数组后,返回 ...

  6. Java实现 LeetCode 202 快乐数

    202. 快乐数 编写一个算法来判断一个数是不是"快乐数". 一个"快乐数"定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过 ...

  7. Java中lang包的常用方法介绍

    JAVA API(图片来源:实验楼) 包装类 Integer包装类 方法 返回值 功能描述 byteValue() byte 以 byte 类型返回该 Integer 的值 intValue() in ...

  8. Java实现台阶问题

    1 问题描述 一个台阶总共有n级,如果一次可以跳1级,也可以跳2级,求总共有多少种跳法. 2 解决方案 2.1 递归法 如果整个台阶只有1级,则显然只有一种跳法.如果台阶有2级,则有两种跳法:一种是分 ...

  9. Python—变量,条件语句,while循环,运算符,字符串等

     Python初识以及变量: 变量名:——字母 ——数字 ——下划线[见名识意] (PS:数字不能开头:不能是关键字:最好不能和python内置的东西重复) ##################### ...

  10. spring Cloud服务注册中心Eureka集群

    spring Cloud服务注册中心Eureka集群配置: 在application.yml文件加以下配置: server: port: 8761 tomcat: uri-encoding: UTF- ...