redis集群与哨兵模式

1、
redis本身只支持纵向扩容,也就是备份,不支持多机器海量数据。即只能有一个主机,主机可以有多个slave(备份丛机),主机不需要特殊配置,只需要配置slave的master,让丛机找主机即可。slave of ip port,临时配置。

2、
读写分离
主机可以读写操作,但是一般只用来写,丛机只能用来读操作,通过读写分离提高其性能。每次主机redis更新,都会向所有丛机发送。

3、主机宕机
如果主机宕机,在重新启动,丛机仍然是主机的slave。
主机宕机,丛机仍然是丛机,不能写操作。

4、哨兵模式
若主机宕机,整个redis集群不能写操作,服务中断。
我们可以另外启动一个机器,专门用来监听主机,若主机宕机,则哨兵会从丛机中选一个作为主机。
若果原来的主机重新启动,也只是单独集群之外的一个主机。

5、若要横向扩容,需要使用redis cluster
redis cluster是分布式数据库的其中一种。
首先根据key和节点数目N,计算出要存在哪个子集(hash原理)。
每个子集都是一个redis集群(一主多从)。
如果节点数目变化,会导致数据迁移,即所有数据都要重新计算要保存到哪个子集。

Redis Cluster 中,Sharding 采用 slot (槽) 的概念,一共分成 16384 个槽。
假设现在我们是三个主节点分别是:A, B, C 三个节点,节点 A 覆盖 0-5000;节点 B 覆盖 5001-10000;节点 C 覆盖 10001-16383
这有点儿类似 pre sharding 思路。对于每个进入 Redis 的键值对,根据 key 进行散列,分配到这 16384 个 slot 中的某一个中。使用的 hash 算法也比较简单,就是 CRC16 后 16384 取模 [crc16(key)%16384]。
假设 k 这个 key 应该存储在 node3 上,而此时用户在 node1 或者 node2 上调用 set k v 指令,这个时候 redis cluster 怎么处理呢?
127.0.0.1:7000> set name 16300
(error) MOVED 5798 192.168.183.130:7001
1
2
服务端返回 MOVED,也就是根据 key 计算出来的 slot 不归当前节点管理,服务端返回 MOVED 告诉客户端去 另一台机器ip端口操作。
这个时候更换端口,用 redis-cli –p 7001操作,才会返回 OK。或者用./redis-cli -c -p port 的命令。但是导致的问题是,客户端需要连接两次才能完成操作。所以大部分的 redis 客户端都会在本地维护一份 slot 和 node 的对应关系,在执行指令之前先计算当前 key 应该存储的目标节点,然后再连接到目标节点进行数据操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值