以前のブログの1つで、MySQL8.0.17で示された新機能の1つであるClonePluginを使用してレプリケーションスレーブを再構築する方法について説明しました。現在、そのための、そしてバックアップのための頼りになるツールは、Xtrabackupです。これらのツールがどのように機能し、動作するかを比較するのは興味深いと思いました。
最初にテストすることにしたのは、データのコピーをローカルに保存する場合に、両方がどのように機能するかです。 AWSとm5d.metalインスタンスを2つのNVMeSSDで使用し、ローカルコピーへのクローンを実行しました:
mysql> CLONE LOCAL DATA DIRECTORY='/mnt/clone/';
Query OK, 0 rows affected (2 min 39.77 sec)
次に、Xtrabackupをテストし、ローカルコピーを作成しました:
rm -rf /mnt/backup/ ; time xtrabackup --backup --target-dir=/mnt/backup/ --innodb-file-io-threads=8 --innodb-read-io-threads=8 --innodb-write-io-threads=8 --innodb-io-capacity=20000 --parallel=16
200120 13:12:28 completed OK!
real 2m38.407s
user 0m45.181s
sys 4m18.642s
ご覧のとおり、データのコピーに必要な時間は基本的に同じでした。どちらの場合も、制限はソフトウェアではなくハードウェアでした。
別のサーバーへのデータの転送は、両方のツールの最も一般的な使用例です。プロビジョニングまたは再構築するスレーブにすることができます。将来的にはバックアップになる可能性があります。クローンプラグインには現時点ではそのような機能はありませんが、将来的に誰かがバックアップツールとして使用できるようになると確信しています。どちらの場合もハードウェアがローカルバックアップの制限であることを考えると、ハードウェアはネットワークを介してデータを転送するための制限にもなります。設定に応じて、ネットワーク、ディスクI / O、CPUのいずれかになります。
I / Oを多用する操作では、CPUが最も一般的なボトルネックです。これにより、データセットサイズの削減とCPU使用率の一部を交換することが非常に一般的になります。あなたは圧縮を通してそれを達成することができます。オンザフライで実行する場合でも、同じ量のデータを読み取る必要がありますが、ネットワーク経由で送信するデータは(圧縮されているため)少なくなります。次に、それを解凍して書き留める必要があります。ファイル自体が圧縮されている可能性もあります。その場合、ディスクへの読み取り、転送、書き込みの量を減らすことができます。
Clone PluginとXtrabackupの両方にオンザフライ圧縮が付属しています(このビットを修正してくれたKenny Grypに感謝します)。クローンプラグインでは、デフォルトで無効になっているclone_enable_compressionを使用して有効にできます。 Xtrabackupは、外部ツールを利用してデータを圧縮することもできます。圧縮されたInnoDBテーブルの場合、外部圧縮はそれほど大きな違いをもたらさないため、ネットワーク帯域幅が制限要因である場合は、両方のツールが同じように実行される必要があります。
パフォーマンスは比較するものの1つにすぎません。ツールの使いやすさなど、他にもたくさんあります。どちらの場合も、実行する必要のあるいくつかの手順があります。クローンプラグインの場合は次のとおりです。
Xtrabackupを実行するには、さらにいくつかの手順が必要です。
xtrabackup --backup --innodb-file-io-threads=8 --innodb-read-io-threads=8 --innodb-write-io-threads=8 --innodb-io-capacity=20000 --parallel=8 --stream=xbstream --target-dir=/mnt/backup/ | ssh [email protected] "xbstream -x -C /mnt/backup/"
ただし、シングルスレッドSSHを使用する高速ハードドライブの場合、CPUがボトルネックになることがわかりました。 netcatを設定するには、netcatが起動し、トラフィックをリッスンして適切なソフトウェア(xbstream)にリダイレクトするために、レシーバーで追加の手順を実行する必要があります。
-
レシーバーノードでMySQLを停止する
-
Xtrabackupを実行する
-
InnoDBログを適用する
-
データをコピーして戻す
-
レシーバーノードでMySQLを起動します
ご覧のとおり、Xtrabackupではさらに多くの手順を実行する必要があります。
クローンプラグインは、デフォルトではプレーンテキストを使用しますが、データ転送にSSLを使用するように構成できます。暗号化されたテーブルスペースのクローンを作成することは可能ですが、たとえばローカルクローンを暗号化するオプションはありません。クローンプロセスが完了した後、ユーザーは個別に行う必要があります。
Xtrabackup自体はセキュリティを提供しません。セキュリティは、データのストリーミング方法によって決まります。ストリーミングにSSHを使用する場合、転送中のデータは暗号化されます。 netcatを使用する場合は、プレーンテキストとして送信されます。もちろん、データがテーブルスペースで暗号化されている場合は、クローンプラグインの場合と同様に、データはすでに保護されています。 Xtrabackupをオンザフライ暗号化と併用して、データが保存時にも暗号化されるようにすることもできます。
クローンプラグインは新製品であり、まだ初期段階にあります。その主なタスクは、InnoDBクラスターでノードをプロビジョニングする方法を提供することであり、それは問題なく実行されます。バックアップやレプリケーションスレーブのプロビジョニングなどの他のタスクでは、ある程度使用できますが、いくつかの制限があります。以前のブログでそれらの一部を取り上げたので、ここでは繰り返しませんが、プロビジョニングとバックアップについて話すときに最も深刻なのは、InnoDBテーブルのみがクローン化されることです。他のストレージエンジンを使用している場合、クローンプラグインを実際に使用することはできません。一方、Xtrabackupは、最も一般的に使用されるストレージエンジンであるInnoDB、MyISAM(残念ながら、まだ多くの場所で使用されています)、CSVをバックアップして転送します。 Xtrabackupには、ノードからノードへのデータのストリーミング、さらにはS3バケットへのバックアップのストリーミングを支援することを目的とした一連のツールも付属しています。
要約すると、データのバックアップとレプリケーションスレーブのプロビジョニングに関しては、xtrabackupが最も人気があり、今後も最も人気があります。一方、クローンプラグインは、おそらく改善され、進化します。将来がどうなるか、そして1年後にはどのようになるかを見ていきます。
クローンプラグインについてご意見がございましたら、お気軽にお問い合わせください。この新しいツールについてのご意見をお待ちしております。