ホームページ  >  記事  >  データベース  >  Redis クラスタリングの 3 つの方法とは何ですか

Redis クラスタリングの 3 つの方法とは何ですか

WBOY
WBOY転載
2023-05-26 14:37:131428ブラウズ

Redis の 3 つのクラスタリング方法: マスター/スレーブ レプリケーション、センチネル モード、クラスター クラスター。

マスター/スレーブ レプリケーション

Redis クラスタリングの 3 つの方法とは何ですか

基本原理

新しいスレーブ サーバーが作成されると、スレーブ サーバーは SYNC コマンドを送信します。マスターサーバーはSYNCコマンドを受信した後、BGSAVEコマンドを実行します。実行中、すべてのコマンドはバッファに書き込まれます。BGSAVEコマンドが実行されると、生成されたRDBファイルがスレーブサーバーに送信されます。スレーブ サーバーはこのファイルを使用し、データをメモリにロードすると、マスター サーバーはバッファ コマンドを Redis コマンド プロトコルの形式でスレーブ サーバーに送信します。その後、マスター サービスがコマンドを実行するたびに、スレーブ サーバーと同期されます。複数のスレーブ サーバーがマスター サーバーに SYNC コマンドを送信した場合でも、マスター サーバーは次の同期要求を処理するために BGSAVE コマンドを 1 つだけ実行します。マスター サーバーは複数のスレーブ サーバーを持つことができ、スレーブ サーバーもスレーブ サーバーを持つことができ、グラフのような構造を形成できます。レプリケーション機能はマスター サーバーをブロックしません。1 つ以上の同期要求がある場合でも、マスター サーバーは引き続き実行できます。コマンド要求を処理します。

永続化スイッチ

マスター/スレーブ レプリケーション モードを設定する場合、マスター サーバーの永続化機能をオンにする必要があります。マスター サーバーの永続化機能がオフの場合は、一度マスター サーバーの永続化機能をオンにする必要があります。マスター サーバーが再起動されると、すべてのスレーブ サーバーが再起動されます。データは失われます。Sentinel モードが設定されている場合でも、メイン サーバーがすぐにプロセスを自動的に開始し、新しいメイン サーバーが Sentinel モードで選択されていない場合、メイン サービスによっても、サブサーバー上のデータ損失が発生します。

構成

マスター/スレーブ レプリケーション モードを構成するには、Slaveof コマンドを使用するか、それを conf 構成ファイルに追加するか、redis でコマンドを実行します。

SLAVEOF host port

Sentinel モード

Redis クラスタリングの 3 つの方法とは何ですか

基本原理

Redis の Sentinel システムは複数の Redis を管理するために使用され、主に次の 3 つのことを実行します。 :

モニタリング: Sentinel はマスター サーバーとスレーブ サーバーの実行ステータスを継続的にチェックします

リマインダー: Redis サーバーに障害が発生した場合、API または他のアプリケーションを通じて通知を送信できます

自動フェイルオーバー移行: マスター サーバーが正常に動作しない場合、Sentinel は自動障害移行を実行し、障害が発生したマスター サーバーのスレーブ サーバーから新しいマスター サーバーを選択します。残りのスレーブ サーバーは自動的に接続し、選択された新しいマスターを複製します。サーバー サーバーデータ。

Redis の Sentinel システムは分散システムであり、システム内に 1 つ以上の Sentinel を構成できます。

Start

redis-sentinel を使用して開始

redis-sentinel sentinel.confy

redis-server を使用して開始することもできます

redis-server sentinel.conf --sentinelyy

上記 2 つの方法は両方とも開始できますSentinel、起動 Sentinel は設定ファイルを指定する必要があります。指定しないと起動できません:

Redis クラスタリングの 3 つの方法とは何ですか

Configuration

sentinel.conf ファイルには少なくとも 1 つの設定が必要です:

sentinel monitor mymaster 127.0.0.1 6379 2

監視 mymaster という別名のホストのアドレスは 127.0.0.1、ポートは 6379 です。このマスター サーバーを無効と判断するには、少なくとも 2 人の監視員の同意が必要です。

マスター サーバーの障害を特定するために同意するようにセットアップされたセンチネルの数に関係なく、障害移行をサポートするにはシステム内の複数のセンチネルが必要です。少数のセンチネルのみが正常に実行されている場合、障害移行は実行できません。実行されました。

障害移行

Sentinel がメイン サーバーがオフラインであることを検出した場合、それは主観的オフラインと呼ばれます。複数の Sentinel のみがメイン サービスがオフラインであることを検出し、コマンドを通じて相互に通信します。メインサーバーがオフラインになることを目的オフラインと呼びます。マスター サーバーが客観的にオフラインである場合にのみ、リーダーの Sentinel が選出され、選出後、新しいマスター サーバーが投票によってマスター サーバーにアップグレードされるスレーブ サーバーが選出されます。そして、選択したスレーブ サーバーに Slaveof no one コマンドを送信して、マスター サーバーにします。パブリッシュおよびサブスクライブ機能を通じて、新しい設定が更新のために他の Sentinel にブロードキャストされ、Slaveof コマンドがオフラインのマスター サーバーに送信され、すべてのスレーブ サーバーが新しいマスター サーバーの複製を開始すると、リーダー Sentinel はこの障害移行を終了します。

Redis インスタンスが再構成されると、それがマスター サーバー、スレーブ サーバー、または別のマスター サーバーのスレーブ サーバーとして設定されているかどうかに関係なく、Sentinel は再構成されたインスタンスにメッセージを送信します。 ##CONFIG REWRITE コマンドを使用して、これらの構成がハード ディスクに確実に保持されるようにします。 #########集まる############<p>之前的主从复制,哨兵模式都难以再现扩容,而Redis cluster集群实现了对Redis的水平扩容,即启动N个Redis节点,每个节点又可以有自己的从服务器,将数据均匀分布的存储在这N个结点上,每个节点存储数据的1/N。Redis cluster集群就是一个可以在多个Redis节点之间进行数据共享的设施;Redis cluster集群采用的是无中心化配置,即节点A无法处理,会将请求转发只节点B进行处理。</p> <h4>键分布模型</h4> <p>Redis集群中的键空间被分割为16384个槽位。Redis采用CRC16算法对16384个槽位进行分配,每个主节点负责其中一部分。为了保证高可用,cluster模式也引入了主从复制模式,一个主节点对应一个或多个从节点,当主节点发生宕机时,可进行故障转移,将子节点升级为主节点。</p> <h4>配置cluster集群</h4> <p>Redis 集群由多个运行在集群模式(cluster mode)下的 Redis 实例组成, 实例的集群模式需要通过配置来开启,以下是一个包含了最少选项的集群配置文件示例:</p><pre class="brush:plain;">port 7000 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes</pre><p>cluster-enabled:打开集群模式<br>cluster-config-file:节点配置文件名,无须人为修改, 它由 Redis 集群在启动时创建, 并在有需要时自动进行更新<br>cluster-node-timeout:节点失联时间,当超过此毫秒,集群将自动切换主从节点。</p> <p>要让集群正常运作至少需要三个主节点,而每个主节点都应该正确配置一个或者多个从节点。</p> <h4>启动集群</h4> <p>使用redis-cli --cluster create命令将节点合并成一个集群</p><pre class="brush:bash;">redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005</pre><p> --cluster-replicas 1 这个指的是从机的数量,表示我们希望为集群中的每个主节点创建一个从节点。</p> <p>进入集群模式只需要使用redis-cli -c命令</p><pre class="brush:bash;">redis-cli -c -p 7000</pre><p>无中心话节点,所以进入任意一个端口号的主节点即可。</p>

以上がRedis クラスタリングの 3 つの方法とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。