redis的集群部署
问题?
容量不够,redis如何进行扩容?
并发写操作,redis如何分摊?
主从模式,薪火相传模式,主机宕机,导致IP地址发生变化代码中配置的ip需要修改等信息? redis3.0中添加了无中心化集群配置
什么是集群?
1.Redis集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1N。
2.Redis集群通过分区( partition )来提供一定程度的可用性 ( availability ) :即使集群中有一部分节点失效或者无法进行通讯,集群也可以继续处理命令请求。
搭建redis集群
All 16384 slots covered(插槽) 一个Redis集群包含16384 个插槽(
hashslot),数据库中的每个键都属于这16384个插槽的其中一个, 集群使用公式CRC16(key) %
16384来计算键key属于哪个槽,其中CRC16(key)语句用于计算键key的CRC16校验和。
集群中的每个节点负责处理一部分插槽。举个例子 ,如果一个集群可以有主节点 , 其中: 节点A负责处理0号至5460号插槽。
节点B负责处理5461 号至10922号插槽。 节点C负责处理10923号至16383号插槽。
- 配置redis 配置文件,内容与一主多从类似
include /lihaiqiao/redis/myredis/redis.conf
pidfile “/var/run/redis_6379.pid”
port 6379
dbfilename “dump6379.rdb”
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
2.启动6个redis(真实机器上配置在各个机器上,现在是在一台机器上模拟,配置了6个配置文件端口不一样) redis-service redis6379.conf …
3.将6个机器整合成集群(ip为机器真实IP地址)
redis-cli --cluster create --cluster-replicas 1 121.39.89.168:6379 121.39.89.168:6380 121.39.89.168:6381 121.39.89.168:6389 121.39.89.168:6390 121.39.89.168:6391
执行成功后会显示如下图,可以用命令: cluster nodes 查看节点信息
4.然后连接redis 集群操作 redis-cli -c -p <端口号>
redis cluster 如何分配这六个节点的?
一个集群至少要有三个主节点 选项–cluster-replicas
1表示我们希望为集群中的每个主节点创建一个从节点。分配原则尽量保证每个主数据库运行在不同的IP地址,每个从库和主库不在一个IP地址上。
如果所有某- -段插槽的主从节点都宕掉, redis 服务是否还能继续?
如果某一段插槽的主从都挂掉,而cluster-require-full-coverage为yes , 那么, 整个集群都挂掉。
如果某一段插槽的主从都挂掉 ,而cluster-require-ull-coverage为no ,那么,该插槽数据全都不能使用,也无法存储。
redis.conf中的参数cluster-require-full-coverage
Jedis 操作集群
redis集群提供了哪些好处
实现扩容
分摊压力
无中心化配置相对简单
redis集群提供了哪些不足
多建操作不被支持
多建的redis事务是不被支持,lua脚本不被支持
由于集群方案出现较晚,很多公司已经采用其他的集群方案,而代理或者客户端分片的方案想要迁移至redis cluster,需要整体迁移而不是逐步过渡,复杂度比较大