MySQL NDB Clusterとは
MySQLをベースとしたシェアードナッシング型の高可用性インメモリデータベースです。
基本的に全てのデータをメモリ上に保持するため、非常に高速なアクセスが可能です。
セットアップについて
MySQL NDB Clusterはシェアードナッシング型のアーキテクチャであるクラスタデータ
ベースであるため複数のホストマシンに対してインストール、 及び設定を行います。
この際、複数サーバへの接続が必要であったり、サーバ間の設定の整合性などをユー
ザー側で担保しなければならず、高度なMySQL NDB Clusterへの理解を求められます。
ORACLE社ではこの複雑さを軽減するため、コンフィグレーションツールとして、
ndb_setup.pyを提供しています。
ndb_setup.pyは、実行したホスト上で起動するPythonベースのWEBアプリケーション
です。
今回の検証ではこのndb_setup.pyを使用して複数ノード構成のMySQL NDB Clusterを
セットアップしました。
なお、ndb_setup.pyはコンフィグレーションツールでありインストーラではありません。
ソフトウェアのインストール自体は各ノードへ行う必要がありますのでご注意ください。
参考URL
NDB Cluster Auto-Installer Requirements
NDB Cluster Auto-Installer Overview
Using the NDB Cluster Auto-Installer
検証環境スペック
今回は以下のVMを用意して検証しました。
仮想化ソフト | VirtualBox |
OS | CentOS 7 |
CPU | 2 core |
Memory | 512M |
台数 | 3 |
作成した3台は以下のホスト名、用途としました。
ndb1 | データノード |
ndb2 | データノード |
ndbmng | SQLノード兼管理ノード |
ndb_setup.pyは独立したアプリケーションであるため、セットアップ対象のノードにSSH接続
できればどのマシンで実行してもかまいません。
今回はVMホストであるWindows8.1でndb_setup.pyを実行します。
ブラウザはFirefox(55.0.3)を使用しました。
前提条件
ndb_setup.pyが動作するシステム要件は以下の通りです。
Supported platforms | Linux, Windows, Solaris, MacOS X |
Supported Web browsers | Firefox ,Microsoft Internet Explorer(おそらくOpera, Safari, and Chrome及びそれらに互換性のあるブラウザでも動作します) |
Required software setup host | Python 2.6 or higher Paramiko 1.7.7.1 or higher Pycrypto version 2.6 or higher ※Windows版では上記の全てのソフトウェアはパッケージに同梱されています |
Required software target host | SSH(アクセスにはrootは使用不可) |
なおMySQL NDB Cluster 7.5.0/7.5.1ではndb_setup.pyは使用できません (Bug #79853, Bug #22502247※MyOracleSupportで公開されています).
MySQL NDB Cluster自体がサポートされるプラットフォームは以下からご確認ください。
https://www.mysql.com/support/supportedplatforms/cluster.html
MySQL NDB Clusterソフトウェアのインストール
Windows版は以下からダウンロードします
https://dev.mysql.com/get/Downloads/MySQL-Cluster-7.5/mysql-cluster-gpl-7.5.7-winx64.msi
ダウンロードしたMSIを実行し、GUIインストーラを起動します。
インストールタイプとしてtypical/custom/completeが選択できますが、今回はcomplete
を選択しました。
特に迷う箇所はありませんが、必要に応じてインストール先の変更などを行います。
Nextボタンを押下して、インストールを完了させてください。
検証環境のノードはLinuxとなりますので、別途インストールします。
全ノードでMySQLのリポジトリを登録
1 2 |
$ yum -y install epel-release $ yum -y install https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm |
データノード(ndb1、ndb2)でデータノードのRPMをインストール
1 2 |
$ yum -y --enablerepo=mysql-cluster-7.5-community install \ mysql-cluster-community-data-node.x86_64 |
SQLノード兼管理ノード(ndbmng)で管理ノード、SQLノードのRPMをインストール
1 2 3 4 5 6 |
$ yum -y --enablerepo=mysql-cluster-7.5-community install \ mysql-cluster-community-client.x86_64 \ mysql-cluster-community-common.x86_64 \ mysql-cluster-community-libs.x86_64 \ mysql-cluster-community-server.x86_64 \ mysql-cluster-community-management-server.x86_64 |
ndb_setup.pyの実行
インストーラ本体はndb_setup.pyですが、Windows環境ではBATファイル(setup.bat)が
用意されているためコマンドプロンプトから実行します。
1 |
C:\> "C:\Program Files\MySQL\MySQL Cluster 7.5\setup.bat" |
実行後、プロンプトが起動し、デフォルトブラウザで初期画面が表示されます。
マニュアルからは記載が確認できませんでしたが、検証の際にはhttp://<起動ホストのIP>:8081で起動しました。
リモートからアクセスする際には、ご注意下さい。
以降ブラウザで全ての操作を行います。
初期画面
初期セットアップのため「Create New MySQL Cluster」を選択します
Cluster Type and SSH Credentials画面
項目名 | 値 |
---|---|
Cluster name | MySQL NDB Clusterのクラスタ名(任意) |
Host list | インストールターゲットとなるホストのIP、もしくはFQDNのカンマ区切りのリスト |
Application area | アプリケーションの使用目的。simple testing、web application、realtimeを選択できます。 |
Write load | 書き込みのワークロード量のレベル。low、medium、highから選択します。 |
今回はHost listには以下の値を設定し、他はデフォルトとしました。
1 |
192.168.33.14,192.168.33.15,192.168.33.16 |
SSHは公開鍵認証の場合、ndb_setup.pyの実行ユーザー固定となるため、vagrantユーザーとパスワードを指定しました。
Nextを押下すると、SSHの通信チェックが行われます。
通信ができない場合ポップアップが表示されますので、cancelを押下し、適切なSSHの設定を行います。
Select and Edit Hosts画面
SSHを介して取得したホスト情報が表示されます。
特に実行ファイルのパスやOSなど変更する必要がなければNextを押下します。
今回は、yumでインストールしたことで/sbin配下に実行ファイルが配置されたため
「MySQL Cluster install directory」を/sbinに変更しました。
なお、見てわかるように実行ファイルのパスは1つしか設定できません。
後述する停止の操作にはmysqladmin、ndb_mgmといったクライアントツールを
使用しますが、これらのツールは/bin配下に存在します。
今回は/bin配下の上記ツールを/sbinにシンボリックリンクで作成しました。
1 2 3 |
※ndbmngで実行 $ ln -s /bin/mysqladmin /sbin/mysqladmin $ ln -s /bin/ndb_mgm /sbin/ndb_mgm |
Define Processes and Cluster Topology画面
選択したノードを使って構成する場合のMySQL NDB Clusterのトポロジが表示されます。
必要に応じて、SQLノードやデータノードの追加を行います。
データノードについては、ndbd(シングルスレッド)、ndbmtd(マルチスレッド)を選択できます。
最近はシングルコアのCPUのマシンも珍しいので、通常はndbmtdで問題ないでしょう。
Define Processes Parameters画面
ノードごとのパラメータを指定しますが、ここで設定できるのはDatadirやPort、Socketくらいにとどまります。
細かなパラメータはインストール後に設定する必要があります。
Deploy Configuration and start MySQL Cluster画面
ターゲットホストに対して、これまで設定したノードをデプロイします。
Startup commandではホスト、実行ファイルのパス、実行ファイル名、オプションを確認できます。
Configuretion fileでは、管理ノードであればConfig.iniの内容、SQLノードであればmy.cnfの内容が確認できます。
Deploy Clusterボタンを押下すると、実際に設定がデプロイされます。
プログレスバーが表示され、完了すると「Directories created and configuration deployed」というポップアップが表示されます。
この時点で各ノードでは必要なディレクトリの作成、設定ファイルの配布が完了します。
これで構築は完了ですが、本当に起動するかを試したい場合は、 Deploy and Start Clusterボタンを押下します。
管理ノード、データノード、SQLノードの順に起動していきます。
起動を実行したが異常停止した状態は赤、起動中は黄、起動済みは青のマークが表示されます。
正常停止、もしくはデプロイのみした状態である場合は歯車のマークが表示されます。
起動したClusterはStop Clusterで停止できます。
この時は起動と逆順で停止されていきます。
以上がndb_setup.pyの検証結果となります。
所感
細かな設定はできませんが、検証用途のMySQL NDB Clusterのセットアップや、本番環境の構築時にひな形を作成する用途では非常に有用だと思います。
MySQLClusterの敷居がぐっと下がりますので、ぜひお試しください。