- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章MySQL MHA 运行状态监控介绍由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
mha(master ha)是一款开源的 mysql 的高可用程序,它为 mysql 主从复制架构提供了 automating master failover 功能。mha 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点。自动failover的前置条件一定是mha是启动运行的状态。在生产环境中,有时会因为没有及时开启或者运行异常停止而不知,导致mysql主节点异常时,没有自动failover,影响了生产,或延长了处理时间,使故障升级.
此外,mha发生failover后,mha的运行状态会由 is running(0:ping_ok) 变更为stopped(2:not_running),从运行反馈结果变化上,可以判断是否可能发生了主从切换。可以作为一个warning处理.
综上,对mha的运行状态的监控很有必要.
mha是运行在manager 节点上的,一个manager 节点可以管理数十个集群。目前,我们的监控体系是telegraf + influxdb + grafana,所以,需要在manager 节点部署telegraf,去收集mha的运行状态,保存到 influxdb。在既有的grafana mysql dashboard中,添加一个关于 masterha_check_status 的panel 即可.
在 《以实现mongodb副本集状态的监控为例,看telegraf系统中exec输入插件如何编写部署》 一文中的第七部分,我们有介绍一种方法实现mysql mha的监控,但这种方法是每一个集群都需要手动维护,自动发现的功能不够好,增加维护成本,特别是集团的mha集群比较多时.
manager 节点为每个监控的mha集群提供一个专用的配置文件,优化后的监控方法,根据配置文件自动发现、自动调整监控,不再需要逐一配置和维护.
部署的步骤如下:
。
可执行文件为telegraf_checkmhastatus.py 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import io
import re
import configparser
path=
'/cnf/mhacnf'
#fout=
open
(
'输出文件名'
,
'w'
)
for
name
in
os.listdir(path) :
pathname= os.path.
join
(path,
name
)
## print(pathname)
## print(
name
)
config =configparser.configparser()
try:
config.
read
(pathname)
server_item = config.sections()
server1_host =
''
##mha cnf 配置文件中的节点1
server2_host =
''
##mha cnf 配置文件中的节点2
server3_host =
''
##mha cnf 配置文件中的节点3
mha_cnf_remark =
''
if
'server1'
in
server_item:
server1_host = config.get(
'server1'
,
'hostname'
)
else
:
server1_host =
''
mha_cnf_remark = mha_cnf_remark +
'server1未配置;'
if
'server2'
in
server_item:
server2_host = config.get(
'server2'
,
'hostname'
)
else
:
server2_host =
''
mha_cnf_remark = mha_cnf_remark +
'server2未配置;'
if
'server3'
in
server_item:
server3_host = config.get(
'server3'
,
'hostname'
)
##print(mha_cnf_remark)
except
exception
as
e:
print(e)
mha_status_result =
''
if server1_host <>
''
and
server2_host <>
''
:
cmd_mha_status =
'/usr/local/bin/masterha_check_status --conf='
+pathname
with
os.popen(cmd_mha_status)
as
mha_status:
mha_status_result = mha_status.
read
()
if
'running(0:ping_ok)'
in
mha_status_result:
print(
'masterha_check_status,server='
+server1_host+
' status=1i'
)
print(
'masterha_check_status,server='
+server2_host+
' status=1i'
)
if
'stopped(2:not_running)'
in
mha_status_result:
##
else
:
print(
'masterha_check_status,server='
+server1_host+
' status=0i'
)
print(
'masterha_check_status,server='
+server2_host+
' status=0i'
)
|
说明
/cnf/mhacnf
目录下的文件(假设mha配置文件的配置文件在此目录下);masterha_check_status --cong = xxxx,xxxx
为具体的配置文件;判断运行结果; if server1_host <> '' and server2_host <>
'':一种情况,大家可根据需要,根据具体的场景,变更。masterha_check_status
的measurement
中,tag key
有 host
和 server
;当运行ok时,status=1
,否则,status=0
。server
对应的数据为server ip
(注意,会在grafana
配置时以此关联)。
文件默认目录为/etc/telegraf/,默认文件为telegraf.conf.
将执行文件嵌入到telegraf.conf中,由python驱动.
代码如下
1
2
3
4
5
|
[[inputs.
exec
]]
##commands array
commands = [
"python /data/check_mha_status/check_mha_status.py"
,]
timeout=
'60s'
data_format=
"influx"
|
telegraf服务的启动账号默认为telegraf,但是,其中调用了python和python的可执行文件,需要修改权限。为了简便,升级telegraf service的运行账号,修改成root.
修改telegraf.service,默认路径为/usr/lib/systemd/system/telegraf.service.
修改后的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[unit]
description=the plugin-driven server agent
for
reporting metrics
into
influxdb
documentation=https://github.com/influxdata/telegraf
after
=network.target
[service]
environmentfile=-/etc/
default
/telegraf
##
user
=telegraf
user
=root
execstart=/usr/bin/telegraf -config /etc/telegraf/telegraf.conf -config-directory /etc/telegraf/telegraf.d $telegraf_opts
execreload=/bin/kill -hup $mainpid
restart=
on
-failure
restartforceexitstatus=sigpipe
killmode=control-
group
[install]
wantedby=multi-
user
.target
|
1
2
3
|
service telegraf start ####启动服务
service telegraf status ####服务状态查看
service telegraf stop ####关闭服务
|
因为mysql实例节点的telegraf也会汇报各自的数据,例如mysql连接数、tps、qps、主从状态、延迟、资源(cpu、内存、磁盘、iowait)等等,这些指标在一个dashboard上,而新收集的mha运行状态是新增的的一个mysql指标,所以,应该将mha运行状态作为既有mysql dashboard的一个panel.
在mysql实例节点上汇报的数据是各个节点的host 和 instance(server ip:端口);而mha 运行状态汇报的数据是manager节点的host 和 各个实例server ip。所以,依据host 关联,整合到一个dashboard是实现不了的(因为没有关联性)。只能通过 instance(server ip:端口) 和 server ip 进行关联了.
首先,将instance(server ip:端口) 正则下,去除端口数据,实现方式,增加一个grafana变量--server_ip,如下:
注意上面的数据源来自measurement为mysql.
然后,再增加一个grafana变量--mha_server,注意,会依赖上面的变量server_ip.
这样 mysql 和 masterha_check_status 两个measurement就关联起来了,可以联动了.
最后,增加 panel设置下,就可以了,如下.
sql 语句如下
1
|
select
mean(
"status"
)
from
"masterha_check_status"
where
(
"server"
=~ /^$mha_server$/)
and
$timefilter
group
by
time
(1m) fill(
null
)
|
运行状态为1,异常或关闭为0. 。
还可以增加alarm告警,例如邮箱、微信、钉钉等,在此就不展开了.
补充一点
因为优化后的监控方法,根据配置文件自动发现、自动调整监控。所以,如果新增一个mha,而这个过程又比较长,比如10分钟,这个时候,既有的mha监控可能会报错或报警.
为了避免这种情况发生,建议新增的mha的配置文件,最后再放至到mha配置文件的目录上。或者,先将配置文件放到其他的目录上,mha配置ok后,最后一步再移到/cnf/mhacnf目录下.
到此这篇关于mysql mha 运行状态监控介绍的文章就介绍到这了,更多相关mysql mha 运行状态监控内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://www.cnblogs.com/xuliuzai/p/15387089.html 。
最后此篇关于MySQL MHA 运行状态监控介绍的文章就讲到这里了,如果你想了解更多关于MySQL MHA 运行状态监控介绍的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
晚上在 QQ 上看到昵称为“乱码”的好友回答了搜搜问问里一个问题: 在VBS中有办法定义字节数组么? 在VBS中有办法定义字节数组么?就是字节子类型数组(VarType是8209的那种)注意不是V
例如,员工管理应用程序可能包括一个EmPloyee 类。然后可以用这个类来创建和维护特定实例,比如Gonn和Sally。 根据预定义的类创建对象常称为类的实例化(class insta
在自然语言中,我们理解抽象的概念是,一个物体的一种大的描述,这种描述对某类物体来说是共有的特性。那么在PHP中也是一样的,我们把一个类进行抽象,可以指明类的一般行为,这个类应该是一个模板,它指示它的
DBA_2PC_PENDING Oracle会自动处理分布事务,保证分布事务的一致性,所有站点全部提交或全部回滚。一般情况下,处理过程在很短的时间内完成,根本无法察觉到。但是,如果在commit或
目录 计算过程 投影分量计算 假设你有一家理发店,已经记录了过去一年中所有顾客的头发长度和发型偏好的数据。现在你想从这些数据中提取一些主要的信息,比如顾客最常
Object.defineProperty函数会直接在一个对象上定义一个新的属性,或者修改一个对象的现有属性,并返回此对象。 一、简单使用 const obj = {} Object.defineP
SPL官网 http://www.scudata.com.cn/ 介绍 业务逻辑经常包含较复杂的流程和计算,同时涉及数据库的读写。由于授权麻烦、影响数据库安全、无法迁移、技术要求高、编写困难等原因,很
SPL官网 http://www.scudata.com.cn/ 介绍 业务逻辑经常包含较复杂的流程和计算,同时涉及数据库的读写。由于授权麻烦、影响数据库安全、无法迁移、技术要求高、编写困难等原因,很
一 点睛 Thrift 是一歀基于 CS 架构的 RPC 框架,最初由 Facebook 研发,2008 年转入 Apache 组织。开发人员可以使用 Thrift 提供的 IDL(接口定义语言)来定
数据库应用程序与主应用程序分开存在,并存储数据集合。 每个数据库都使用一个或多个API来创建,访问,管理,搜索和复制其包含的数据。 数据库还使用非关系数据源,例如对象或文件。 然而,数据库证明是大数
介绍 Ant是一个 Apache 基金会下的跨平台的基于 Java 语言开发的构件工具。在我们详细了解 Apache Ant 之前, 让我们来讲解为什么构建工具是需要最先了解的。 构建工具的需求
我现在正在尝试学习ocaml,并希望从一个小程序开始,生成所有位组合: [“0”,“0”,“0”] [“0”,“0”,“1”] [“0”,“1”,“0”] ... 等等 我的想法是下面的代码: let
我正在做我的介绍 C 类(class)作业,我的任务是执行以下任务...... 为一个函数编写代码,该函数通过值接收两个参数(a 和 b)并通过引用具有另外两个参数(c 和 d)。所有参数都是双倍的。
我希望提供有关我网站内容的快速演示,以及如何在用户访问我的页面后立即以正确的方式使用它们。我希望使用顶部的弹出式窗口进行演示。 我的意思是小信息框,一个接一个地通知用户各个步骤。任何人都可以帮助我如何
与C、Java等语言一样,JavaScript中可以用&&、||、!三个逻辑判断符来对boolean值进行逻辑判断。与C、Java不同的是,JavaScript中逻辑与(&&
JavaScript中,==与===操作符均可用于判断两个值是否相等;不同之处在于,如果进行判断的两个值类型不一致,===操作符会直接返回false,而==操作符则会在类型转换后再进行判断。详细的判
JavaScript中,object转换为boolean的操作非常简单:所有的object转换成boolean后均为true;即使是new Boolean(false)这样的object在转换为bo
在android开发中,当不满足触发条件就按返回键的时候,就要对此进行检测。尤其是当前Activity需要往前一个Activity传送消息时。即Activity1跳转到Activity3如果采用的是
背景 当要求系统启动一个应用程序时,系统会先查找当前命令是否是内部命令,若不是,则在当前目录下查找,如果仍没有找到,则在系统变量 Path 指定的路径去查找。JDK(Java Developmen
概述 想做一个微信的公众平台,阅读了微信官方给的网址接入的示例代码,发现有个问题好像一直都是半知半解的,就是在类里边直接使用$_GET。仔细查了下关于这方面的知识,发现PHP中这部分的基础知识掌握
我是一名优秀的程序员,十分优秀!