ホームページ  >  記事  >  バックエンド開発  >  データベースのマスター/スレーブ レプリケーション フェイルオーバーを実装するための PHP メソッド

データベースのマスター/スレーブ レプリケーション フェイルオーバーを実装するための PHP メソッド

WBOY
WBOYオリジナル
2023-05-15 19:42:09686ブラウズ

インターネットの急速な発展に伴い、バックエンド データ ストレージの重要な部分としてのデータベースは、Web サイトの高可用性とパフォーマンスの最適化にとって非常に重要です。その中でも、マスター/スレーブ レプリケーションは一般的に使用されるデータベースの高可用性ソリューションであり、サービスに影響を与えることなくシステムの安定性と可用性を向上させることができます。

この記事では主に、PHP を使用してマスター/スレーブ レプリケーションとフェイルオーバーを実装する方法を紹介します。

1. マスター/スレーブ レプリケーションの基本原理

マスター/スレーブ レプリケーションとは、マスター データベース上のすべてのデータを複数のスレーブ データベースに同期することを指します。マスター データベースはデータの読み取りと書き込みが可能ですが、スレーブ データベースは読み取り操作のみを実行でき、スレーブ データベースのデータはマスター データベースと完全に一致します。マスター/スレーブ レプリケーションでは通常、非同期レプリケーションが使用され、マスター データベース上のデータが変更されると、新しく追加されたデータ ログが記録され、MySQL スレーブ スレッドが更新ログを読み取ってスレーブ データベースに適用します。

マスター/スレーブ レプリケーション アーキテクチャでは、通常、マスター ライブラリを書き込みサーバーとして使用し、スレーブ ライブラリを読み取りサーバーとして使用します。一般に、書き込み操作は読み取り操作よりも多くのリソースを消費するため、書き込み操作はメイン ライブラリに配置されて読み取りと書き込みが分離されます。これにより、メイン ライブラリへの負荷が軽減され、メイン ライブラリのパフォーマンスが向上します。

2. PHP はマスター/スレーブ レプリケーションを実装します

1. マスター/スレーブ レプリケーションを構成する

MySQL では、my.cnf ファイルを構成することでマスター/スレーブ レプリケーションを実現できます。 。具体的な設定手順は次のとおりです。

1) メイン サーバーの設定

[mysqld]

log-bin=mysql-bin #バイナリ ログ機能を有効にし、マスター/スレーブ レプリケーション

server-id=1 #各サーバーの番号が重複しないように一意の番号を設定します

2) スレーブ サーバーを設定します

[ mysqld]

server-id=2 #各サーバーの番号が重複しないように一意の番号を設定します

relay-log=mysql-relay-bin #リレー ログ ファイルを設定します、ライブラリからメイン ライブラリのデータをコピーするために使用されます

read_only=1 #スレーブ ライブラリからの書き込み操作を禁止します

2. PHP

# を介してマスターとスレーブ ライブラリを接続します##PHP でマスター/スレーブ ライブラリを接続することは、実際には単一のデータベースに接続することと同じではありません。大きな違いがあります。データベースに接続するときに使用するデータベースを指定するだけで済みます。

リード動作を行う場合はスレーブライブラリを使用して動作し、ライト動作を行う場合はメインライブラリを使用して動作します。具体的なコードは次のとおりです。

//メイン ライブラリに接続します

$main_db = mysqli_connect("localhost", "root", "123456", "main_db");

/ /スレーブ ライブラリに接続します

$slave_db = mysqli_connect("localhost", "root", "654321", "slave_db");

//データを読み取りますスレーブ ライブラリ

$result = mysqli_query($slave_db, "SELECT * FROM user");

//メイン データベースにデータを書き込みます

mysqli_query($main_db, "INSERT INTO user(name, age) VALUES('tom', '25')");

3. フェイルオーバーの実装

プライマリ データベースに予期せず障害が発生した場合は、切り替える必要があります。サービスを提供するためにセカンダリ データベースに接続します。フェイルオーバー プロセスには次の手順が必要です:

1. スレーブ ライブラリからメイン ライブラリへの切り替え

メイン ライブラリがサービスを提供できない場合、スレーブ ライブラリからメイン ライブラリに切り替える必要があります。図書館を作るための図書館 本図書館のサービスを引き継ぎます。具体的な手順は次のとおりです:

1) スレーブ ライブラリでコマンド STOP SLAVE を実行して、スレーブ ライブラリからのレプリケーション プロセスを停止します。

2) スレーブ ライブラリからメイン ライブラリにデータをコピーします。

3) スレーブ ライブラリのサーバー ID を 1 に変更し、my.cnf ファイルの log-bin 変数とリレーログ変数を変更します。このようにして、スレーブ データベースがマスター データベースとなり、サービスの提供が開始されます。

2. アプリケーションの構成を変更する

メイン ライブラリがフェイルオーバーした場合、新しいメイン ライブラリに切り替えてサービスを提供できるように、アプリケーションの構成情報を変更する必要があります。 。

3.障害復旧後の切り替え

主データベースが業務を再開する場合、主データベースを主データベースにリストアし、以前の従データベースをバックアップ用従データベースに変更する必要があります。具体的な手順は次のとおりです。

1) スレーブ ライブラリでコマンド STOP SLAVE を実行して、スレーブ ライブラリからのコピー プロセスを停止します。

2) 最新のデータをメイン データベースと同期します。

3) メイン ライブラリでコマンドを実行します: CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_USER='root', MASTER_PASSWORD='xxxx', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS = 156、スレーブ ライブラリからマスター ライブラリに変更されます。

このようにして、障害が復旧した後、マスター ライブラリとスレーブ ライブラリ間の関係が再び確立され、通常の動作状態になります。

4. 概要

PHP を介してデータベースのマスター/スレーブ レプリケーション フェイルオーバーを実装すると、システムの信頼性と可用性が向上すると同時に、アプリケーションの負荷が軽減され、システム全体のパフォーマンスも向上します。実際には、切り替えプロセス全体がスムーズに進行し、シ​​ステム全体のデータ回復と障害回復が最短時間で完了するように、フェイルオーバー プロセスとアプリケーション構成に注意を払う必要があります。

以上がデータベースのマスター/スレーブ レプリケーション フェイルオーバーを実装するための PHP メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。