infra検証 blog

oracle成分多めです。

MySQL 8.0.35 で MySQL InnoDB Clusterを構築してみる。

この記事は、 MySQL Advent Calendar 2023 24日目の記事です。

23日目は @mita2 さんの記事 『MySQL Shell dumpInstance のロジック #2』でした。

はじめに

MySQLに入門が必要になったため、InnoDB Cluster の構築を実施してみようと思い、MySQL Advent Calendarに参加してみました。

ライトな内容ですが、書いてみます。

今まではOracle Databaseを扱うことが多かったです。

macchi09.hateblo.jp

構築

環境

OSはOracleLinux8.8を利用しています。

役割 ホスト名 IP
DB1(primary) mysql01 192.168.40.31
DB2(secondary) mysql02 192.168.40.32
DB3(secondary) mysql03 192.168.40.33
mysqlsh/mysqlrouter mysqlr 192.168.40.34

手順

SmartStyleさんのTECHBLOGを参考に構築します。 blog.s-style.co.jp

基本的に同じコマンドで実行していますが、一部差し替えているため、コマンドを書き出していきます。

# 今回は検証なのでfirewalld無効化
(all servers)# systemctl disable --now firewalld

# el8系に修正
(all servers)# dnf install -y https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm

# ol8_appstreamレポジトリのmysqlが優先されるので、無効化してmysql-community-serverをインストールする
(db servers)# dnf install -y --disablerepo=ol8_appstream mysql-community-server

# 後からクラスタステータスを取得する方法
(mysqlrouter/sh) # mysqlsh
cluster = dba.getCluster()
cluster.status()

# mysqlrouterの自動起動有効化+起動
(mysqlrouter/sh) # systemctl enable --now mysqlrouter

# ol8_appstreamレポジトリのmysqlが優先されるので、無効化してmysqlクライアントをインストールする
(mysqlrouter/sh) # dnf install --disablerepo=ol8_appstream mysql

接続動作確認

mysqlrouter --bootstrapした際に以下が表示されたので、実際に動作確認してみます。

## MySQL Classic protocol

- Read/Write Connections: localhost:6446
- Read/Only Connections:  localhost:6447

ポート6446ではmysql01(primaryノード)のみに、ポート6447ではmysql02-03にラウンドロビンしていることが確認できました。

mysql -u root -p -h 192.168.40.34 -P 6446 -e "show variables like 'hostname';"
[root@mysqlr ~]# mysql -u root -p -h 192.168.40.34 -P 6446 -e "show variables like 'hostname';"
Enter password:
+---------------+------------------+
| Variable_name | Value            |
+---------------+------------------+
| hostname      | mysql01.snet.com |
+---------------+------------------+

[root@mysqlr ~]#
[root@mysqlr ~]# mysql -u root -p -h 192.168.40.34 -P 6447 -e "show variables like 'hostname';"
Enter password:
+---------------+------------------+
| Variable_name | Value            |
+---------------+------------------+
| hostname      | mysql02.snet.com |
+---------------+------------------+
[root@mysqlr ~]# mysql -u root -p -h 192.168.40.34 -P 6447 -e "show variables like 'hostname';"
Enter password:
+---------------+------------------+
| Variable_name | Value            |
+---------------+------------------+
| hostname      | mysql03.snet.com |
+---------------+------------------+

ログなど

  • /var/log/mysqld.log

ここにクラスタ構築した際のログも一括で出力されているようです。

ここにDBファイルなどが配置されているようでした。

クラスタ再起動方法など

この記事が参考になるでしょうか。

MySQL系レプリケーション構成3種とインストール方法 #Linux - Qiita

ロールの切り替え方法など

オンラインで MySQL InnoDB Cluster の構成を変更する – スマートスタイル技術ブログ

まとめ

アーキテクチャが根本的に違いますが、OracleRACなんかと比べるとかなり簡単に構築できますね。

クラスタの全停止/起動などはMySQL Shellから実施できるため、比較的わかりやすいのかなと思いました。

もう少しさわりながら、MySQLについて知識を深めていければと思いました。