1つ、マスタースレーブモード
永続性はメモリ内のデータをハードディスクに保存し、再起動するとハードディスクからデータがロードされるため、永続性機能により、Redisはサーバーが再起動してもデータが失われない(または少量の損失が発生しない)ことを保証します。
ただし、データはサーバーに保存されているため、このサーバーにハードディスク障害などの問題があると、データの損失も発生します。単一障害点を回避するために、通常は、データベースの複数のコピーを複製して異なるサーバーに展開し、1つのサーバーに障害が発生した場合でも、他のサーバーがサービスを提供し続けることができるようにします。この目的のために、Redisは、1つのデータベースのデータが更新されたときに、更新されたデータを他のデータベースに自動的に同期できるレプリケーション機能を提供します。
レプリケーションの概念では、データベースは2つのカテゴリに分類されます。1つはマスターデータベース(マスター)で、もう1つはスレーブデータベース(スレーブ)です。マスターデータベースは読み取りおよび書き込み操作を実行でき、書き込み操作によってデータが変更されると、データがスレーブデータベースに自動的に同期されます。スレーブデータベースは、一般に読み取り専用とマスタデータベースから同期データを受け入れています。マスターデータベースには複数のスレーブデータベースを含めることができ、スレーブデータベースには1つのマスターデータベースしか含めることができません。
マスタースレーブデータベース構成
masterデータベースを設定する必要はありません。スレーブデータベースの情報は、Redisのconfファイルからロードすることができます。また、起動時に6380 --slaveof 127.0.0.1 6379 --portのRedisサーバを使用することができます。
スレーブデータベースがあります通常は読み取り専用で、書き込みに変更できますが、書き込まれたデータはメインの同期によって簡単に失われるため、読み取り専用である必要があります。
実行時にslaveofip portコマンドを使用して元のマスターを停止し、設定したばかりのマスタースレーブに切り替えることもできます。これにより、自分がマスターになります。
コピーの原則
ときに、データベースから始めて、それがメインのデータベースに同期コマンドを送信します。同期を受け取った後、メインデータベースは、バックグラウンドでスナップショットRDBを節約するために開始します。スナップショットの保存中に受信したコマンドがキャッシュされます。ときスナップショットが完了すると、メインデータベースがスナップショットとキャッシュを取得します。コマンドはスレーブ**に送信されます。コピーの初期化が終了します。
その後、マスターがコマンドを受信するたびに、それは同期的にスレーブに送信されます。
切断と再接続が発生すると、2.8以降のバージョンは切断中にコマンドを再データベースに送信します。増分コピー
マスタースレーブレプリケーションは楽観的レプリケーションです。クライアントが書き込み実行をマスターに送信すると、結果はマスター実行の直後にクライアントに返され、コマンドは非同期でスレーブに送信されるため、パフォーマンスに影響はありません。少なくとも同時に書き込むことができるスレーブマスターの数を設定することもできます。
ハードディスクなしでのコピー:ハードディスクの効率が低い場合、コピーのパフォーマンスに影響があります。2.8以降は、ハードディスクなしでコピーを設定できます。repl-diskless-syncyes
第二に、歩哨
マスターデータベースで異常なサービスの中断が発生した場合、開発者はスレーブデータベースを手動で選択してマスターデータベースにアップグレードし、システムが引き続きサービスを提供できるようにすることができます。ただし、プロセス全体は比較的面倒であり、手動による介入が必要であるため、自動化が困難です。このため、Redis 2.8には、自動化されたシステム監視および障害回復機能を実現するためのセンチネルツールが用意されています。
番兵の役割は、redisマスターデータベースとスレーブデータベースが正常に動作しているかどうかを監視することです。マスターに障害が発生すると、マスターはスレーブデータベースをマスターデータベースに自動的に変換します。
例:
1つのマスター、2つのスレーブ、1つの歩哨
redis-server --port 6379
redis-server --port 6380 --slaveof 192.168.0.167 6379
redis-server --port 6381 --slaveof 192.168.0.167 6379
哨兵配置文件 sentinel.conf
sentinel monitor mymaster 192.168.0.167 6379 1
这里的1代表1个哨兵
注:
システムを監視するようにSentinelを構成する場合は、監視マスターデータベースを構成するだけで済み、Sentinelはマスターデータベースを複製するすべてのスレーブデータベースを自動的に検出します。
このようにして、歩哨はマスター6379とスレーブ6380および6381を監視できます。6379が電話を切ると、歩哨は優先度に基づいて2つのうちの1つをマスターとして選択します。同じ場合は、小さいID。6379が再び起動すると、マスターとして機能します。存在から。
3、クラスター(クラスター対応)
クラスターを使用するには、各データベースノードのクラスター対応構成をオンにするだけで済みます。正しく機能するには、各クラスターに少なくとも3つのプライマリデータベースが必要です。
センチネルが使用されている場合でも、redisの各インスタンスは完全に保存され、各redisに保存されるコンテンツは完全なデータであるため、メモリが浪費され、バレル効果があります。メモリを最大限に活用するために、分散ストレージであるクラスターを使用できます。つまり、各redisは異なるコンテンツを格納します。
クラスターには少なくとも3つのマスターと3つのスレーブが必要であり、各インスタンスは異なる構成ファイルを使用します。マスターとスレーブを構成する必要はなく、クラスターはそれ自体で選択します。
各インスタンスの構成ファイルを変更します。
cluster-enabled yes --开启集群
cluster-config-file nodes-6382.conf --集群配置文件名,
每个实例配置的要不同,redis会根据文件名自动新建
クラスター操作
redis安装目录的src执行./redis-trib.rb create --replicas 1
127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382
127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385
ここでのマスター選挙は動物園の飼育係のそれと似ています