0%

SequoiaDB之诊断日志分析

  • 模拟集群节点故障时如何正确的使用 SeuoqiaDB 巨杉数据库的诊断日志,高效准确的定位问题所在。

创建数据库及数据表

进入 MySQL Shell ,连接 SequoiaSQL-MySQL 实例并创建表,为接下来日志诊断分析做准备。

登录 MySQL Shell

1
/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root

创建数据库

1
2
CREATE DATABASE company;
USE company;

创建数据表

在 SequoiaSQL-MySQL 实例中创建的表将会默认使用 SequoiaDB 巨杉数据库存储引擎,包含主键或唯一键的表将会默认以唯一键作为分区键进行自动分区。

1)创建包含自增主键字段的 employee 表;

1
2
3
4
5
6
CREATE TABLE employee 
(
empno INT AUTO_INCREMENT PRIMARY KEY,
ename VARCHAR(128),
age INT
);

2)基本的数据写入操作;

1
2
INSERT INTO employee (ename, age) VALUES ("Jacky", 36);
INSERT INTO employee (ename, age) VALUES ("Alice", 18);

3)查看数据情况;

1
SELECT * FROM employee;

4)退出 MySQL Shell;

1
\q

模拟节点故障

目前集群为正常状态,我们停止一个数据节点 11820 模拟节点故障的情况。

1)停止 11820 数据节点;

1
sdbstop -p 11820

2)登录 MySQL Shell ;

1
/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root

3)查询数据;

1
SELECT * FROM company.employee;

操作截图:

890-4

根据图片中的错误码 40250 计算得出 SequoiaDB 对应错误码为 -250(节点处于业务故障状态)。

关于 SequoiaSQL-MySQL 错误码的详细信息,请参考如下链接:

4)退出 MySQL Shell;

1
\q

通过快照查询集群情况

在 SequoiaDB 中,快照是一种得到系统当前状态的命令,当集群故障时我们可以使用快照进行初步分析节点;

1)使用嵌入命令模式连接 SequoiaDB 巨杉数据库协调节点;

1
sdb 'db = new Sdb("localhost", 11810)'

2)查询数据库快照列出当前数据库节点的数据库监视信息;

1
sdb 'db.snapshot(SDB_SNAP_DATABASE, {}, { "ErrNodes": "" } )'

890-2

从上图中我们可以看出集群中存在错误节点为 11820。

错误日志分析

查找协调节点日志文件所在的文件夹,打开日志文件 sdbdiag.log。

1)查询协调节点日志文件目录;

1
sdb 'db.list(SDB_LIST_GROUPS, { "GroupName": "SYSCoord" } )'

890-2

2)打开协调节点日志文件;

1
vi  /opt/sequoiadb/database/coord/11810/diaglog/sdbdiag.log

如有关键字 ERROR,则说明数据库有报错,并根据 rc 后面的错误代码查看具体错误信息,本次错误代码为 -79。

890-5

Note:

每次虚拟机环境初始化,数据节点 id 和 所属数据组 id 序号都会有变化。

具体错误代码请参考如下链接:

根据 NodeID 定位到发生错误的具体节点,查看该节点的诊断日志文件。

3)根据协调节点日志文件中错误信息,定位具体服务节点,其中 GroupID 和 NodeID 以日志文件中的具体值为准;

1
sdb 'db.list(SDB_LIST_GROUPS, { GroupID: 1002, "Group.NodeID": 1002}, {} );'

4)打开 11820 数据节点日志文件;

1
more /opt/sequoiadb/database/data/11820/diaglog/sdbdiag.log

890-5

Note:

按键盘 shift + g 去到文件最后可以看到节点为正常停止。

5)group1 数据节点服务未启动 , 启动 group1 的 11820 节点;

1
sdbstart -p 11820

操作截图:

890-7

验证集群是否可用

1)登录 MySQL Shell ;

1
/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root

2)查询数据并向表中插入数据;

1
2
SELECT * FROM company.employee;
INSERT INTO company.employee (ename, age) VALUES ("Ben", 21);

此时数据服务已经恢复正常,能够正常写入和查询;

3)退出 MySQL Shell ;

1
\q
-------------本文结束感谢您的阅读-------------