スマートスタイル TECH BLOG

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

MySQL 8.0 RC版 で MySQL InnoDB Cluster を構築する

本記事はMySQL8.0リリース候補版による MySQL InnoDB Cluster 構築方法を紹介した記事です。MySQL 8.0.12 以降で MySQL InnoDB Cluster を構築する場合はこちらの記事を参照してください。
MySQL 8.0.13 で MySQL InnoDB Cluster を構築する

MySQL InnoDB Cluster はアプリケーションからのルーティングも含めたフルスタックなHAソリューションです。
こちらの記事でも構築方法をご紹介しましたが、MySQL Shellもバージョンアップされてmy.cnfの自動設定や対話形式によるセットアップなど以前よりも簡単に構築できるようになりました。
今回の記事では、MySQL8.0.4 Release Candidate版を使ったセットアップ方法を紹介します。

MySQL InnoDB Cluster とは?

MySQL InnoDB Cluster は下記のコンポーネントをまとめた名称で、それ自体が1つの製品ではありません。

  • MySQL Group Replication (MySQLデータベースサーバー)
  • MySQL Router (接続ルーティング)
  • MySQL Shell (mysqlコマンド拡張)

参考:Introducing InnoDB Cluster

環境設定

  • Python
    Python 2.7 が必要です。MySQL Shell では下記のコマンドでPythonが実行されるので、複数のバージョンがインストールされているような環境では2.7が実行されるように変更してください。
  • 名前解決
    MySQL Group Replicationで各MySQLサーバー間はホスト名を使って接続するため、名前解決できるようにhostsやDNSの設定が必要です。

参考:InnoDB Cluster Requirements

構成

AWSのEC2上に構築しました。

マシン IP host 詳細
クライアント 172.26.45.168 client MySQL Router
node1 172.26.45.54 node1 MySQL Server
node2 172.26.45.225 node2 MySQL Server
node3 172.26.45.84 node3 MySQL Server

全てのノードでMySQL Shellもインストールします

Group Replication のセットアップ

このセクションの内容は Group Replication をインストールするすべてのマシンで実行します。

パッケージのインストール

SELinux を無効にします

レポジトリを追加します

インストールするMySQLを8.0にします

MySQL Server と MySQL Shellをインストールします

MySQL Shell は my.cnf の自動設定で必要になります

MySQLのrootユーザー設定

MySQL 8.0.4以前のクライアントライブラリを使用した接続を行う場合、MySQL 8.0.4以降のデフォルトの認証方式が解釈できないため、 以前の認証方式をデフォルトとする設定を行います。

参考:日々の覚書: MySQL 8.0.4におけるデフォルト認証形式の変更

MySQL Server を起動します

rootの一時パスワードを変更します

Group Replication の各インスタンスの設定

ユニークな server_id になるように my.cnf に追記します

mysqlsh をroot権限で実行します。( /etc/my.cnf の書き換えを行うため)

InnoDB Cluster の設定チェック

チェック結果。何も設定してないため、エラーになります。

以前はこの結果を元にmy.cnfの設定を行う必要がありましたが、MySQL Shellを使うと自動で設定してくれるようになりました。

Group Replication が動くように対話形式で設定を変更します。

/etc/my.cnf を変更するかの確認(ここでは y を入力)

root ユーザーが他のホストからアクセスできない設定になっているため、
1) root ユーザーを他のホストからアクセスできるようにする
2) 別のユーザーを作成する
3) ユーザーを作らない
ここでは 2 を選択します

以下の設定で作成します

設定が終了したので MySQL Shell を抜けます

設定された /etc/my.cnf は以下のように追記されます。

MySQL Server を再起動します

Group Replication のクラスターを組む

MySQL Shell を使ってGroup Replicationのクラスタを組みます。
このセクションは MySQL Shell がインストールされている環境であればどこからでも構いません。

クラスタを作成する

クラスタにノードを追加する

Group Replication の初期設定では 更新処理はプライマリノードと呼ばれるノードにのみ許可され、その他のノードは読み込み処理のみになります(read_only=ONの状態)

参考:Production Deployment of InnoDB Cluster

MySQL Router のセットアップ

MySQL Router をインストールしたいインスタンスで実行します。

パッケージのインストール

レポジトリを追加します

インストールするMySQLを8.0にします

MySQL Router をインストールします

MySQL Router の初期設定

MySQL Router は Group Replication のステータスを元にルーティング先を決めています。

bootstrap パラメーターで指定するノードはプライマリノードになります

接続設定が表示されます。

通常のSQLによる読み込みと書き込みは 6446 ポートを使用、読み込みのみは 6447 ポートを使用することになります。
Group Replicationでは更新処理はプライマリノードのみのため、6446ポートの接続はプライマリノードにルーティングされ、6447ポートは読み込み処理のためラウンドロビンで残りのノードにルーティングされます。

MySQL Router の起動

MySQL Router を起動します。

動作確認

MySQL Router 経由でアクセスしてみます

別ユーザーを作成してRead Onlyポート(6447)から接続して更新クエリーを流した場合、read_only=ON となっていたのでエラーとなります。

また更新はプライマリノード固定、参照についてはラウンドロビンで分散されます。

参考: Using MySQL Router with InnoDB Cluster

まとめ

これまではアプリケーションのルーティングも含めた高可用性構成はサードパーティのツールを組み合わせて構築することが多かったのですが、MySQL Shell もバージョンアップが進み、my.cnf の自動書き換えや対話型セットアップによってMySQL InnoDB Clusterの構築が以前よりも簡単になりました。


MySQL

 

Return Top