インターネット アプリケーションの発展に伴い、データ量は増加しており、高いデータ可用性に対する要件もますます高まっています。 MongoDB のマスター/スレーブ レプリケーション機能は、この問題をうまく解決できます。マスター/スレーブ レプリケーションを通じて、データを複数のノードにバックアップでき、マスター ノードに障害が発生した場合は自動的にスレーブ ノードに切り替わり、データの可用性とフォールト トレランスが確保されます。 。 能力。
この記事では、MongoDB のマスター/スレーブ レプリケーションの自動切り替えを PHP で実装する方法を紹介します。
MongoDB マスター スレーブ レプリケーションの原理
MongoDB マスター スレーブ レプリケーションは、マスター ノードから複数のスレーブ ノードにデータを同期することでデータ バックアップを実現するデータ バックアップ方式です。マスター ノードは書き込み操作を受信して実行し、これらの操作を oplog (操作ログ) に記録し、oplog 内の操作をすべてのスレーブ ノードに同期します。その結果、マスター ノードに障害が発生した場合、データの可用性を確保するために自動的にスレーブ ノードに切り替えることができます。
MongoDB のマスター/スレーブ レプリケーションでは、プライマリ ノードをマスター ノードとして設定し、残りのノードをセカンダリ ノードとしてスレーブ ノードとして設定できます。マスター ノードは、書き込み操作を受信して実行し、これらの操作をスレーブ ノードに同期する責任があります。マスター ノードがダウンした場合、MongoDB は自動的に新しいマスター ノードを選択し、新しい書き込み操作をすべてのスレーブ ノードに同期します。
MongoDB のマスター/スレーブ レプリケーションの自動切り替えを実現する PHP 方法
MongoDB のマスター/スレーブ レプリケーションの自動切り替えを実現するには、MongoDB が提供する PHP 拡張ライブラリを使用する必要があります。およびいくつかの関連する PHP 関数。
PHP で MongoDB マスター/スレーブ ノードを接続するコードは次のとおりです:
$mongo = new MongoClient("mongodb://主节点IP:27017,从节点IP:27017"); $db = $mongo->selectDB("db_name");
ここでは、 MongoDB のマスター ノードとスレーブ ノードを接続するための MongoClient クラス。マスター ノードの IP アドレスとポート、またはスレーブ ノードの IP アドレスとポートを使用できます。接続が成功したら、selectDB() 関数を通じて使用するデータベースを選択します。
MongoDB の isMaster() 関数を使用して、現在のノードがマスター ノードであるかどうかを確認できます。 isMaster() 関数は、ノード タイプ、マスター ノードかどうかなど、現在のノードに関する情報を含む配列を返します。現在のノードがマスター ノードの場合、配列内の ismaster キーの値は true です。
$mongo = new MongoClient("mongodb://主节点IP:27017,从节点IP:27017"); $db = $mongo->selectDB("db_name"); $isMaster = $db->command(array("isMaster" => 1)); if ($isMaster["ismaster"] == true) { echo "当前为主节点"; } else { echo "当前为从节点"; }
ここでは、command() 関数を通じて MongoDB コマンドを実行します。isMaster は MongoDB の組み込みコマンドです。返された isMaster 配列に基づいて、現在のノードがマスター ノードであるかどうかを判断します。
現在のノードがスレーブ ノードの場合は、それをマスター ノードにする必要があります。 rs.initiate() コマンドを使用して、現在のノードをプライマリ ノードにすることができます。
$mongo = new MongoClient("mongodb://主节点IP:27017,从节点IP:27017"); $db = $mongo->selectDB("db_name"); $isMaster = $db->command(array("isMaster" => 1)); if ($isMaster["ismaster"] == true) { echo "当前为主节点"; } else { $db->command(array("replSetInitiate" => array("_id" => "rs0"))); echo "已将从节点切换为主节点"; }
ここでは、replSetInitiate() 関数を通じて MongoDB の rs.initiate() コマンドを実行し、現在のノードをメイン ノードに切り替えます。 rs0 はレプリカ セットの名前であり、実際の状況に応じて変更できます。
現在のノードがマスター ノードで、現在のノードがダウンしているか障害が発生している場合は、スレーブ ノードをマスターにする必要があります。ノード。 rs.stepDown() コマンドを使用して、現在のノードをスレーブ ノードに切り替えることができます。
$mongo = new MongoClient("mongodb://主节点IP:27017,从节点IP:27017"); $db = $mongo->selectDB("db_name"); $isMaster = $db->command(array("isMaster" => 1)); if ($isMaster["ismaster"] == true) { $db->command(array("replSetStepDown" => 1)); echo "已将主节点切换为从节点"; } else { echo "已是从节点"; }
ここでは、replSetStepDown() 関数を通じて MongoDB の rs.stepDown() コマンドを実行し、現在のノードをスレーブ ノードに切り替えます。
概要
この記事では、PHP を使用して MongoDB マスター/スレーブ レプリケーションの自動切り替えを実装する方法を紹介します。主に、MongoDB マスター/スレーブ ノードの接続、現在のノードが現在のノードであるかどうかの判断に分かれています。マスターノード、スレーブノードからの切り替え マスターノードになる、マスターノードからスレーブノードへ切り替えるという4つのステップ。上記の方法により、MongoDB のマスター/スレーブ レプリケーション中のデータの可用性とフォールト トレランスを確保し、より堅牢かつ効率的にすることができます。
以上がPHP で MongoDB のマスター/スレーブ レプリケーションの自動切り替えを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。