PHP で MongoDB のマスター/スレーブ レプリケーションの自動切り替えを実装する方法

WBOY
リリース: 2023-05-16 06:10:01
オリジナル
1399 人が閲覧しました

インターネット アプリケーションの発展に伴い、データ量は増加しており、高いデータ可用性に対する要件もますます高まっています。 MongoDB のマスター/スレーブ レプリケーション機能は、この問題をうまく解決できます。マスター/スレーブ レプリケーションを通じて、データを複数のノードにバックアップでき、マスター ノードに障害が発生した場合は自動的にスレーブ ノードに切り替わり、データの可用性とフォールト トレランスが確保されます。 。 能力。

この記事では、MongoDB のマスター/スレーブ レプリケーションの自動切り替えを PHP で実装する方法を紹介します。

MongoDB マスター スレーブ レプリケーションの原理

MongoDB マスター スレーブ レプリケーションは、マスター ノードから複数のスレーブ ノードにデータを同期することでデータ バックアップを実現するデータ バックアップ方式です。マスター ノードは書き込み操作を受信して​​実行し、これらの操作を oplog (操作ログ) に記録し、oplog 内の操作をすべてのスレーブ ノードに同期します。その結果、マスター ノードに障害が発生した場合、データの可用性を確保するために自動的にスレーブ ノードに切り替えることができます。

MongoDB のマスター/スレーブ レプリケーションでは、プライマリ ノードをマスター ノードとして設定し、残りのノードをセカンダリ ノードとしてスレーブ ノードとして設定できます。マスター ノードは、書き込み操作を受信して​​実行し、これらの操作をスレーブ ノードに同期する責任があります。マスター ノードがダウンした場合、MongoDB は自動的に新しいマスター ノードを選択し、新しい書き込み操作をすべてのスレーブ ノードに同期します。

MongoDB のマスター/スレーブ レプリケーションの自動切り替えを実現する PHP 方法

MongoDB のマスター/スレーブ レプリケーションの自動切り替えを実現するには、MongoDB が提供する PHP 拡張ライブラリを使用する必要があります。およびいくつかの関連する PHP 関数。

  1. MongoDB マスター/スレーブ ノードの接続

PHP で MongoDB マスター/スレーブ ノードを接続するコードは次のとおりです:

$mongo = new MongoClient("mongodb://主节点IP:27017,从节点IP:27017");
$db = $mongo->selectDB("db_name");
ログイン後にコピー

ここでは、 MongoDB のマスター ノードとスレーブ ノードを接続するための MongoClient クラス。マスター ノードの IP アドレスとポート、またはスレーブ ノードの IP アドレスとポートを使用できます。接続が成功したら、selectDB() 関数を通じて使用するデータベースを選択します。

  1. 現在のノードがマスター ノードであるかどうかを確認する

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 配列に基づいて、現在のノードがマスター ノードであるかどうかを判断します。

  1. マスター ノードになるように切り替える

現在のノードがスレーブ ノードの場合は、それをマスター ノードにする必要があります。 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 はレプリカ セットの名前であり、実際の状況に応じて変更できます。

  1. スレーブ ノードに切り替える

現在のノードがマスター ノードで、現在のノードがダウンしているか障害が発生している場合は、スレーブ ノードをマスターにする必要があります。ノード。 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート