ホームページ  >  記事  >  バックエンド開発  >  Redis マスター/スレーブ レプリケーションの自動切り替えを実装する PHP メソッド

Redis マスター/スレーブ レプリケーションの自動切り替えを実装する PHP メソッド

WBOY
WBOYオリジナル
2023-05-16 14:40:36946ブラウズ

Redis は、最新の Web アプリケーションで重要な役割を果たす、非常に人気のあるキー/値ストレージ データベースです。 Redis の高可用性と安定性を確保するには、通常、マスター/スレーブ レプリケーション テクノロジを使用する必要があります。同時に、マスター ノードに障害が発生した場合は自動的にバックアップ ノードに切り替える必要があるため、レプリケーション クラスターには自己修復機能があります。以下では、PHP が Redis マスター/スレーブ レプリケーションの自動切り替えを実装する方法について説明します。

1. Redis マスター/スレーブ レプリケーションの概要

Redis マスター/スレーブ レプリケーションは、1 台の Redis サーバーから複数のスレーブ サーバーにデータをコピーして、分散読み取りと自動フェイルオーバーを実現するテクノロジーです。マスター ノードは書き込み操作を受け取りますが、スレーブ ノードは読み取りリクエストのみを受け入れることができ、マスター ノードからの更新を非同期に複製します。プライマリ ノードに障害が発生すると、高可用性を確保するために自動的にバックアップ ノードに切り替わります。

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

PHP では、Redis 拡張パッケージを使用して、Redis マスター/スレーブ レプリケーションの自動切り替え機能を迅速に実装できます。ここでは、PHP 7.0.0 バージョンを例として取り上げます。まず、Linux 環境に Redis 拡張機能パッケージをインストールします:

sudo pecl install redis

または、手動でダウンロードしてインストールします:

wget https://github.com/phpredis/phpredis/archive/4.1.1.tar.gz
tar xvzf 4.1.1.tar.gz
cd phpredis-4.1.1/
phpize
./configure
make
sudo make install

インストールが完了したら、次の構成を php.ini に追加して有効にできます。 Redis 拡張機能パッケージ:

extension=redis.so

次に、次の PHP コードを使用して、Redis マスター/スレーブ レプリケーションの自動切り替えメソッドを実装します:

//定义主从节点的参数
$redisMaster = [
    'host' => '127.0.0.1',
    'port' => '6379'
];
$redisSlave1 = [
    'host' => '127.0.0.1',
    'port' => '6380'
];
$redisSlave2 = [
    'host' => '127.0.0.1',
    'port' => '6381'
];

//创建主节点连接并设置自动重连
$redis = new Redis();
$redis->pconnect($redisMaster['host'], $redisMaster['port']);
$redis->setOption(Redis::OPT_AUTO_RECONNECT, true);

//创建从节点连接并设置自动重连
$redisSlave1 = new Redis();
$redisSlave1->pconnect($redisSlave1['host'], $redisSlave1['port']);
$redisSlave1->setOption(Redis::OPT_AUTO_RECONNECT, true);

$redisSlave2 = new Redis();
$redisSlave2->pconnect($redisSlave2['host'], $redisSlave2['port']);
$redisSlave2->setOption(Redis::OPT_AUTO_RECONNECT, true);

//测试连接是否正常
if(!$redis->ping()){
    //如果主节点出现故障,自动切换到备用节点
    if(!$redisSlave1->ping() && !$redisSlave2->ping()){
        //如果备用节点1和备用节点2都无法连接,则抛出异常
        throw new Exception('Redis主备节点全部宕机');
    }elseif($redisSlave1->ping()){
        $redis = $redisSlave1;
    }elseif($redisSlave2->ping()){
        $redis = $redisSlave2;
    }
}

//使用Redis主节点进行数据操作
$redis->set('foo', 'bar');
$value = $redis->get('foo');
echo $value;

上記のコードでは、最初にパラメーターを定義します。マスター ノードと 2 つのスペア ノードを含む 3 つの Redis ノード。次に、マスター ノードと 2 つのスレーブ ノード接続がそれぞれ作成され、自動再接続オプションが設定されました。プライマリ ノードの接続に失敗した場合は、自動的にバックアップ ノード 1 または 2 に切り替わります。スタンバイ ノード 1 とスタンバイ ノード 2 の両方が接続に失敗した場合、例外がスローされます。最後に、データ操作に Redis マスター ノードを使用します。

3. 概要

Redis マスター/スレーブ レプリケーションは、障害や異常な状況下でも Redis データベースが自己修復して実行を継続できるようにする効果的な高可用性テクノロジです。 PHP では、Redis 拡張機能を使用して、Redis マスター/スレーブ レプリケーションの自動切り替え機能を迅速に実装できます。上記の方法により、Redis の高可用性と安定性を簡単に実現でき、最新の Web アプリケーションにより堅牢な基本サービスを提供できます。

以上がRedis マスター/スレーブ レプリケーションの自動切り替えを実装する PHP メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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