はじめに
Galeraベースのマルチマスタソリューションとして有名なPercona XtraDB Cluster(以下、PXC)ですが、2020/04/29に最新版である 8.0.18-9.3 がリリースされ、これがGA版となりました。
そこで、PXC8.0について少し調べてみました。
※ ちなみに 6/18 に最新の8.0.19-10もリリースされました
重要な変更
まずは、リファレンスマニュアルに記載された「PXC8.0における重要な変更」の内容を確認します。
1. デフォルトで通信が暗号化
通信の暗号化を有効にするpxc_encrypt_cluster_traffic変数が、PXC8.0ではデフォルトONになっています。
そのため、事前に各ノードでSSL関連の設定を適切に行っていないとPXC8.0クラスタにJOINすることができないので注意が必要です。
SSLの設定については、例えばmy.cnfに以下のようなパラメータを設定します。
1 2 3 4 5 6 7 8 9 |
[mysqld] ssl-ca=/etc/mysql/certs/ca.pem ssl-cert=/etc/mysql/certs/server-cert.pem ssl-key=/etc/mysql/certs/server-key.pem [client] ssl-ca=/etc/mysql/certs/ca.pem ssl-cert=/etc/mysql/certs/client-cert.pem ssl-key=/etc/mysql/certs/client-key.pem |
2. PXC5.7ノードとPXC8.0ノードの混在は推奨されない
PXC5.7からPXC8.0にアップグレードする時は、クラスタ全体を一度停止して、全ノードを8.0にアップグレードしましょう、また、ダウングレードが難しいため、作業前に5.7のバックアップを取得しておくべきです。
3. PXC Strict Modeがデフォルトで有効
PXC8.0は、PXC Strict Modeがデフォルト有効になった状態で起動します。
この状態ですと、PXCでサポートされていない処理や操作を行ったときにエラーが発生します。その条件は、マニュアルを参照してください。
最初に第1ノードを起動する時には、my.cnfに「pxc_strict_mode=PERMISSIVE」を設定することを推奨します。そして、クラスタ全体が立ち上がったら必要に応じて設定を有効(pxc_strict_mode=ENFORCING)にしましょう。
※ このPXC Strict ModeはPXC5.7でも有効になっています
4. 設定ファイルのレイアウトが変更
設定ファイルのレイアウト(配置先)が以下のように変更になりました。
Path on Debian and Ubuntu: /etc/mysql/mysql.conf.d/mysqld.cnf
Path on Red Hat and CentOS: /etc/my.cnf
アップグレードを開始する前に、必要に応じて/etc/mysql/percona-xtradb-cluster.conf.d/wsrep.cnf
(on Debian and Ubuntu)もしくは/etc/percona-xtradb-cluster.conf.d/wsrep.cnf
(on Red Hat and CentOS)からファイルを移動してください。
5. caching_sha2_passwordがデフォルトの認証プラグインに
PXC8.0のデフォルト認証プラグインはcaching_sha2_password
です。同プラグインが適用されたPXCユーザでは、ProxySQLの–syncusersオプションが動作しません。それを避ける場合は、mysql_native_password
プラグインを使用してください。
ちなみにこの認証プラグインはMySQL8.0でも同様です。弊社の過去記事でも取り上げているので、ご参照ください。
6. mysql_upgradeがSSTの一部として実行される
バージョンアップ後にシステムテーブルを更新するコマンド mysql_upgrade がSSTの処理の一部として実行されるようになりました。そのため、アップグレード時にSSTを伴った場合は、手動で同コマンドを実行する必要はありません。
アップグレード手順
メジャーバージョンアップ(5.6 → 8.0)
残念ながら、PXC5.6 から PXC8.0 に直接アップグレードすることはできません。そのため、まずはPXC5.6をPXC5.7の最新バージョンにアップグレードする必要があります。
メジャーバージョンアップ(5.7 → 8.0)
前述した通り、PXC5.7からPXC8.0にバージョンアップする場合にはPXC5.7クラスタ全体、すなわち全ノードを一度停止することが推奨されます。
そのため、バージョンアップをする際にはmysqメンテナンス期間(ダウンタイム)を用意する必要があります。
以下では、標準的なyumリポジトリを使用した方法について説明します。
まずは、既存のPXC5.7ノードを全て停止します。
1 2 3 4 5 6 |
node3$ sudo systemctl stop mysql node2$ sudo systemctl stop mysql node1$ sudo systemctl stop mysql@bootstrap → 初期ノードは最後に停止する必要があります |
その後、最新のPerconaのyumリポジトリをインストールします。また、PXC8.0のリポジトリも有効にします。
1 2 3 4 5 6 |
node1$ sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm node1$ sudo percona-release enable pxc-80 node2$ sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm node2$ sudo percona-release enable pxc-80 node3$ sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm node3$ sudo percona-release enable pxc-80 |
PXC8.0パッケージをアップグレードします。
1 2 3 4 5 6 |
node1$ sudo yum remove Percona-XtraDB-Cluster-* node1$ sudo yum install percona-xtradb-cluster node2$ sudo yum remove Percona-XtraDB-Cluster-* node2$ sudo yum install percona-xtradb-cluster node3$ sudo yum remove Percona-XtraDB-Cluster-* node3$ sudo yum install percona-xtradb-cluster |
必要に応じて、my.cnfを修正します。特に「SSLの設定」、「pxc_strict_mode」、「認証プラグイン(default_authentication_plugin)」に注意してください。
1 2 3 |
node1$ sudo vi /etc/my.cnf node2$ sudo vi /etc/my.cnf node3$ sudo vi /etc/my.cnf |
準備ができたら、Node1から順次起動してきます。
1 2 3 |
node1$ sudo systemctl start mysql@bootstrap node2$ sudo systemctl start mysql node3$ sudo systemctl start mysql |
全ノード起動したら、ステータスを確認しましょう。wsrep_cluster_size
が “3”、wsrep_cluster_status
が “Primary” であれば正常にアップデートできています。
1 2 3 |
node1$ mysql -u root -p mysql> SHOW GLOBAL STATUS LIKE "wsrep_cluster_%"; |
おわりに
以上、PXC8.0の概要部分について述べました。その他、PXC8.0では”Galera 4″が組み込まれているため、以前ブログ記事でも説明したGalera4のStreaming Replicationを使用することができます。
今後、少しずつ利用ケースも増えてくると思いますが、まだまだ未知の部分も多いので引き続き検証していきたいと思います。