这次彻底读透 Redis !( 八 )

 
以 3 个哨兵为例,假设此时的 quorum 设置为 2,那么,任何一个想成为 Leader 的哨兵只要拿到 2 张赞成票,就可以了 。
新库选择
上面已经选举出了哨兵代表,此时代表需要完成新主库的选择,新库的选择需要满足以下几个标准
 

  • 新库需要处于健康状态,也就是和哨兵之间保持正常的网络连接
  • 选择salve-priority从节点优先级最高(redis.conf)的
  • 选择复制偏移量最大,只复制最完整的从节点
 
故障转移
上面一小节哨兵已经选举出了新的主库,故障转移要实现新老主库之间的切换
故障转移流程如下:
这次彻底读透 Redis !

文章插图
 
哨兵模式优缺点
优点
 
  • 实现了集群的监控,故障转移,实现了高可用
  • 拥有主从复制模式的所有优点
 
缺点
 
  • 集群存储容量有限,容量上线就是主库的内存的大小,无法存储更多内容
Cluser 集群 
Redis 的哨兵模式实现了高可用了,但是每台 Redis 服务器上存储的都是相同的数据,浪费内存,而且很难实现容量上的扩展 。所以在 redis3.0上加入了 Cluster 集群模式,实现了 Redis 的分布式存储,也就是说每台 Redis 节点上存储不同的内容 。
Redis 集群的数据分片
Redis 集群没有使用一致性hash, 而是引入了哈希槽的概念.
Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽,举个例子,比如当前集群有3个节点,那么:
 
  • 节点 A 包含 0 到 5500号哈希槽.
  • 节点 B 包含5501 到 11000 号哈希槽.
  • 节点 C 包含11001 到 16384号哈希槽.
 
这种结构很容易添加或者删除节点. 比如如果我想新添加个节点D, 我需要从节点 A, B, C中得部分槽到D上. 如果我想移除节点A,需要将A中的槽移到B和C节点上,然后将没有任何槽的A节点从集群中移除即可. 由于从一个节点将哈希槽移动到另一个节点并不会停止服务,所以无论添加删除或者改变某个节点的哈希槽的数量都不会造成集群不可用的状态.
Redis 集群实战
环境:
 
  • Vmware 虚拟机
  • centos 7
  • Redis 6.0.6
 
因为我是在本机上演示的,所以用的虚拟机
主从复制
集群信息如下:
节点配置文件端口masterredis6379.conf6379slave1redis6380.conf6380slave1redis6381.conf6380
第一步:准备三个 redis.conf 配置文件,配置文件信息如下
# redis6379.conf master # 包含命令,有点复用的意思 include /soft/redis6.0.6/bin/redis.conf pidfile redis_6379.pid port 6379 dbfilename dump6379.rdb logfile "redis-6379.log" # redis6380.conf slave1 include /soft/redis6.0.6/bin/redis.conf pidfile redis_6380.pid port 6380 dbfilename dump6380.rdb logfile "redis-6380.log" # 最后一行设置了主节点的 ip 端口 replicaof 127.0.0.1 6379 # redis6381.conf slave2 include /soft/redis6.0.6/bin/redis.conf pidfile redis_6381.pid port 6381 dbfilename dump6381.rdb logfile "redis-6381.log" # 最后一行设置了主节点的 ip 端口 replicaof 127.0.0.1 6379 ## 注意 redis.conf 要调整一项,设置后台运行,对咱们操作比较友好 daemonize yes
第二步:启动服务器
-- 首先启动 6379 这台服务器,因为他是主库(启动命令在 redis 安装目录的 bin 目录下) ../bin/redis-server redis6379.conf -- 接口启动 6380 和 6381 ../bin/redis-server redis6380.conf ../bin/redis-server redis6381.conf
第三步:用客户端连接服务器
cd bin redis-cli -p 6379 redis-cli -p 6380 redis-cli -p 6381 这里我开了三个窗口分别连接三台 redis 服务器,方便查看
在 6379 客户端输入命令: info replication 可用查看集群信息
这次彻底读透 Redis !

文章插图
 
第四步:数据同步
现在集群已经搭建好了,我们在 6379 服务器写入几条数据,看下可不可以同步到 6380 和 6381
6379:
这次彻底读透 Redis !


推荐阅读