跳到主要内容

MetaDB 状态检查与基础维护

本文档介绍如何在高可用版 NineData 部署中查看 MetaDB 状态,并获取后续维护所需的关键信息。

当前 HA 部署中的 MetaDB 运行在 Kubernetes 中,日常检查通常通过 kubectl 配合 mysql、mysqlsh 完成。

步骤一:确认 Kubernetes 访问正常​

  1. 登录一台可访问 NineData Kubernetes 集群的 Master 节点。

  2. 执行以下命令,确认 kubectl 可用:

    kubectl version --client
  3. 确认 jz-component 命名空间存在:

    kubectl get ns jz-component

步骤二:确认 MetaDB 凭据与实例状态​

  1. 查看 MetaDB 凭据 Secret 是否存在:

    kubectl get secret -n jz-component ninedata-pwds
  2. 查看 MetaDB Pod 状态:

    kubectl get pods -n jz-component -o wide | grep ninedata-meta-cluster
  3. 如需同时查看 MetaDB 实例数与当前集群状态,可执行:

    kubectl get innodbcluster -n jz-component ninedata-meta-cluster -o yaml
    参数说明
    • instances 表示 MetaDB 规划的实例数。
    • onlineInstances 表示当前在线实例数。
    • status 用于查看当前集群状态,例如 ONLINE。

步骤三:获取 MetaDB 管理账号密码​

执行以下命令,将 root 密码写入当前会话的环境变量:

ROOT_PWD=$(kubectl get secret -n jz-component ninedata-pwds -o jsonpath='{.data.rootPassword}' | base64 -d)

后续命令可直接复用该变量,无需手工复制密码。

步骤四:通过 MySQL 检查实例基础信息​

执行以下命令,查看实例主机名、实例 UUID 和读写状态:

kubectl exec -n jz-component ninedata-meta-cluster-0 -c mysql -- sh -lc \
"MYSQL_PWD='$ROOT_PWD' mysql -uroot -Nse \"select @@hostname as host, @@server_uuid as server_uuid, @@read_only as read_only;\""

返回结果中:

  • host 表示当前 MetaDB 实例名。
  • server_uuid 表示该实例的唯一标识。
  • read_only 为 0 表示当前实例可写。

步骤五:通过 MySQL Shell 查看集群状态​

执行以下命令,获取 InnoDBCluster 的详细状态信息:

kubectl exec -n jz-component ninedata-meta-cluster-0 -c sidecar -- sh -lc \
"mysqlsh --js --user=root --password='$ROOT_PWD' --host=127.0.0.1 --port=3306 -e 'var s=dba.getCluster().status(); print(JSON.stringify(s, null, 2))'"

重点关注以下字段:

  • defaultReplicaSet.status:当前集群状态。
  • statusText:当前集群状态说明。
  • primary:当前 Primary 实例地址。
  • topology:各实例的角色、状态和版本信息。

步骤六:结束检查并清理本地变量​

检查完成后,建议清理当前会话中的密码变量:

unset ROOT_PWD

维护建议​

  • 建议所有 MetaDB 检查操作都在可执行 kubectl 的 Master 节点上完成。
  • 在执行任何高风险维护动作前,建议先查看 innodbcluster 当前实例数和 mysqlsh 返回的集群状态。
  • 当 MetaDB 处于单实例部署时,不具备故障容忍能力,建议在维护窗口内进行相关操作。
  • 如需进行多实例切换、节点重建或拓扑调整,请先确认当前 MetaDB 的实际部署方式,再执行对应的维护流程。