MySQLは、無料のオープンソースのリレーショナルデータベース管理システムです。データウェアハウジング、eコマース、ロギングアプリケーションなど、さまざまな目的でデータを保存するために使用されます。 MySQL Clusterは、スケーラビリティと可用性を低コストで提供するテクノロジーです。
このチュートリアルでは、1つのマスターノードを使用してクラスターの構成を保存し、2つのデータノードを使用してクラスターデータを保存します。各ノードのIPアドレスを以下に示します。
- マスターノードまたはマネージャーノード-104.245.33.61
- データノード1-104.245.32.195
- データノード2-69.87.218.169
- Debian 10を実行している3台のサーバー(1台はマネージャーノード用、その他はデータノード用)。
- ルートパスワードは各サーバーに設定されています。
まず、すべてのサーバーを最新バージョンに更新する必要があります。次のコマンドですべてを更新できます:
apt-get update -y
すべてのサーバーが更新されたら、次のステップに進むことができます。
MySQLClusterManagerのインストールとセットアップ
まず、マスターノードにMySQLクラスター管理パッケージをインストールする必要があります。デフォルトでは、このパッケージはDebian10のデフォルトリポジトリに含まれていません。そのため、MySQLの公式Webサイトからダウンロードする必要があります。
次のコマンドでダウンロードできます:
wget https://cdn.mysql.com//Downloads/MySQL-Cluster-8.0/mysql-cluster-community-management-server_8.0.24-1debian10_amd64.deb
debファイルをダウンロードしたら、次のコマンドを使用してインストールします。
dpkg -i mysql-cluster-community-management-server_8.0.24-1debian10_amd64.deb
インストールが完了したら、次のコマンドを使用してクラスター構成を保存するディレクトリを作成します。
mkdir /var/lib/mysql-cluster
次に、次のコマンドを使用して新しい構成ファイルを作成します。
nano /var/lib/mysql-cluster/config.ini
次の行を追加します:
[ndbd default] NoOfReplicas=2 # Number of replicas [ndb_mgmd] # Management process options: hostname=104.245.33.61 #IP of the MySQL Cluster Manager datadir=/var/lib/mysql-cluster [ndbd] hostname=104.245.32.195 #IP of the first data node NodeId=2 # Node ID for this data node datadir=/usr/local/mysql/data # Remote directory for the data files [ndbd] hostname=69.87.218.169 #IP of the second data node NodeId=3 # Node ID for this data node datadir=/usr/local/mysql/data # Remote directory for the data files [mysqld] # SQL node options: hostname=104.245.33.61 #IP of the MySQL Cluster Manager
終了したらファイルを保存して閉じ、次のコマンドでクラスタマネージャを起動します。
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
次の出力が得られるはずです:
MySQL Cluster Management Server mysql-8.0.24 ndb-8.0.24 2021-05-10 08:23:05 [MgmtSrvr] INFO -- The default config directory '/usr/mysql-cluster' does not exist. Trying to create it... 2021-05-10 08:23:05 [MgmtSrvr] INFO -- Sucessfully created config directory
次に、次のコマンドで実行中のサーバーを強制終了します。
pkill -f ndb_mgmd
次に、MySQLClusterManagerがサービスを管理するためのsystemdサービスファイルを作成します。
nano /etc/systemd/system/ndb_mgmd.service
次の行を追加します:
[Unit] Description=MySQL NDB Cluster Management Server After=network.target auditd.service [Service] Type=forking ExecStart=/usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure [Install] WantedBy=multi-user.target
ファイルを保存して閉じてから、次のコマンドを使用してsystemdデーモンをリロードします。
systemctl daemon-reload
次に、次のコマンドを使用して、クラスタマネージャを起動し、システムの再起動時に起動できるようにします。
systemctl start ndb_mgmd
systemctl enable ndb_mgmd
これで、次のコマンドを使用してサービスのステータスを確認できます。
systemctl status ndb_mgmd
次の出力が得られるはずです:
? ndb_mgmd.service - MySQL NDB Cluster Management Server Loaded: loaded (/etc/systemd/system/ndb_mgmd.service; disabled; vendor preset: enabled) Active: active (running) since Mon 2021-05-10 08:23:53 UTC; 6s ago Process: 984 ExecStart=/usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini (code=exited, status=0/SUCCESS) Main PID: 985 (ndb_mgmd) Tasks: 12 (limit: 2359) Memory: 6.5M CGroup: /system.slice/ndb_mgmd.service ??985 /usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini May 10 08:23:53 master systemd[1]: Starting MySQL NDB Cluster Management Server... May 10 08:23:53 master ndb_mgmd[984]: MySQL Cluster Management Server mysql-8.0.24 ndb-8.0.24 May 10 08:23:53 master systemd[1]: Started MySQL NDB Cluster Management Server.
終了したら、次のステップに進むことができます。
次に、他のサーバー上のデータノードパッケージを作成し、MySQLClusterManagerと通信するように構成します。
まず、次のコマンドを使用して、両方のデータノードに必要な依存関係をインストールします。
apt-get install libclass-methodmaker-perl -y
すべての依存関係がインストールされたら、次のコマンドを使用して最新バージョンのMySQL DataNodesdebファイルをダウンロードします。
wget https://cdn.mysql.com//Downloads/MySQL-Cluster-8.0/mysql-cluster-community-data-node_8.0.24-1debian10_amd64.deb
ダウンロードが完了したら、次のコマンドを使用してダウンロードしたファイルをインストールします。
dpkg -i mysql-cluster-community-data-node_8.0.24-1debian10_amd64.deb
デフォルトでは、データノードはすべての構成を/etc/my.cnfファイルに保存します。
したがって、次のコマンドを使用して、両方のデータノードに新しい/etc/my.cnfファイルを作成します。
nano /etc/my.cnf
以下に示すように、クラスターIPを追加します。
[mysql_cluster] # Options for NDB Cluster processes: ndb-connectstring=104.245.33.61 #IP of the MySQL Cluster Manager
ファイルを保存して閉じてから、両方のデータノードにデータディレクトリを作成します。
mkdir -p /usr/local/mysql/data
次に、次のコマンドでデータノードを起動します。
ndbd
次の出力が得られるはずです:
2021-05-10 08:27:13 [ndbd] INFO -- Angel connected to '104.245.33.61:1186' 2021-05-10 08:27:13 [ndbd] INFO -- Angel allocated nodeid: 2
次に、次のコマンドを使用して、実行中のndbdプロセスを強制終了します。
pkill -f ndbd
次に、次のコマンドを使用して、両方のデータノードでndbdのsystemdサービスファイルを作成します。
nano /etc/systemd/system/ndbd.service
次の行を追加します:
[Unit] Description=MySQL NDB Data Node Daemon After=network.target auditd.service [Service] Type=forking ExecStart=/usr/sbin/ndbd ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure [Install] WantedBy=multi-user.target
ファイルを保存して閉じてから、次のコマンドを使用してsystemdデーモンをリロードします。
systemctl daemon-reload
次に、ndbdサービスを開始し、次のコマンドを使用してシステムの再起動時に開始するようにします。
systemctl start ndbd
systemctl enable ndbd
次のコマンドを使用して、ndbdサービスのステータスを確認することもできます。
systemctl status ndbd
次の出力が得られるはずです:
? ndbd.service - MySQL NDB Data Node Daemon Loaded: loaded (/etc/systemd/system/ndbd.service; disabled; vendor preset: enabled) Active: active (running) since Mon 2021-05-10 08:28:28 UTC; 12s ago Process: 740 ExecStart=/usr/sbin/ndbd (code=exited, status=0/SUCCESS) Main PID: 741 (ndbd) Tasks: 46 (limit: 2359) Memory: 827.1M CGroup: /system.slice/ndbd.service ??741 /usr/sbin/ndbd ??742 /usr/sbin/ndbd May 10 08:28:28 data1 systemd[1]: Starting MySQL NDB Data Node Daemon... May 10 08:28:28 data1 ndbd[740]: 2021-05-10 08:28:28 [ndbd] INFO -- Angel connected to '104.245.33.61:1186' May 10 08:28:28 data1 ndbd[740]: 2021-05-10 08:28:28 [ndbd] INFO -- Angel allocated nodeid: 2 May 10 08:28:28 data1 systemd[1]: Started MySQL NDB Data Node Daemon.
MySQLサーバーのインストールと構成
次に、MySQLサーバーおよびクライアントパッケージをダウンロードして、MySQLClusterManagerノードにインストールします。
まず、次のコマンドを使用して、MySQLClusterBundleの最新バージョンをダウンロードします。
wget https://cdn.mysql.com/Downloads/MySQL-Cluster-8.0/mysql-cluster_8.0.24-1debian10_amd64.deb-bundle.tar
次に、次のコマンドを使用して、ダウンロードしたファイルを/optディレクトリ内に抽出します。
tar -xvf mysql-cluster_8.0.24-1debian10_amd64.deb-bundle.tar -C /opt
次に、ディレクトリを/ optに変更し、次のコマンドを使用して必要な依存関係をインストールします。
cd /opt
apt-get install libaio1 libmecab2 libnuma1 psmisc -y
次に、次のコマンドを使用してMySQLCommondebファイルをインストールします。
dpkg -i mysql-common*
次に、次のコマンドを使用してMySQLクライアントパッケージをインストールします。
dpkg -i mysql-cluster-community-client_8.0.24-1debian10_amd64.deb mysql-cluster-community-client-core_8.0.24-1debian10_amd64.deb mysql-cluster-community-client-plugins_8.0.24-1debian10_amd64.deb
dpkg -i mysql-client_8.0.24-1debian10_amd64.deb
dpkg -i mysql-cluster-community-server*
依存関係エラーが発生した場合は、次のコマンドを実行します。
apt-get install -f
次に、次のコマンドを使用してMySQLServerパッケージをインストールします。
dpkg -i mysql-server_8.0.24-1debian10_amd64.deb
インストール中に、MySQLのrootパスワードを設定するように求められます。
MySQLサーバーをインストールした後、MySQLメイン構成ファイルを編集してクラスターIPを定義する必要があります。
nano /etc/mysql/my.cnf
次の行を追加します:
[mysqld] # Options for mysqld process: ndbcluster # run NDB storage engine [mysql_cluster] # Options for NDB Cluster processes: ndb-connectstring=104.245.33.61 #IP of the MySQL Cluster Manager
終了したら、ファイルを保存して閉じます。次に、MySQLサービスを再起動し、システムの再起動時に開始できるようにします。
systemctl restart mysql
systemctl enable mysql
次のコマンドを使用して、MySQLサーバーのステータスを確認できます。
systemctl status mysql
次の出力が表示されます。
? mysql.service - MySQL Cluster Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2021-05-10 08:35:04 UTC; 7s ago Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.html Process: 1950 ExecStartPre=/usr/share/mysql-8.0/mysql-systemd-start pre (code=exited, status=0/SUCCESS) Main PID: 1985 (mysqld) Status: "Server is operational" Tasks: 47 (limit: 2359) Memory: 372.0M CGroup: /system.slice/mysql.service ??1985 /usr/sbin/mysqld May 10 08:35:01 master systemd[1]: Starting MySQL Cluster Community Server... May 10 08:35:04 master systemd[1]: Started MySQL Cluster Community Server.
終了したら、次のステップに進むことができます。
MySQLクラスターのテスト
これで、3ノードのMySQLクラスターが正常にインストールおよび構成されました。次に、それが機能しているかどうかを確認する必要があります。
まず、MySQL Cluster Managerノードにログインし、次のコマンドを使用してMySQLにログインします。
mysql -u root -p
MySQLルートパスワードを入力し、次のコマンドでクラスター情報を確認します。
mysql> SHOW ENGINE NDB STATUS \G
すべてが正常であれば、次の出力が得られるはずです:
*************************** 1. row *************************** Type: ndbclus Name: connection Status: cluster_node_id=4, connected_host=104.245.33.61, connected_port=1186, number_of_data_nodes=2, number_of_ready_data_nodes=2, connect_count=0 *************************** 2. row *************************** Type: ndbclus Name: NdbTransaction Status: created=2, free=2, sizeof=392 *************************** 3. row *************************** Type: ndbclus Name: NdbOperation Status: created=4, free=4, sizeof=944 *************************** 4. row *************************** Type: ndbclus Name: NdbIndexScanOperation Status: created=0, free=0, sizeof=1152 *************************** 5. row *************************** Type: ndbclus Name: NdbIndexOperation Status: created=0, free=0, sizeof=952 *************************** 6. row *************************** Type: ndbclus Name: NdbRecAttr Status: created=0, free=0, sizeof=88 *************************** 7. row *************************** Type: ndbclus Name: NdbApiSignal Status: created=16, free=16, sizeof=144 *************************** 8. row *************************** Type: ndbclus Name: NdbLabel Status: created=0, free=0, sizeof=200 *************************** 9. row *************************** Type: ndbclus Name: NdbBranch Status: created=0, free=0, sizeof=32 *************************** 10. row *************************** Type: ndbclus Name: NdbSubroutine Status: created=0, free=0, sizeof=72 *************************** 11. row *************************** Type: ndbclus Name: NdbCall Status: created=0, free=0, sizeof=24 *************************** 12. row *************************** Type: ndbclus Name: NdbBlob Status: created=0, free=0, sizeof=592 *************************** 13. row *************************** Type: ndbclus Name: NdbReceiver Status: created=0, free=0, sizeof=128 *************************** 14. row *************************** Type: ndbclus Name: NdbLockHandle Status: created=0, free=0, sizeof=48 *************************** 15. row *************************** Type: ndbclus Name: binlog Status: latest_epoch=897648164875, latest_trans_epoch=820338753551, latest_received_binlog_epoch=0, latest_handled_binlog_epoch=0, latest_applied_binlog_epoch=0 15 rows in set (0.00 sec)
次に、次のコマンドを使用してMySQLシェルを終了します。
mysql> exit
次に、別のテストを実行して、クラスターが正しく機能していることを確認します。
次のコマンドを使用して、クラスタ管理コンソールを接続します。
ndb_mgm
次の出力が表示されます。
-- NDB Cluster -- Management Client -- ndb_mgm>
次に、次のコマンドを実行して、すべてのデータをチェックします。
ndb_mgm> SHOW
次の出力が得られるはずです:
Connected to Management Server at: 104.245.33.61:1186 Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=2 @104.245.32.195 (mysql-8.0.24 ndb-8.0.24, Nodegroup: 0, *) id=3 @69.87.218.169 (mysql-8.0.24 ndb-8.0.24, Nodegroup: 0) [ndb_mgmd(MGM)] 1 node(s) id=1 @104.245.33.61 (mysql-8.0.24 ndb-8.0.24) [mysqld(API)] 1 node(s) id=4 @104.245.33.61 (mysql-8.0.24 ndb-8.0.24)
最初のデータノードのステータスを確認するには、次のコマンドを実行します。
ndb_mgm> 2 STATUS
次の出力が表示されます。
Node 2: started (mysql-8.0.24 ndb-8.0.24)
2番目のデータノードのステータスを確認するには、次のコマンドを実行します。
ndb_mgm> 3 STATUS
次の出力が表示されます。
Node 3: started (mysql-8.0.24 ndb-8.0.24)
おめでとう!これで、Debian10サーバーに3ノードのMySQLクラスターが正常にインストールおよびセットアップされました。これで、本番環境でこのセットアップを使用して、スケーラビリティと可用性を実現できます。