master-slave(replication)
从节点上只能读数据,不能写入数据,只能在主节点写入数据。主节点的数据会自动同步到从节点。
复制原理:
解决的问题:
存在的问题:
主从会有延迟。
主挂了,主从不会自动切换,需要手动重启主节点。
sentinel是特殊的redis-server节点,一般会建造多个sentinel节点互相监控,sentinel之间地位平等,没有主从之分。
sentinel会监控真正redis-server节点:
解决的问题:
存在的问题:
redis客户端会从sentinel拿到主节点的地址,再去根据地址进行真正地连接及操作。
1、先到先得
2、少数服从多数
选举的超时时间是一个随机数,最先超时的会变成一个candidate,然后发起投票,并且给自己投一票,假如超过半数投票自己(平票则需要再投一次),自己成为了leader以后,会定期给从节点发送心跳包,重置从节点的选举超时时间。
为了解决水平扩容的问题,我们可以在客户端做分片,也可以用代理分片服务,另外Redis本身提供Cluter模式,进行水平扩容
实现了分片到不同redis服务的功能,代码的拓展性有限,不能实现平滑扩容
Twenproxy,Codis:需要考虑proxy单点问题;不能实现平滑扩容
架构:多主多从
数据分布:CRC16算法对16384取模,按哈希槽分配(一共有16384个槽),将一些槽分配到对应的节点上。
HashTag:在key中加{xxx},会用xxx取模分配槽,假如xxx一样则会分配在同一个节点上。
主节点挂了:
客户端连接到任意一个节点都可以实现一样的效果,去中心化。
原文:https://www.cnblogs.com/fcb-it/p/13334311.html