この記事では、Redis のマスター/スレーブ同期と Sentinel モードについて深く理解し、マスター/スレーブ同期をオンまたはオフにする方法と、Sentinel をビルドして起動する方法を紹介します。みんな!
マスター/スレーブ同期
マスター/スレーブ同期 (マスター/スレーブ レプリケーション) は、Redis
の基礎です。可用性サービスであり、複数マシンの操作における最も基本的な です。 [関連する推奨事項: Redis ビデオ チュートリアル ]
主にデータを保存するノードをマスター ノード (master
) と呼び、マスターをコピーする他のレプリカ ノードを呼びます。ノード データ 次の図に示すように、スレーブ ノード (slave
) と呼ばれます。 #マスター ノードは複数のスレーブ ノードを持つことができます
次の図に示すように、スレーブ ノードは他のサーバーのマスター ノードになることもできます
マスタ/スレーブ同期のメリット
マスタ/スレーブ同期には次の 3 つの利点があります
パフォーマンスの側面: マスターとスレーブの同期を使用すると、
クエリ タスクをスレーブ サーバーに割り当てることができます、 マスター サーバーを使用して書き込み操作を実行できます 、これにより、プログラムの動作効率が大幅に向上します。すべての負荷が各サーバーに分散されます。
- 高可用性: マスター/スレーブ同期により、メイン サーバー ノードがダウンした場合 迅速に行うことができます スレーブ ノードをマスター ノードに昇格させることで、Redis サーバーのダウンタイムの回復にかかる貴重な時間を節約できます;
-
データ損失を防ぎます: マスターサーバーがディスクに損傷した後でも、他のスレーブサーバーは関連するデータを保持しているため、すべてのデータが失われることはありません。 #マスター/スレーブ同期を有効にする
- 運用中にスレーブ サーバーをセットアップする
Redis プロセスの実行中に、replicaof host port コマンドを使用して、自分自身を ターゲット IP
のスレーブ サーバーとして設定できます。マスター サービスがパスワードを設定している場合は、config set masterauth master service password
コマンド メソッドを使用して、スレーブ サーバーにマスター サーバーのパスワードを入力する必要があります実行後
replicaof コマンドの後、スレーブ サーバーのデータはクリアされ、マスター サービスはそのデータ コピーをスレーブ サーバーに同期します。
起動時にスレーブ サーバーを設定します
コマンド
redis-server --port 6380 --replicaof 127.0.0.1 6379
完全なデータ同期
複数のデータベースの一貫性を確保するために、メインサーバーは bgsave コマンドを 1 回実行して RDB
ファイルを生成し、その後Socket を使用します。 メソッドがスレーブ サーバーに送信され、サーバーから RDB
ファイルを受信した後、すべてのデータが独自のプログラムにロードされ、完全なデータ同期が完了します。 部分的なデータ同期
Redis 2.8
より前は、スレーブ サーバーがオフラインになってからオンラインに戻るたびに、マスター サーバーは完全なデータ同期を実行していました。データ同期 、オフライン時間が比較的短いときにこれが発生した場合、少量のデータだけが同期していないときにすべてのデータを同期するのは非常に不便で不経済になります。この機能は
Redis 2.8 で最適化されています。 。
Redis 2.8 の最適化方法では、スレーブ サービスがオフラインになると、マスター サーバーはオフライン後の書き込みコマンドを特定のサイズのキューに保存します。先入れ先出し 実行順序に従い、スレーブサーバーが書き換えられてオンラインに復元されると、マスターサービスはオフライン期間中のコマンドがまだキューにあるかどうかを判断し、残っている場合はデータを直接送信します。したがって、完全な同期を回避することはリソースの無駄です。
オフライン コマンドを保存するためのデフォルトのキュー サイズは 1MB です。ユーザーはキュー サイズ構成項目repl-backlog-size を変更できます。
ディスクレス データ同期
最初のマスター/スレーブ接続中に、最初に
RDB
RDB ファイルはスレーブ サーバーに送信されます。マスター サーバーが非 SSD の場合、システムの
I/O
Redis 2.8.18
新しいディスクレス コピー機能が追加されました。ディスクレス コピー機能は、ローカルに RDB
ファイルを作成しませんが、子プロセスを生成し、その子プロセスがこのプロセスは、Socket
を介して RDB
ファイルをスレーブ サーバーに直接書き込むため、マスター サーバーは RDB
ファイルを作成せずにトランザクションを完了できます。サーバーからのデータ同期。
コピーフリー機能を使用するには、構成項目 repl-diskless-sync
の値を yes
に設定するだけです。デフォルトの構成値は です。いいえ###。
サーバーのロールのクエリ
role コマンドを使用して、サーバーのマスター/スレーブ ロール情報をクエリします。現在のサーバー。
マスターとスレーブの同期を閉じる
replicaof no one コマンドを使用して、スレーブ サーバーからのレプリケーションを停止できます。 。
replicaof no one コマンドを実行した後、サーバーからマスターサーバーに変更しました。
#注意事項
データの一貫性の問題スレーブ サーバーが完了し、マスター サービスが開始されたときデータが同期された後、新しいコマンドが非同期でスレーブ サーバーに送信されます。このプロセス中に、マスターとスレーブの同期で短期間のデータの不整合が発生します。この非同期同期が発生する前にマスター サーバーがダウンした場合、データは不整合になります。
スレーブ サーバー読み取り専用デフォルトでは、レプリケーション モードのマスター サーバーは書き込み操作と読み取り操作の両方を実行できますが、スレーブ サーバーは読み取り操作のみを実行できます。手術。
スレーブ サーバーで
config setplica-read-only no コマンドを実行して、スレーブ サーバーで書き込みモードを有効にすることができますが、次の点に注意する必要があります。
- キー値が同じ場合、マスター サーバー上のデータがスレーブ サーバーを上書きする可能性がありますserver;
- 完全なデータ同期を実行すると、スレーブ サーバーのサーバー データはクリアされます。
Redis 5.0
以前に使用されていたレプリケーション コマンドは、## の slaveof
でした。 #Redis 5.0 #Redis 5.0
以降、レプリケーション コマンドは replicaof
に変更されました。上位バージョン (Redis 5
) では、replicaof# を使用するようにしてください。 ## なぜなら
slaveof コマンドはいつでも破棄される可能性があります。
Sentinel モード
マスター/スレーブ レプリケーション モードは
Redisマルチマシン操作の基礎ですが、このモード自体に致命的な問題があります。ノードがクラッシュした後、Redis
(センチネル モード) が必要です。これにより、の通常の使用を復元するには手動介入が必要です。
手動プロセスを自動に変えるための自動ツール -
Redis SentinelRedis
は自動ディザスタ リカバリ (
フェールオーバー) を実現します。 ###) 能力。センチネルは、マスター サーバーとスレーブ サーバー上で監視タスクを実行することと同等です。マスター サーバーがダウンしていることが検出されると、対応するルールがすぐにアクティブ化され、手動介入なしでスレーブ サーバーがマスター サーバーにアップグレードされ、サーバーの安定性と速度が向上します。
Redis Sentinel 最小割り当て単位は 1 つのマスターと 1 つのスレーブです。
Redis Sentinel のビルド
コマンドを使用します./src/redis - Sentinel を開始するには、sentinel Sentinel.conf
を使用します。開始するときは、sentinel.conf ファイルをセットアップする必要があります。この構成ファイルには、リスニング マスター ノード情報が含まれている必要があります:
sentinel monitor master-name ip port quorum
その内:
master-nameは、監視対象のマスター ノードに名前を付けることを意味します;
- #ip
はマスター ノードの IP を表し、
- port
はマスター ノードのポートを表し、
- quorum
は
Sentinel# の番号を表します。 ## マスター ノードがオフラインであることを確認しました。 quorum - が 1 に設定されている場合、1 つの
Sentinel
がオフラインであると判断する限り、オフラインであることを確認できることを意味します。本当にオフラインです。マスター ノード サーバー
Redisにパスワードがある場合、
sentinel.conf には次の内容が含まれている必要があります:
sentinel monitor mymaster 127.0.0.1 6379 1 sentinel auth-pass mymaster pwd654321
Sentinel クラスターを開始します
運用環境では、Sentinel を 1 つだけ起動するわけではありません。なぜなら、1 つの Sentinel を起動すると、残念ながらクラッシュした場合、自動災害復旧サービスを提供することはできませんが、これは高可用性の目的に沿わないため、異なる物理マシン上で複数の
Sentinel を起動して Sentinel## を形成します。
#Redis サービスの高可用性を確保するためのクラスター。
StartingSentinel
クラスターの起動方法は非常に簡単で、上記の単一サーバーの起動方法と同じで、複数の Sentinel
を 1 台に監視するだけです。メイン サーバー ノードなので、複数の ##Sentinel が自動的にお互いを検出し、
Sentinel クラスターを形成します。
Sentinel クラスターの数は 1 より大きい奇数です。
quorum のパラメーターは半分に設定されます。プラス 1。たとえば、5 は 3 に設定され、7 は 4 に設定されます。
#Sentinel
クラスター内の 1 つのSentinel がメイン サーバーがオフラインになったと判断すると、メイン サーバーを主観的にオフラインとしてマークします (
主観的にダウン#) ##, SDOWN
)、クラスター内の他の Sentinel
にもサーバーがオフラインであると考えているかどうかを尋ねます。Sentinel# がメイン サーバーがオフラインであることに同意した場合, ## この数が
quorum パラメーターで指定された数に達すると、
Sentinel は対応するメイン サーバーを客観的にオフラインとしてマークします (
客観的にダウン、ODOWN)。次に、フェイルオーバーを開始します。
メインサービス選択ルール
新しいマスターノード選択の優先順位設定
redis.conf の replica-priority
オプションは、新しいマスター ノードの実行の優先順位を設定するために使用されます。そのデフォルト値は 100 で、最大値も 100 です。この値が小さいほど、重量が軽いほど高くなります。新しいマスター ノードの選択ルール
次の条件を持つスレーブ ノードは除外されます。
オフラインであり、長期間ハートビート検出に応答していない、オフラインの疑いのあるスレーブ サーバーをすべて除外します。- 長期間マスター サーバーと通信しておらず、データ状態が古いすべてのスレーブ サーバーを除外します。
- すべてのスレーブ サーバーを除外します。 (
レプリカ優先度
) は 0 サーバーです。 #対象となるスレーブ ノードの選出順序:
最高の優先順位を持つスレーブ ノードが新しいマスター ノードになります。
- 優先順位が等しい場合、レプリケーション オフセットが決定され、最大のオフセットを持つスレーブ ノードが勝ちます;
- 上記 2 つの条件が同じ場合で、
- Redis
を選択します。実行時に最小の ID を持つサーバーが新しいマスター サーバーとしてランダムに生成されます。
古いマスター ノードがオンラインに戻ります
以前の古いマスター ノードがオンラインに戻ると、マスター/スレーブ サーバーで実行されます。スレーブノードとしてのモード。
センチネルの動作原理
まず第一に、各 センチネルは既知の人物に一定の頻度でメッセージを送信します。マスター サーバー、スレーブ サーバー、およびその他の Sentinel インスタンスは、PING コマンドを送信します。
PING
コマンドに対する最後の有効な応答の時間が、down-after-milliseconds
で設定された値 (デフォルトは 30 秒) を超える場合、このインスタンスは次のようになります。
は主観的オフラインとしてマークされています。 メイン サーバーが主観的オフラインとしてマークされている場合、メイン サーバーを監視しているすべての
Sentinel
ノードは、メイン サーバーが実際に主観的オフラインに入ったことを 1 回あたり 1 回の頻度で確認する必要があります。 2 番目の回線ステータス。 指定された時間範囲内で十分な数 (
構成値) Sentinel
がこの判断に一致した場合、マスター サーバーは客観的にオフラインとしてマークされます。この時点で、すべての
はルール ネゴシエーションに従って新しいマスター ノードを自動的に選択します。 注: 有効な
PING
応答は、 PONG、-LOADING
または
です。戻り値が上記の 3 つの応答ではない場合、または指定された時間内に PING
コマンドに対する応答がない場合、Sentinel
はサーバーから返された応答を無効であるとみなします ( 無効
) 。 Sentinel コマンド操作
Sentinel は 1 つのサーバーだけではなく、複数のマスター ノードを監視できます。複数のマスター ノードを監視する場合は、構成ファイルで複数の sentinel Monitor master-name ip port quorum を設定するだけです。異なるマスター ノードを区別するために
master-name を使用します。 . . 監視対象のすべてのマスター サーバーの情報をクエリする
特定のマスターの情報をクエリするノード
マスター ノードの IP とポートの表示
スレーブ ノード情報のクエリ
またはsentinel slides master-name
Sentinel クラスター内の他の Sentinel 情報をクエリします
检查可用 Sentinel 的数量 强制故障转移 在线修改配置信息 在 增加监视主节点 移除主节点的监视 使用 修改 quorum 参数 使用 以上所有对配置文件的修改,都会自动被刷新到物理配置文件 代码实战 更多编程相关知识,请访问:编程入门!!sentinel ckquorum master-name
sentinel failover master-name
Redis 2.8.4
之前如果需要修改 Sentinel
的配置文件,需要重启 Sentinel
。Redis 2.8.4
之后,我们可以在线修改配置文件了。sentinel monitor mymaster IP Port Quorum
命令。sentinel remove master-name
命令。sentinel set master-name quorum n
命令。quorum
参数用来表示确认主节点下线的 Sentinel
数量,如果 quorum
设置为 1 表示只要有一台 Sentinel 确认主观下线后,这个主节点就客观(真正地)下线了。sentinel.conf
中import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisSentinelPool;
import utils.Config;
import java.util.HashSet;
import java.util.Set;
public class SentinelExample {
// master name
private static String _MASTER_NAME = "mymaster";
public static void main(String[] args) {
// Sentinel 配置信息
Set<String> set = new HashSet<>();
// 连接信息 ip:port
set.add("127.0.0.1:26379");
// 创建 Sentinel 连接池
JedisSentinelPool jedisSentinel = new JedisSentinelPool(_MASTER_NAME,
set, Config.REDIS_AUTH);
// 获取 Redis 客户端
Jedis jedis = jedisSentinel.getResource();
// 设置元素
String setRes = jedis.set("key", "Hello, redis.");
System.out.println(setRes);
// 获取元素
System.out.println(jedis.get("key"));
}
}
以上がRedis のマスター/スレーブ同期とセンチネル モードについて話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Redisのデータベースメソッドには、メモリ内データベースとキー価値ストレージが含まれます。 1)Redisはデータをメモリに保存し、速く読み取り、書き込みます。 2)キー価値のペアを使用してデータを保存し、キャッシュやNOSQLデータベースに適したリスト、コレクション、ハッシュテーブル、注文コレクションなどの複雑なデータ構造をサポートします。

Redisは、高速パフォーマンス、リッチデータ構造、高可用性とスケーラビリティ、持続性能力、幅広いエコシステムサポートを提供するため、強力なデータベースソリューションです。 1)非常に速いパフォーマンス:Redisのデータはメモリに保存され、非常に速い読み取り速度と書き込み速度が高く、高い並行性と低レイテンシアプリケーションに適しています。 2)豊富なデータ構造:さまざまなシナリオに適したリスト、コレクションなど、複数のデータ型をサポートします。 3)高可用性とスケーラビリティ:マスタースレーブの複製とクラスターモードをサポートして、高可用性と水平スケーラビリティを実現します。 4)持続性とデータセキュリティ:データの整合性と信頼性を確保するために、データの持続性がRDBとAOFを通じて達成されます。 5)幅広い生態系とコミュニティのサポート:巨大なエコシステムとアクティブなコミュニティにより、

Redisの主な機能には、速度、柔軟性、豊富なデータ構造のサポートが含まれます。 1)速度:Redisはメモリ内データベースであり、読み取り操作はほとんど瞬間的で、キャッシュとセッション管理に適しています。 2)柔軟性:複雑なデータ処理に適した文字列、リスト、コレクションなど、複数のデータ構造をサポートします。 3)データ構造のサポート:さまざまなビジネスニーズに適した文字列、リスト、コレクション、ハッシュテーブルなどを提供します。

Redisのコア関数は、高性能のメモリ内データストレージおよび処理システムです。 1)高速データアクセス:Redisはデータをメモリに保存し、マイクロ秒レベルの読み取り速度と書き込み速度を提供します。 2)豊富なデータ構造:文字列、リスト、コレクションなどをサポートし、さまざまなアプリケーションシナリオに適応します。 3)永続性:RDBとAOFを介してディスクにデータを持続します。 4)サブスクリプションを公開:メッセージキューまたはリアルタイム通信システムで使用できます。

Redisは、次のようなさまざまなデータ構造をサポートしています。1。文字列、単一価値データの保存に適しています。 2。キューやスタックに適したリスト。 3.非重複データの保存に使用されるセット。 4。ランキングリストと優先キューに適した注文セット。 5。オブジェクトまたは構造化されたデータの保存に適したハッシュテーブル。

Redisカウンターは、Redisキー価値ペアストレージを使用して、カウンターキーの作成、カウントの増加、カウントの減少、カウントのリセット、およびカウントの取得など、カウント操作を実装するメカニズムです。 Redisカウンターの利点には、高速速度、高い並行性、耐久性、シンプルさと使いやすさが含まれます。ユーザーアクセスカウント、リアルタイムメトリック追跡、ゲームのスコアとランキング、注文処理などのシナリオで使用できます。

Redisコマンドラインツール(Redis-Cli)を使用して、次の手順を使用してRedisを管理および操作します。サーバーに接続し、アドレスとポートを指定します。コマンド名とパラメーターを使用して、コマンドをサーバーに送信します。ヘルプコマンドを使用して、特定のコマンドのヘルプ情報を表示します。 QUITコマンドを使用して、コマンドラインツールを終了します。

Redisクラスターモードは、シャードを介してRedisインスタンスを複数のサーバーに展開し、スケーラビリティと可用性を向上させます。構造の手順は次のとおりです。異なるポートで奇妙なRedisインスタンスを作成します。 3つのセンチネルインスタンスを作成し、Redisインスタンスを監視し、フェールオーバーを監視します。 Sentinel構成ファイルを構成し、Redisインスタンス情報とフェールオーバー設定の監視を追加します。 Redisインスタンス構成ファイルを構成し、クラスターモードを有効にし、クラスター情報ファイルパスを指定します。各Redisインスタンスの情報を含むnodes.confファイルを作成します。クラスターを起動し、CREATEコマンドを実行してクラスターを作成し、レプリカの数を指定します。クラスターにログインしてクラスター情報コマンドを実行して、クラスターステータスを確認します。作る


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 中国語版
中国語版、とても使いやすい

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、
