- 模拟集群节点故障时如何正确的使用 SeuoqiaDB 巨杉数据库的诊断日志,高效准确的定位问题所在。
创建数据库及数据表
进入 MySQL Shell ,连接 SequoiaSQL-MySQL 实例并创建表,为接下来日志诊断分析做准备。
登录 MySQL Shell
1 | /opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root |
创建数据库
1 | CREATE DATABASE company; |
创建数据表
在 SequoiaSQL-MySQL 实例中创建的表将会默认使用 SequoiaDB 巨杉数据库存储引擎,包含主键或唯一键的表将会默认以唯一键作为分区键进行自动分区。
1)创建包含自增主键字段的 employee 表;
1 | CREATE TABLE employee |
2)基本的数据写入操作;
1 | INSERT INTO employee (ename, age) VALUES ("Jacky", 36); |
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; |
操作截图:
根据图片中的错误码 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": "" } )' |
从上图中我们可以看出集群中存在错误节点为 11820。
错误日志分析
查找协调节点日志文件所在的文件夹,打开日志文件 sdbdiag.log。
1)查询协调节点日志文件目录;
1 | sdb 'db.list(SDB_LIST_GROUPS, { "GroupName": "SYSCoord" } )' |
2)打开协调节点日志文件;
1 | vi /opt/sequoiadb/database/coord/11810/diaglog/sdbdiag.log |
如有关键字 ERROR,则说明数据库有报错,并根据 rc 后面的错误代码查看具体错误信息,本次错误代码为 -79。
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 |
Note:
按键盘
shift + g
去到文件最后可以看到节点为正常停止。
5)group1 数据节点服务未启动 , 启动 group1 的 11820 节点;
1 | sdbstart -p 11820 |
操作截图:
验证集群是否可用
1)登录 MySQL Shell ;
1 | /opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root |
2)查询数据并向表中插入数据;
1 | SELECT * FROM company.employee; |
此时数据服务已经恢复正常,能够正常写入和查询;
3)退出 MySQL Shell ;
1 | \q |