目次
1. クラスターが必要な理由は何ですか?
3. マスター/スレーブ クラスターの構築
3.1. 準備作業
redis81
四、知识讲解
知识一
 知识二
知识三
a、命令行设置主从关系
b、配置文件设置的主从关系
五、复制原理
六、主从模式的优缺点
优点
缺点
ホームページ データベース Redis Redis クラスターのマスター/スレーブ モードの詳細な説明

Redis クラスターのマスター/スレーブ モードの詳細な説明

Apr 26, 2022 am 11:59 AM
redis

この記事では、Redis に関する関連知識を提供します。主にクラスターに関連する問題を紹介し、マスター/スレーブ クラスターなどを含むマスター/スレーブ モードについて詳しく説明します。見てください、皆さんのお役に立てれば幸いです。

Redis クラスターのマスター/スレーブ モードの詳細な説明

推奨される学習: Redis ビデオ チュートリアル

1. クラスターが必要な理由は何ですか?

実際の開発では、次の理由により、エンジニアリング プロジェクトで 1 つの Redis のみを使用することはできません。

(1) 構造 から、単一の Redis サーバーには 単一障害点 があり、1 つのサーバーがすべてのリクエストの負荷を処理する必要があります。 高圧力 ;

(2) 容量の点では、単一のRedisサーバーのメモリ容量は制限されています。 Redis サーバーです メモリ容量は 256G で、すべてのメモリを Redis ストレージ メモリとして使用することはできません 一般に、1 つの Redis で使用される最大メモリは 20G を超えてはなりません。

(3) 単一 Redis サーバーの 読み取りおよび書き込みパフォーマンスは制限されており、 クラスターを使用すると読み取りおよび書き込みパフォーマンスを向上させることができます。書き込み能力

2. マスター/スレーブ モード

はじめに

現在、Redis には 3 つのクラスター モードがあります。マスター/スレーブ モード、センチネル モード、クラスター モード; マスター/スレーブ モードは、3 つのモードの中で最も単純です。マスター/スレーブ レプリケーションでは、 は Redis サーバーのデータを指します. 他の Redis サーバーにコピーします。前者をマスターノード(マスター/リーダー)、後者をスレーブノード(スレーブ/フォロワー)と呼びます。

##注:

(1)
データ レプリケーションは一方向です

、マスターノードからスレーブノードへのみ。 マスターは主に書き込み用、スレーブは主に読み取り用です。 (2)デフォルトでは、各 Redis サーバーは マスター ノード
; (3)マスター ノードは複数のスレーブ ノードを持つことができます (またはスレーブ ノードなし)、ただし スレーブ ノードはマスター ノードを 1 つだけ持つことができます

関数

1、

データ冗長性

: メインホットデータのバックアップは、永続化に加えてデータの冗長化方法であるレプリケーションによって実現されます。 2. 障害回復
: マスター ノードに問題が発生した場合、スレーブ ノードは迅速な障害回復を実現するためのサービスを提供できます。これは実際には一種のサービス冗長です。 3. 高可用性の基礎 (クラスター)
: マスター/スレーブ レプリケーションは依然としてセンチネルとクラスターの実装の基礎です。 Redis の高可用性の基礎。 4. ロードバランシング
: マスター/スレーブレプリケーションに基づいて、読み取り/書き込み分離と組み合わせることで、マスターノードは書き込みサービスを提供でき、スレーブノードは書き込みサービスを提供できます。読み取りサービス (つまり、書き込み Redis データはマスター ノードに接続し、Redis データはスレーブ ノードから読み取る必要があります) を使用してサーバー負荷を共有します。特に書き込みが少なく読み取りが多いシナリオでは、読み取り負荷を複数のノードで共有します。スレーブ ノードにより、Redis サーバーの同時実行性が大幅に向上します。 たとえば、当社の電子商取引 Web サイトで、 商品をアップロードする必要があるのは 1 回だけですが、ユーザーは複数回閲覧できます

つまり、 "

書き込みを減らし、より多く読む" この場合、マスター/スレーブ レプリケーションを使用して読み取りと書き込みを分離できます ,サーバーへの負荷を軽減します#:#

3. マスター/スレーブ クラスターの構築

3.1. 準備作業

1. 3 つの設定ファイルをコピーします (元の名前: redis.conf)、名前変更: redis79.confredis80.conf,redis81.conf

2. 設定ファイルの変更

(1) redis79 の変更.conf

ポート番号を変更します

port 6379
ログイン後にコピー

実行するように設定します背景

daemonize:yes
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

#ログ ファイルの名前を設定します##

logfile “6379.log"
ログイン後にコピー

#名前を設定しますdb ファイルの

dbfilename dump6379.rdb
ログイン後にコピー
(2)

redis80.conf を変更します

#ポート番号を変更します

port 6380
ログイン後にコピー

バックグラウンドで実行するように設定します

#

daemonize:yes
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
記録プロセス ID ファイル名を設定します

pidfile /var/run/redis_6380.pid
ログイン後にコピー
# ログ ファイルの名前を設定します

#
logfile “6380.log"
ログイン後にコピー

##db ファイルの名前を設定します

dbfilename dump6380.rdb
ログイン後にコピー

(3) redis81.conf

# を変更します

##ポート番号を変更します

port 6381
ログイン後にコピー

#バックグラウンドで実行するように設定します

daemonize:yes
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
#記録プロセス ID ファイル名を設定します

pidfile /var/run/redis_6381.pid
ログイン後にコピー
ログ ファイルの名前を設定します

# #

logfile “6381.log"
ログイン後にコピー
db ファイルの名前を設定します

dbfilename dump6381.rdb
ログイン後にコピー
#これらの属性の機能は次のとおりです:

pid(port ID): プロセスの ID とロックされたファイル バンドを記録します。プログラムが複数回起動されるのを防ぎます。

logfile

: ログ ファイルの場所をクリアします。 dbfilename

: dumpxxx.file #永続ファイルの場所

port: 占有されているポートプロセス番号
#3.2. 1 つのマスターと 2 つのスレーブを設定します
Redis サーバーを起動します

: デフォルトでは、各 Reid サーバーはマスター ノードであり、マスター/スレーブ ノードを構築したい場合は、スレーブ マシン上に構築するだけで済みます。

redis79

redis80

# をそれぞれ開始します。 ##redis81

サーバー。

redis-server redis79.conf 
redis-server redis80.conf
redis-server redis81.conf
ログイン後にコピー
次のコマンドを使用して、起動が成功したかどうかを確認します:
 ps -ef|grep redis
ログイン後にコピー
クライアントを 3 つ開きますWindows 、3 つの Redis サーバーの操作に対応します。

コマンドを入力します:

どの Redis を開くかを知るにはポートを指定する必要があることに注意してください。

ウィンドウ 1:

redis-cli -p 6379
ログイン後にコピー

ウィンドウ 2:

redis-cli -p 6380
ログイン後にコピー
ウィンドウ 3:

redis-cli -p 6381
ログイン後にコピー
マスター/スレーブ関係の設定

redis79

をプライマリ ノード

として設定し、

redis80

redis81

を From として設定します。ノード

ホストの IP アドレスとポート番号を設定することは、ホストを上司として認識したいことと同じです。 redis80:

#SLAVEOF IP地址  端口
127.0.0.1:6380> slaveof 127.0.0.1 6379
OK
ログイン後にコピー
redis81:

#SLAVEOF IP地址  端口
127.0.0.1:6381> slaveof 127.0.0.1 6379
OK
ログイン後にコピー

这个时候,我们在从机使用INFO命令就可以查看主从关系了:

info replication
ログイン後にコピー

 而此时我们去主机redis79中使用同样的命令进行查看:

现在我们的一主二从的关系就成功搭建好了!

提示:如果要将从机变成主机,我们只需要在从机执行以下命令,即可让自己变为主机。

SLAVEOF no one
ログイン後にコピー

四、知识讲解

知识一

主机可以进行读写操作,而从机只能读操作。 

注意:主机中的所有信息和数据,都会自动被从机保存。

主机:

127.0.0.1:6379> set key1 v1
OK
127.0.0.1:6379> get key1
"v1"
ログイン後にコピー

从机:

127.0.0.1:6380> get key1  
"v1"
127.0.0.1:6380> set key2 v2    #进行写操作就会报错,提示从机只能进行读操作
(error) READONLY You can't write against a read only replica.
ログイン後にコピー

 知识二

主机如果宕机了,从机依旧可以读取到主机宕机前的数据,但仍然没有写操作,如果主机恢复过来了,从机依旧可以获取到主机写的数据。

(1)停止主机进程(演示主机宕机了)

停止进程的命令:

kill -9 pid #pid为redis进程号
ログイン後にコピー

(2)从机获取宕机前主机写入的数据

可以发现,能够顺利拿到,但仍然是无法进行写操作的。

 (3)恢复主机

redis-server redis79.conf
ログイン後にコピー

(4)主机重新写入数据,从机获取最新数据。

主机写入数据:

127.0.0.1:6379> set k2 yixin
OK
ログイン後にコピー

从机读取最新数据:

127.0.0.1:6380> get k2
"yixin"
ログイン後にコピー

知识三

两种配置方式下的从机断开情况

a、命令行设置主从关系

从机断开了,其重新连接后变为主机,能拿到断开之前的数据,但拿不到主机新写入的值,如果重新设置主从关系,就可以拿到主机全部的数据了。

(1)停止从机进程。

 (2)主机写入新数据。

127.0.0.1:6379> set k3 new
OK
ログイン後にコピー

(3)重新启动从机服务器。

redis-server redis80.conf
ログイン後にコピー
ログイン後にコピー

(4)尝试获取从机宕机前主机写入的数据,发现可以拿到。

127.0.0.1:6380> get k1
"v1"
ログイン後にコピー

(5)尝试获取从机宕机期间主机写入的数据,发现无法拿到了。

127.0.0.1:6380> get k3
(nil)
ログイン後にコピー

此次我们可以进行查看主从关系,由于是命令行配置的,所以重启之后又变回主机了

127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:0
ログイン後にコピー

(6)如果要拿到主机的所有数据,只要执行以下命令重新配置主从关系就可以了。 

slaveof 127.0.0.1 6379
ログイン後にコピー

b、配置文件设置的主从关系

从机断开后,重新连接,也是可以拿到主机的全部数据的。

(1)修改配置文件redis80.conf,添加主从关系。

#指定主机的ip与port
slaveof 127.0.0.1 6379
ログイン後にコピー

(2)主机添加新数据

127.0.0.1:6379> set k5 hello
OK
ログイン後にコピー

(3)重新启动redis80服务器。

redis-server redis80.conf
ログイン後にコピー
ログイン後にコピー

(4)获取从机宕机期间主机新写入的数据,发现现在可以顺利拿到了。

127.0.0.1:6380> get k5
"hello"
ログイン後にコピー

我们来查看6380的主从关系,可以发现在重启的时候就已经设置好主从关系了

五、复制原理

(1)Slave 启动成功连接到 Master 后会发送一个sync同步命令

(2)Master 接到命令,启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,并完成一次完全同步

(3)全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。

(4)增量复制:Master 继续将新的所有收集到的修改命令依次传给slave,完成同步。

注意:只要是重新连接master,一次完全同步(全量复制)将被自动执行! 我们的数据一定可以在从机中看到。

六、主从模式的优缺点

优点

(1)同一个Master可以同步多个Slaves
(2)Slave同样可以接受其它Slaves的连接和同步请求,这样可以有效的分载Master的同步压力。因此我们可以将Redis的Replication架构视为图结构。
(3)Master Server是以非阻塞的方式为Slaves提供服务。所以在Master-Slave同步期间,客户端仍然可以提交查询或修改请求。
(4)Slave Server同样是以非阻塞的方式完成数据同步。在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据。
(5)为了分载Master读操作压力Slave服务器可以为客户端提供只读操作的服务,写服务仍然必须由Master来完成。即便如此,系统的伸缩性还是得到了很大的提高。
(6)Master可以将数据保存操作交给Slaves完成,从而避免了在Master中要有独立的进程来完成此操作。
(7)支持主从复制,主机会自动将数据同步到从机,可以进行读写分离

缺点

(1) Redis 主从模式不具备自动容错和恢复功能,如果主节点宕机,Redis 集群将无法工作,此时需要人为干预,将从节点提升为主节点。
(2) 如果主机宕机前有一部分数据未能及时同步到从机,即使切换主机后也会造成数据不一致的问题,从而降低了系统的可用性。
(3) 因为只有一个主节点,所以其写入能力和存储能力都受到一定程度地限制。
(4) 在进行数据全量同步时,若同步的数据量较大可能会造卡顿的现象。

推荐学习:Redis视频教程

以上がRedis クラスターのマスター/スレーブ モードの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Redisクラスターモードの構築方法 Redisクラスターモードの構築方法 Apr 10, 2025 pm 10:15 PM

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

Redisデータをクリアする方法 Redisデータをクリアする方法 Apr 10, 2025 pm 10:06 PM

Redisデータをクリアする方法:Flushallコマンドを使用して、すべての重要な値をクリアします。 FlushDBコマンドを使用して、現在選択されているデータベースのキー値をクリアします。 [選択]を使用してデータベースを切り替え、FlushDBを使用して複数のデータベースをクリアします。 DELコマンドを使用して、特定のキーを削除します。 Redis-CLIツールを使用してデータをクリアします。

Redisコマンドの使用方法 Redisコマンドの使用方法 Apr 10, 2025 pm 08:45 PM

Redis指令を使用するには、次の手順が必要です。Redisクライアントを開きます。コマンド(動詞キー値)を入力します。必要なパラメーターを提供します(指示ごとに異なります)。 Enterを押してコマンドを実行します。 Redisは、操作の結果を示す応答を返します(通常はOKまたは-ERR)。

単一のスレッドレディスの使用方法 単一のスレッドレディスの使用方法 Apr 10, 2025 pm 07:12 PM

Redisは、単一のスレッドアーキテクチャを使用して、高性能、シンプルさ、一貫性を提供します。 I/Oマルチプレックス、イベントループ、ノンブロッキングI/O、共有メモリを使用して同時性を向上させますが、並行性の制限、単一の障害、および書き込み集約型のワークロードには適していません。

Redisのソースコードを読み取る方法 Redisのソースコードを読み取る方法 Apr 10, 2025 pm 08:27 PM

Redisソースコードを理解する最良の方法は、段階的に進むことです。Redisの基本に精通してください。開始点として特定のモジュールまたは機能を選択します。モジュールまたは機能のエントリポイントから始めて、行ごとにコードを表示します。関数コールチェーンを介してコードを表示します。 Redisが使用する基礎となるデータ構造に精通してください。 Redisが使用するアルゴリズムを特定します。

基礎となるRedisを実装する方法 基礎となるRedisを実装する方法 Apr 10, 2025 pm 07:21 PM

Redisはハッシュテーブルを使用してデータを保存し、文字列、リスト、ハッシュテーブル、コレクション、注文コレクションなどのデータ構造をサポートします。 Redisは、スナップショット(RDB)を介してデータを維持し、書き込み専用(AOF)メカニズムを追加します。 Redisは、マスタースレーブレプリケーションを使用して、データの可用性を向上させます。 Redisは、シングルスレッドイベントループを使用して接続とコマンドを処理して、データの原子性と一貫性を確保します。 Redisは、キーの有効期限を設定し、怠zyな削除メカニズムを使用して有効期限キーを削除します。

Redisキューの読み方 Redisキューの読み方 Apr 10, 2025 pm 10:12 PM

Redisのキューを読むには、キュー名を取得し、LPOPコマンドを使用して要素を読み、空のキューを処理する必要があります。特定の手順は次のとおりです。キュー名を取得します:「キュー:キュー」などの「キュー:」のプレフィックスで名前を付けます。 LPOPコマンドを使用します。キューのヘッドから要素を排出し、LPOP Queue:My-Queueなどの値を返します。空のキューの処理:キューが空の場合、LPOPはnilを返し、要素を読む前にキューが存在するかどうかを確認できます。

Redis用のメッセージミドルウェアの作成方法 Redis用のメッセージミドルウェアの作成方法 Apr 10, 2025 pm 07:51 PM

Redisは、メッセージミドルウェアとして、生産消費モデルをサポートし、メッセージを持続し、信頼できる配信を確保できます。メッセージミドルウェアとしてRedisを使用すると、低遅延、信頼性の高いスケーラブルなメッセージングが可能になります。

See all articles