スマートスタイル TECH BLOG

データベース&クラウド技術情報

MySQL Cluster Manager による MySQL NDB Cluster の運用・管理

MySQL NDB Cluster を自動管理したい

MySQL NDB Cluster はそれ単体でも管理ノードの mgmd を用いることで管理ノード・データノードの停止やデータノードのメモリ使用状況等の操作は可能です
しかし、今回紹介する MySQL Cluster Manager(以下 MCM)を使用することで、API ノードを含めた管理を行うことが可能になり、運用面でさらなる簡素化(自動化)が可能になる製品です
そこで MCM によりどのような自動化が可能かを紹介したいと思います

検証環境

構成

  • 管理ノード
    • mgm01: 192.168.31.201
    • mgm02: 192.168.31.202
  • API ノード
    • sql01: 192.168.31.51
    • sql02: 192.168.31.52
  • データノード
    • data01: 192.168.31.1
    • data02: 192.168.31.2

※全て CentOS Linux release 7.4.1708 (Core) で構成

MySQL NDB Cluster を構成するパッケージ

  • 管理ノード
    • mysql-cluster-community-libs-7.5.8-1.el7.x86_64
    • mysql-cluster-community-common-7.5.8-1.el7.x86_64
    • mysql-cluster-community-client-7.5.8-1.el7.x86_64
    • mysql-cluster-community-libs-compat-7.5.8-1.el7.x86_64
    • mysql-cluster-community-management-server-7.5.8-1.el7.x86_64
  • API ノード
    • mysql-cluster-community-libs-7.5.8-1.el7.x86_64
    • mysql-cluster-community-common-7.5.8-1.el7.x86_64
    • mysql-cluster-community-client-7.5.8-1.el7.x86_64
    • mysql-cluster-community-libs-compat-7.5.8-1.el7.x86_64
    • mysql-cluster-community-server-7.5.8-1.el7.x86_64
  • データノード
    • mysql-cluster-community-data-node-7.5.8-1.el7.x86_64

11/20 時点の最新版を RPM でインストール(こちらはコミュニティ版をインストール)

MCM のパッケージ

  • mcm-1.4.4-linux-el7-x86-64bit.tar.gz

11/20 時点で OracleLinux/RHEL 7 用の RPM パッケージは存在していないため、tar ball 版を使用しています

MCM のインストール

MCM の初期設定

  • こちらもマニュアルのChapter 3 Using MySQL NDB Cluster Manager に沿って進めていきますが、上記構成の場合はパッケージが足らずエラー(遭遇したエラー その1)になりました
  • また、RPMパッケージが足りない以外にも以下のようなエラー(遭遇したエラー その2から5)に遭遇しています
  • サイト名・パッケージ名・クラスタ名はそれぞれ、ss-site、7.5.8-RPM、ss-cluster に変更して実施しています

遭遇したエラー その1

データノードに mysqldump コマンドが必要らしいので、mysql-cluster-community-client パッケージを追加インストールしました
※依存関係で、mysql-cluster-community-common、mysql-cluster-community-libs、mysql-cluster-community-libs-compat も追加インストールしています
※mariadb-libs がすでにインストールされていますが、mysql-cluster-community-libs-compat をインストールすることで mariadb-libs はアンインストールされ、依存関係も mysql-cluster-community-libs-compat で解消されます

遭遇したエラー その2

ndb_cluster_connection_pool = 2 にしていたのと、mysqld の NodeId を不定にしていたのが悪かったのか、正常に import config できませんでした
そのため、ndb_cluster_connection_pool はコメントアウトし、各 API ノードも含めて NodeId は固定で設定しました
マニュアルに NodeId は全てのノードで設定してくださいと書かれていました
 ndb_cluster_connection_pool に関してもマニュアル に set を用いて設定する記述がありますので、そのようにすれば問題無いかもしれません

遭遇したエラー その3

データノードの起動オプションに –nostart オプションを付けて起動していたのですが、 import config 時に

とエラーになりますので、–nostart オプションは削除して起動する必要があります

遭遇したエラー その4

API ノードの MySQL と MCM エージェントの起動ユーザが異なっていると、mysqld の pid ファイルが読めずエラーになりました
ディレクトリのパーミッションや OS ユーザのサブグループを設定しても解決できず、MCM エージェントを mysql ユーザで動かすことでなんとか動きました
また、その際の mysqld の起動オプションでも –defaults-file か –no-defaults が必要と怒られたりもしていますので、起動ユーザやオプションは要注意ポイントとなります
※管理ノードとデータノードのプロセスも MCM エージェントと同じユーザで起動する必要がありますので、各プロセスと MCM エージェントは同一ユーザで起動しなければなりません

遭遇したエラー その5

すでに構築済みの MySQL NDB Cluster に MCM を設定していたのですが、API ノードのデータディレクトリパスに関する設定不備・認識不足のため、通常の /var/lib/mysql で動かそうとしていました
しかし、MCM が要求していたデータディレクトリのパスは別のところに設定されていたため、API ノード停止後に起動しようとしても、mysqld の必要ファイル郡が存在しないため、エラーで起動できませんでした
MCM 上で mysqld を初期化して起動することで mysqld の実行に必要なファイル群がデータディレクトリに配置され、起動可能になりました

MCM による MySQL NDB Cluster の操作(一例)

いろいろと躓きはしましたが、なんとか設定が完了したようなので、MCM で MySQL NDB Cluster の管理(起動・停止等)を行ってみたいと思います

設定された各ノード

クラスタ全体の停止

クラスタ全体の起動

特定プロセスの停止(ex. 管理ノード1号機の管理プロセス)

特定プロセスの起動(ex. 管理ノード1号機の管理プロセス)

感想

  • 単純な停止だけだと管理ノードからでもある程度操作は可能だが、起動まで可能なのは自動化を考えるとメリットは大きいと思います
    • 停止だけでも API ノードが複数存在していると、それぞれのサーバにログインして停止する必要があるので、煩雑な操作が解消されそうです
  • プロセスの稼動状態が MCM から取得可能なため、プロセス監視・制御を一元管理することも可能になります
  • 今回は未検証だが、MCM からバックアップ・リストアが可能です
  • こちらも未検証だが、レプリケーション設定やアップグレードも可能です
  • マニュアルをかなり読み込まないと設定に詰まるポイントが多いのはデメリットです
    • MCM を利用する環境ならオラクルサポートを受けれる状態なはずなので、本番運用時にはサポートに頼れば良いと思います
    • ただ、試用・検証時に詰まってしまうと導入に躊躇してしまうかもしれないです
  • Package という機能で各コマンドのインストールパスを指定できるため、RPM 版と Tar ball 版の両方に対応できています
    • 今回は最新版で検証を行った都合もあり、アップグレード操作の検証ができなかったが、RPM 版でどのようにアップグレードできるのかが不明です
    • Tar ball 版の場合は、add package –basedir=/usr/local/ndb-7.5.x 7.5.x; の様にし、バージョンごとにパッケージを登録したのち、そのパッケージを使うように指定すればアップグレードすることができる模様です

MySQL

 

Return Top