主从解决高并发 哨兵解决高可用
那么我们现在还有一个问题没有解决
那么就是 读写问题以及大量数据的存储问题
因为如果压力都在一个master上的话 其实很明显是不理想的
所以我们引入了分片集群
分片集群特征:
集群中有多个master,每个master保存不同数据
每个master都可以有多个slave节点
master之间通过ping监测彼此健康状态
客户端请求可以访问集群任意节点,最终都会被转发到正确节点
那么如何存储大量的数据呢 动态扩容来解决
动态扩容的话就引入了我们的散列插槽
注意在这里的话 并不是说 集群里面有几个master 就有几个16384插槽
这个具体有几个是在服务前开启的时候 那个时候有几个master 就会有对应的几个散列插槽
如果在后续在加入master 那么这个时候不会再多就加插槽了 这个时候如果需要使用插槽 就需要从别的master上面分插槽过来的
插槽的话 很多个位置 我们计算后存储的位置 会对应具体插槽的坐标 但是一个坐标下的插槽可以存储很多数据的 如果溢出了服务器会报错
故障转移
自动转移
首先 如果我们的master如果关闭服务的话
那么我们在集群中 各个master是会互相通信的
如果别的master没有感知到这个master的话他也会一开始类似哨兵一样的 疑似下线 后面才是确定下线
确定下线了才会去提升别的slave节点去成为master
手动转移的话failover命令可以指定三种模式:
缺省:默认的流程
force:省略了对offset的一致性校验
takeover:忽略数据一致性、忽略master状态和其它master的意见
手动转移之后 会有新的master的出现 重新开启的时候master变成salve