探索MySQL-Cluster奥秘系列之日志管理(12)

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 无论是对于哪种数据库产品,日志的重要性是不言而喻的,所以掌握如何对于MySQL-Cluster集群的日志进行管理,对于我们每一个维护MySQL-Cluster技术人员来说都是非常重要的。

作为数据库的维护人员(即 DBA),除了工作中在应用端对数据库进行增删改操作外,更多是需要每天巡检与常规维护运行的 MySQL Cluster 环境,确保 MySQL Cluster 环境可以正常运行。所以说,我们需要掌握 MySQL Cluster 维护性方面的技能例如如何通过日志信息排查问题如何对数据进行有效的备份等

这一小节,我们就先来看一下 MySQL Cluster 集群环境日志管理的内容,主要讲解MySQL Cluster环境出现问题时如何来诊断,以及对日志在信息输出上进行一些细粒度的控制。

MySQL Cluster 集群日志主要分为集群日志、节点日志:

  • 集群日志文件存储于管理节点上,用来记录整个集群的运行情况,如各个节点的连通性等,以及所有节点的运行情况。
  • 节点日志文件存储于单独的某个节点上,只是用来记录本地节点上的服务运行情况。

首先我们来看集群日志文件在管理上面的内容。

集群日志文件

集群日志文件默认位于管理节点上的 datadir 目录下,我们可以看一下当前环境的配置文件。

[mysql@mysql03 mysql_cluster]$ more config.ini 
[ndbd default]
NoOfReplicas=2
DataMemory=200M
IndexMemory=30M
[ndb_mgmd]
hostname=192.168.1.3
datadir=/mysql/mydata
[ndbd]
hostname=192.168.1.6
datadir=/mysql/mydata
[ndbd]
hostname=192.168.1.7
datadir=/mysql/mydata
[mysqld]
hostname=192.168.1.4
[mysqld]
hostname=192.168.1.5

在当前的配置文件中,datadir 目录路径为 /mysql/mydata,集群日志文件命名为 ndb_1_cluster.log,文件名中的 1 代表的是管理节点的 nodeid,下面这段代码中显示的管理节点的id=1,那么其实在工作中如果不清楚某一个数据节点或者SQL节点的id值,则可以在ndb_mgm控制台上进行查看。

[mysql@mysql03 mydata]$ ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show;
Connected to Management Server at: localhost:1186
Cluster Configuration
[ndbd(NDB)] 2 node(s)
id=2 (not connected, accepting connect from 192.168.1.6)
id=3 (not connected, accepting connect from 192.168.1.7)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.1.3 (mysql-5.7.36 ndb-7.6.20)
[mysqld(API)] 2 node(s)
id=4 (not connected, accepting connect from 192.168.1.4)
id=5 (not connected, accepting connect from 192.168.1.5)

我们来看一下集群日志文件 ndb_1_cluster.log 中所记录的信息。

[mysql@mysql03 mydata]$ tail -30 ndb_1_cluster.log 
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: m_LAST_LCP_FRAG_ORD = [SignalCounter: m_count=0 0000000000000000]
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: m_LCP_COMPLETE_REP_From_Master_Received = 1
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: GCP Take over started
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: Node 3 taking over as DICT master
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: GCP Take over completed
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: kk: 63150/7 0 0
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: LCP Take over completed (state = 4)
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: ParticipatingDIH = 0000000000000000
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: ParticipatingLQH = 0000000000000000
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: m_LCP_COMPLETE_REP_Counter_DIH = [SignalCounter: m_count=0 0000000000000000]
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: m_LCP_COMPLETE_REP_Counter_LQH = [SignalCounter: m_count=0 0000000000000000]
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: m_lastLCP_COMPLETE_REP_id = 6
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: m_lastLCP_COMPLETE_REP_ref = f60002
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: noOfLcpFragRepOutstanding: 0
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: m_LAST_LCP_FRAG_ORD = [SignalCounter: m_count=0 0000000000000000]
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: m_LCP_COMPLETE_REP_From_Master_Received = 1
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: NR Status: node=2,OLD=Node failed, fail handling ongoing,NEW=Node failure handling complete
2022-03-22 17:25:48 [MgmtSrvr] INFO     -- Node 3: Started arbitrator node 1 [ticket=1396000207fa2381]
2022-03-22 17:25:51 [MgmtSrvr] INFO     -- Node 3: Communication to Node 2 opened
2022-03-22 17:26:03 [MgmtSrvr] INFO     -- Node 3: Node shutdown completed. Initiated by signal 15.
2022-03-22 17:26:03 [MgmtSrvr] ALERT    -- Node 1: Node 3 Disconnected
2022-03-22 17:31:48 [MgmtSrvr] INFO     -- Shutting down server...
2022-03-22 17:31:55 [MgmtSrvr] INFO     -- Shutdown complete
2022-03-22 17:32:40 [MgmtSrvr] INFO     -- Loaded config from '/usr/local/mysql/mysql-cluster/ndb_1_config.bin.1'
2022-03-22 17:32:41 [MgmtSrvr] INFO     -- Node 1: Node 1 Connected
2022-03-22 17:32:41 [MgmtSrvr] INFO     -- Id: 1, Command port: *:1186
2022-03-22 17:32:41 [MgmtSrvr] INFO     -- MySQL Cluster Management Server mysql-5.7.36 ndb-7.6.20 started
2022-03-22 17:32:41 [MgmtSrvr] INFO     -- Node 1 connected
2022-03-22 17:33:11 [MgmtSrvr] INFO     -- Loaded config from '/usr/local/mysql/mysql-cluster/ndb_1_config.bin.1'
2022-03-22 17:33:11 [MgmtSrvr] ERROR    -- Couldn't start as daemon, error: 'Failed to lock pidfile '/mysql/mydata/ndb_1.pid', already locked by pid=3193, errno: 11'

通过日志的输出可以看到,集群日志文件中记录了每个数据节点及每个SQL节点的运行情况,还显示了不同级别的信息,如上面的日志中包括有 INFO、ALERT、ERROR,当然除了这几类,还有 WARNING、CRITICAL和DEBUG 级别。这几类日志级别的信息严重程度不同,是逐级递减的,顺序下:ALERT、CRITICAL、ERROR、WARNING、INFO、DEBUG。

每个级别的日志所表描述的日志信息内容如下:

严重级别

事件定义

ALERT

应立刻更正的情况,如损坏的系统数据库

CRITICAL

临界状况,如设备错误或资源不足

ERROR

应予以更正的状况,如配置错误

WARNING

不能称为错误的情况,但仍需要特别处理

INFO

通报性信息

DEBUG

调试信息,用于NDB Cluster开发

在工作中,当遇到 WARNING 及以上级别的日志信息时,需要格外注意并及时处理了。

在了解完不同级别的日志所代表的信息后接下来我们继续对集群日志信息进行一些自定义的操作,因为在集群日志文件中会集中显示所有数据节点和SQL节点的运行情况,在日志的输出上是非常大的,这样会给我们在排查问题上带来一些不便,所以我们在工作中很有必须对于一些不太关注的信息进行屏蔽比如:

  • 临时关闭集群日志信息的输出;
  • 或者关闭某几个级别的日志信息输出(像 INFO 和 DEBUG 级别的日志信息只是输出一些常规的运行情况,这些信息对问题的排查起不到有效作用)。

首先我们来看一下,如果关闭集群全部的日志信息,具体要怎么操作。

当磁盘的空间比较紧张或者在一些压力测试的场景下,我们不怎么在意集群的日志信息输出,这时可以将集群的日志信息整体关闭,关闭时要在管理节点上的 ndb_mgm 控制台下进行操作,具体如何操作呢?接下来我们进行一个演示。

[mysql@mysql03 mydata]$ ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> clusterlog info;
Severities enabled: INFO WARNING ERROR CRITICAL ALERT  
ndb_mgm> clusterlog off;
Cluster logging is disabled
ndb_mgm> clusterlog info;
Cluster logging is disabled.
ndb_mgm> clusterlog on;
Cluster logging is enabled.
ndb_mgm> clusterlog info;
Severities enabled: INFO WARNING ERROR CRITICAL ALERT

通过上面的代码,我们可以掌握以下几点信息:

  • 关闭集群日志功能是使用 clusterlog off 命令来实现;
  • 开启集群日志功能是使用 clusterlog on 命令来实现;
  • 查看当前的日志级别使用 clusterlog info 命令;
  • 默认开启的日志级别为 INFO WARNING ERROR CRITICAL ALERT。

由于 DEBUG 级别的日志信息是用来调试和观察数据库内部运行机理,在日志输出上更为详细,同时输出的日志量也非常大,所以我们一般不需要开启。如果要进行开启 DEBUG 级别的日志信息输出,可以使用如下的方式:

ndb_mgm> clusterlog toggle  debug;
DEBUG enabled
ndb_mgm> clusterlog info;
Severities enabled: DEBUG INFO WARNING ERROR CRITICAL ALERT

那么如何只开启部分级别的日志输出呢?同样是需要在 ndb_mgm 控制台操作,例如我们只需要开启WARNING 及以上级别的日志输出,则可以这样进行操作:

ndb_mgm> clusterlog info;
Severities enabled: DEBUG INFO WARNING ERROR CRITICAL ALERT 
ndb_mgm> clusterlog toggle debug  info;
DEBUG disabled
INFO disabled
ndb_mgm> clusterlog info;
Severities enabled: WARNING ERROR CRITICAL ALERT

即对于某个级别日志信息输出功能的开启和关闭是使用 clusterlog toggle 命令实现的,在操作上非常简单。以上是集群日志文件日常管理方面内容的讲解。接下来,我们来看一下节点日志文件,在节点日志方面,因为其是存放在各自的节点上的,在日志的输出上也只是显示当前节点的运行情况,所以大家只需要了解每种节点(数据节点、SQL 节点)上日志文件存放的位置就行这样当某个节点出现故障时,要知道从哪里可以获取到相关的信息

节点日志文件

数据节点的日志文件默认时存放在 datadir 目录下,名称一般为 ndb_<nodeid>_out.log。如环境中的ndb_3_out.log。

[mysql@mysql07 ~]$ ls -l /mysql/mydata/
total 80
drwxr-x--- 11 mysql mysql    99 Mar  8 22:34 ndb_3_fs
-rw-r--r--  1 mysql mysql 76331 Mar 10 13:28 ndb_3_out.log
-rw-r--r--  1 mysql mysql     4 Mar 10 13:28 ndb_3.pid

而 SQL 节点的日志文件默认时存放在 datadir 目录下,名称一般为<hostname>.err。如环境中的mysql04.err。

[mysql@mysql04 mydata]$ ls -l /mysql/mydata/
total 123020
-rw-r----- 1 mysql mysql       56 Mar  8 22:35 auto.cnf
-rw------- 1 mysql mysql     1676 Mar  8 22:35 ca-key.pem
-rw-r--r-- 1 mysql mysql     1140 Mar  8 22:35 ca.pem
-rw-r--r-- 1 mysql mysql     1140 Mar  8 22:35 client-cert.pem
-rw------- 1 mysql mysql     1680 Mar  8 22:35 client-key.pem
-rw-r----- 1 mysql mysql      358 Mar 10 11:09 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 Mar 10 13:28 ibdata1
-rw-r----- 1 mysql mysql 50331648 Mar 10 13:28 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Mar  8 22:35 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 Mar 10 13:28 ibtmp1
drwxr-x--- 2 mysql mysql     4096 Mar  8 22:36 mysql
-rw-r----- 1 mysql mysql    55332 Mar 10 13:28 mysql04.err
-rw-r----- 1 mysql mysql        5 Mar 10 13:28 mysql04.pid
srwxrwxrwx 1 mysql mysql        0 Mar 10 13:28 mysql.sock
-rw------- 1 mysql mysql        5 Mar 10 13:28 mysql.sock.lock
drwxr-x--- 2 mysql mysql     4096 Mar  8 22:35 ndbinfo
drwxr-x--- 2 mysql mysql     8192 Mar  8 22:35 performance_schema
-rw------- 1 mysql mysql     1676 Mar  8 22:35 private_key.pem
-rw-r--r-- 1 mysql mysql      452 Mar  8 22:35 public_key.pem
-rw-r--r-- 1 mysql mysql     1140 Mar  8 22:35 server-cert.pem
-rw------- 1 mysql mysql     1680 Mar  8 22:35 server-key.pem
drwxr-x--- 2 mysql mysql     8192 Mar  8 22:35 sys
drwxr-x--- 2 mysql mysql      104 Mar 10 09:53 testdb

好了,以上就是 MySQL Cluster 集群环境中,日志管理方面内容的讲解。在下一小节中,我们开始讲解MySQL Cluster 集群环境的备份。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4天前
|
存储 关系型数据库 MySQL
|
4天前
|
存储 SQL 关系型数据库
|
5天前
|
存储 关系型数据库 MySQL
|
5天前
|
SQL 运维 关系型数据库
|
5天前
|
存储 关系型数据库 MySQL
|
6天前
|
存储 关系型数据库 MySQL
|
11天前
|
存储 关系型数据库 MySQL
关系型数据库mysql日志和临时文件
【6月更文挑战第15天】
30 4
|
6天前
|
SQL 关系型数据库 MySQL
MySQL进阶 - 日志
MySQL进阶 - 日志
7 0
|
12天前
|
存储 关系型数据库 MySQL
MySQL日志——redolog
MySQL日志——redolog
32 0
|
12天前
|
SQL 存储 关系型数据库
MySQL日志——undolog
MySQL日志——undolog
26 0