から、Redisのマスターコピー
1.1、マスタースレーブレプリケーションの紹介
1)非同期レプリケーションの使用を。
2)サーバからマスタサーバの複数。サーバーからもサーバーから独自のを持つことができます。
3)コピー機能は、メインサーバをブロックしません
4)あなたはコピー機能により、永続性操作を実行するために、プライマリサーバから行うことができ、操作が永続化するために、サーバから実行することができます。
1.2データセキュリティ
Redisのレプリケーションを構成するとき、強く、マスターサーバーの永続的な機能をオープンすることをお勧めします。そうでない場合は、原因遅延やその他の問題のために、サービスの展開は、プルアップ自動的に避けるべきです。マスターサーバーから失われたデータのすべてにつながる次の例を参照してください、ホームサーバーがダウンしている持続プルアップ自動的にリスクを理解するために:
1.メインサーバノードAと仮定すると、および持続性をオフにします。そして、ノードB及びCは、ノードAからのデータをコピーします
2.ノードがクラッシュし、自動的に永続が閉じたノードので、サービスノードAから引き出され、したがってデータは、再起動後に存在しない再始動
3.ノードBとノードCからのコピーデータが、データAが空であるので、彼は、欠失によって記憶されたデータのコピーを取りました。
4)メインサーバの永続性の閉鎖で、同時に自動的に高可用性を実現するためにも、Redisのセンティネルと、プロセスを引き上げるだけでなく、非常に危険なケースを開きます。マスタが検出センチネルサーバが再起動されていないように、プライマリ・サーバが、非常に迅速にプルアップすることができるので、その後、上記プロセスデータ損失ハートビート設定された時間間隔で実行されるであろう。
ので、データのセキュリティは、非常に重要であるときはいつでも、同時に持続的なプライマリサーバを禁止されるべきプルアップ自動的にダウンしました。
1.3、マスター・スレーブ原理をコピーします
理論的根拠:
1. 副本库通过slaveof 10.0.0.51 6379命令,连接主库,并发送SYNC给主库
2. 主库收到SYNC,会立即触发BGSAVE,后台保存RDB,发送给副本库
3. 副本库接收后会应用RDB快照
4. 主库会陆续将中间产生的新的操作,保存并发送给副本库
5. 到此,我们主复制集就正常工作了
6. 再此以后,主库只要发生新的操作,都会以命令传播的形式自动发送给副本库.
7. 所有复制相关信息,从info信息中都可以查到.即使重启任何节点,他的主从关系依然都在.
8. 如果发生主从临时断开。从库数据没有被破坏的情况下,在下次重连之后,,从库发送PSYNC给主库 (2.8版本之后)
9. 主库只会将从库缺失部分的数据同步给从库应用,达到快速恢复主从的目的
其他说明:
1)SYNC 命令执行示例
2)命令传播
在主从服务器完成同步之后,主服务器每执行一个写命令,它都会将被执行的写命令发送给从服务器执行,这个操作被称为“命令传播”(command propagate)。命令传播是一个持续的过程:只要复制仍在继续,命令传播就会一直进行,使得主从服务器的状态可以一直保持一致
3)复制中的SYNC与PSYNC
①在 Redis 2.8 版本之前, 断线之后重连的从服务器总要执行一次完整重同步(full resynchronization)操作。
②从 Redis 2.8 开始,Redis 使用 PSYNC命令代替 SYNC 命令。PSYNC 比起 SYNC 的最大改进在于 PSYNC 实现了部分重同步(partial resync)特性:在主从服务器断线并且重新连接的时候,只要条件允许,PSYNC 可以让主服务器只向从服务器同步断线期间缺失的数据,而不用重新向从服务器同步整个数据库。
SYNC 处理断线重连示例:
PSYNC 处理断线重连示例:
1.4、复制一致性
1.4.1、问题引出
1)在读写分离环境下,客户端向主服务器发送写命令 SET n 10086,主服务器在执行这个写命令之后,向客户端返回回复,并将这个写命令传播给从服务器。
2)接到回复的客户端继续向从服务器发送读命令 GET n ,并且因为网络状态的原因,客户端的 GET命令比主服务器传播的 SET 命令更快到达了从服务器。
3)因为从服务器键 n 的值还未被更新,所以客户端在从服务器读取到的将是一个错误(过期)的 n值。
1.4.2、问题解决
从 Redis 2.8 开始, 为了保证数据的安全性, 可以通过配置, 让主服务器只在有至少 N 个当前已连接从服务器的情况下, 才执行写命令。不过, 因为 Redis 使用异步复制, 所以主服务器发送的写数据并不一定会被从服务器接收到,因此, 数据丢失的可能性仍然是存在的。
通过以下两个参数保证数据的安全:
奴隷-へ-書き込み分<スレーブの数> 最小-最大-LAG-奴隷<秒数> この機能の動作原理: 1秒間に1回PINGマスター一度サーバー、およびコピー処理の流れの例を報告。 マスターサーバーは、時間にそれが最後のPINGに、サーバから送信されるたびに記録します。 1)あなたは、設定最大ネットワーク遅延を指定することができ、そして最小スレーブ・ツー・ライト少なくともからサーバを書くために必要な操作の数スレーブ-MAX-遅れ分。少なくともサーバーからの分-スレーブ・ツー・書き込み、およびサーバーの遅延値が最小奴隷-MAX-ラグ秒未満である場合、マスターは、クライアントによって要求された書き込み操作を実行します。 2)条件はMIN-スレーブ・ライトおよび最小スレーブ-MAXラグ指定された条件が失敗した場合一方、書き込み動作が実行されず、メインサーバ要求への書き込み動作は、クライアントを実行しますこれは、エラーを返します。