いくつかのスレーブ データベースに複製する MySQL マスター データベースをセットアップしています。
私の質問は、スレーブ データベースが最新であることを監視および/またはテストし、レプリケーションが停止するエラーが発生したときに管理者に警告するためのベスト プラクティスは何かということです。
監視ツールを検索しましたが、適切なものが見つかりませんでした。
また、スレーブ間の同期をテストするための「ベスト プラクティス」アプローチは何ですか。DB レプリケーションのユニット テストのようなものはありますか?
この件に関する私の無知が誰かを不快にさせたのであればお詫び申し上げます。
答え1
レプリケーションの大きな問題はチェックすることだ
- ノードがすべて稼働していること
- すべてのノードが通信している(スプリットブレインではない)
- レプリケーションログの処理
- 複製の遅れ
1、3、4 は、関連するノードで SHOW MASTER STATUS / SHOW SLAVE STATUS を使用してキャプチャできますが、レプリケーション遅延の精度は 1 秒のみで、各ホップ間でのみ有効です。Percona ツールキットには、より正確なレプリケーション遅延を取得するためのスクリプトがあります。
マルチマスターレプリケーションの使用(例:タングステン、ペルコナ) を使用すると、多くの手間が省けますが、セットアップには追加の労力とソフトウェアが必要になります。
ノード間のネットワークに障害が発生した場合、プロセスはすべて正常に実行されますが、データを転送できなくなります。各ノードを監視して、上流ノードに接続できるかどうかを確認する必要があります。
いくつかのスレーブデータベースに複製されるMySQLマスターデータベース
ベストプラクティスとしては、スレーブの 1 つをマスターとしても指定し、双方向レプリケーションを行うのがよいでしょう。こうすることで、障害が発生した場合や、インデックスの再構築、バックアップ、スキーマの変更などのメンテナンス タスクを実行する場合に、簡単に切り替えることができます。
スレーブノードの数に応じて、ファンアウトノード変更を伝播します。
エスカレーションの管理、データ収集用のスクリプトのスケジュール設定などに関しては、これを実行できるツールが多数あります。私は Nagios を使用していますが、他にも多くの人が使用しています。
答え2
私の質問は、スレーブデータベースが最新であることを監視および/またはテストするためのベストプラクティスは何ですか?
簡単なテストでは、マスターでデータを挿入/更新し、それがスレーブに複製されていることを確認します。
しかし一貫性チェックのために、pt-テーブルチェックサムあなたが探しているものです。
例えば:
pt-table-checksum localhost --empty-replicate-table --databases db --nocheck-replication-filters --replicate percona.checksums > /var/log/pt-table-checksum.log 2>&1
レプリケーションが停止するエラーが発生した場合に管理者に警告します。
Nagiosを使用している場合は、チェック_mysql_healthプラグインはスレーブの状態(実行中かどうか)を監視するのに役立ちます。しかし、一貫性を監視するには、pmp-check-pt-table-チェックサムプラグイン。
見逃さないでくださいpt-テーブル同期矛盾点がある場合:
pt-table-sync -v --print --sync-to-master h=localhost,D=db,t=table
pt-table-sync -v --execute --sync-to-master h=localhost,D=db,t=table
おそらく最初にオプションを使用する必要があることに注意してください--print
。
答え3
奴隷に
SHOW SLAVE STATUS\G;
次のような症状が出た場合は、
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
つまり、ほぼ完了です。テストするには、マスターで書き込みトランザクションを実行し、スレーブに自動的に複製されることを確認します。
答え4
監視ツールを検索しましたが、適切なものが見つかりませんでした。
あなたはCacti 用 Percona MySQL 監視テンプレートMySQL レプリケーション テンプレート (pt-heartbeat
ツールを使用) を確認してください。
乾杯