スマートスタイル TECH BLOG

MySQL 8.0.13 で MySQL InnoDB Cluster を構築する

以前、MySQL8.0 で MySQL InnoDB Cluster を構築する の記事で MySQL 8.0.4 RC版を使った構築方法をご紹介しましたが、あれからバージョンも進み、新機能がいくつも追加され、 MySQL InnoDB Cluster の構築方法も5.7、8.0RC版を経て以前よりも簡単に自由度も高くなりました。
今回の記事では改めて MySQL 8.0.13 を使ったセットアップ方法をご紹介したいと思います。

MySQL InnoDB Cluster とは?

MySQL InnoDB Cluster は下記のコンポーネントをまとめた名称で、それ自体が1つの製品ではありません。
コンポーネント同士が強く結びついて動作させることが前提のため、サードパーティ製品を導入する際に組み合わせにより発生するトラブルに悩まされることもなく、汎用的なツールにありがちな複雑な設定やセットアップから解放されます。

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

参考:Introducing InnoDB Cluster

環境設定

  • Python
    MySQL Shell を使用するサーバーでは Python 2.7 が必要です。下記のコマンドでPythonが実行されるので、複数のバージョンがインストールされているような環境では2.7が実行されるように変更してください。
  • IPv4 ネットワーク
    MySQL Group Replication で使用するグループコミュニケーションは IPv4 のみがサポートされています。

構成

AWSのEC2上に構築しました。OSは CentOS 7.5 です

マシン IP ホスト名
MySQL Server (Node1) 172.26.46.105 node1
MySQL Server (Node2) 172.26.46.234 node2
MySQL Server (Node3) 172.26.46.67 node3
MySQL Router 172.26.46.134 mysql_router
MySQL Shell 172.26.46.87 mysql_shell

8.0 RC版では、すべてのノードに MySQL Shell のインストールが必要でしたが、今回からはMySQL Serverに接続できればどこにインストールしてもよくなりました。

共通のセットアップ

このセクションのSELinuxの無効化とMySQLの公式レポジトリの追加は、MySQL InnoDB Cluster を動かす全てのマシンで実行します。

SELinuxを無効にします

MySQLの公式レポジトリを追加します

MySQL Shell のセットアップ

MySQL Shell は yum コマンドでパッケージをインストールするだけです

MySQL Group Replication のセットアップ

このセクションのMySQLのインストールからrootユーザーの設定まではMySQLサーバーを動かすNode1、Node2、Node3で実行します

パッケージをインストールします

MySQL Server を起動します

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

リモートアクセス可能なrootを作成します

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

ここからは MySQL Shell がインストールされている環境であればどこからでも構いません。

MySQL Group Replication の設定をチェックします

設定が足りないため、エラーになります

8.0 RC版では、これらの設定を my.cnf に書き出す必要があったため、MySQL Server が動いているサーバーのローカルで MySQL Shell を sudo 実行する必要がありました。
しかし、8.0.13 からは MySQL 8.0 で新しく追加された「SET PERSIST」を使って、リモートからでも設定を永続化させることができ、また、再起動が必要な設定についても、「RESTART」コマンドを使って外部からMySQLの再起動が可能になったため、必ずしもローカルのMySQL Shellから実行する必要がなくなりました。

リモートから MySQL Group Replication に必要な設定を追加する

設定変更箇所の確認と

これらの設定を変更するかの確認。「y」を選択します。

MySQLサーバーの再起動をするかの確認。「y」を選択します。

同様の設定変更を他の2ノードでも行います

MySQL Group Replication のクラスターを組む

このセクションも同様に、MySQL Shell がインストールしている環境であれば、どこからでも構いません。

クラスタを作成します

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

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

クラスターを構築後、MySQLのユーザーを見ると mysql_innodb_cluster_% というユーザーが自動で作成されています。

データベースも mysql_innodb_cluster_metadata が作成されています。

設定値も、my.cnf には変更がありませんが、mysqld-auto.cnf がデータディレクトリ以下に作られて、Group Replication に必要な設定が反映されています。

MySQL Router のセットアップ

MySQL Router のパッケージをインストールします

MySQL Router の初期設定

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

bootstrap パラメーターで指定するノードはプライマリノードになります。
MySQL Shellでcluster.status()コマンドの実行結果に表示される"primary": "172.26.46.105:3306"がプライマリノードです

接続情報が表示されます。

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

まとめ

MySQL 8.0.13 の MySQL InnoDB Cluster の構築では、MySQL 8.0 の新機能を使うことで、MySQLさえ起動していれば、Group Replication を構築するためにSSHでログインする必要がなくなりました。この仕組みを使えば、Dockerなどを使ってコンテナ化するのも容易になるため、コンテナ型仮想化が進むインフラにおいても使い勝手のよいデータベースとなると考えられます。


MySQL

 

Return Top