redis 集群/分片 Cluster
- 集群模式可以分布式存储数据,比如一共 n 条数据,3 个节点,每个节点只存储 n/3 条数据(主从模式是每台服务器都存储了完整的数据)
- 主从模式(哨兵也算主从)下,因为只有一个主机,所以当写操作过多时主机压力也会比较大
环境搭建
跟前面主从哨兵一样,还是在一台 linux 上部署多个 redis
-
创建一个文件夹,比如 /myredis,把 redis.conf 复制到这个文件夹中,redis.conf 作为公共配置文件
-
在文件夹中,创建6个配置文件(三主三从)
- redis6379.conf(主1)、redis6380.conf(主2)、redis6381.conf(主3)
- redis6389.conf(从1)、redis6390.conf(从2)、redis6391.conf(从3)
-
6 个配置文件下入如下内容
# 6 个配置文件中这句相同,表示都用这个公共配置文件 include /myredis/redis.conf # 6 个配置文件中这句各不相同,指定 pid pidfile /var/run/redis_6379.pid # 6 个配置文件中这句各不相同,指定端口 port 6379 # 6 个配置文件中这句各不相同,指定持久化文件 dbfilename dump6379.rdb # 6 个配置文件中这句相同,开启集群模式 cluster-enabled yes # 6 个配置文件中这句各不相同,设置节点配置文件名 cluster-config-file nodes-6379.conf # 6 个配置文件中这句相同,超过 15 秒连不上切换主从 cluster-node-timeout 15000
-
用这 6 个配置文件启动 6 个 redis 服务
-
创建集群环境,现在这 6 个redis 服务都是单独的,没有联系
-
如果是低版本需要安装 ruby 环境
-
如果是高版本,已经集成 ruby 了,直接进入 redis 解压目录下的 src 目录执行命令
# 这个 redis-cli 不是 bin 目录下的 # --cluster create 创建集群环境 # --cluster-replicas 1 1 表示一个副本(执行命令的时候,前面三个作为主,后面三个作为对应的从机) # 后面的 ip 地址不能是 127.0.0.1 ./redis-cli --cluster create --cluster-replicas 1 192.168.56.161:6379 192.168.56.161:6380 192.168.56.161:6381 192.168.56.161:6389 192.168.56.161:6390 192.168.56.161:6381
-
执行命令之后会询问是否接受分配方式,输入 yes 然后回车
- 这个命令执行完之后能看到总共的槽有多少个,slots
- 也能看到每个节点的槽的范围(set key value 时 redis 会计算 key 应该落在哪个槽,也就能知道这个 key 在哪个节点)
-
常用命令
集群和非集群命令不是全部通用,集群下连接 redis 和设置值,统计等都是不一样的
-
连接集群环境
- 在 bin 下执行
./redis-cli -p 6379 配置文件
是普通连接方式(主从/哨兵的连接方式,不是集群的连接方式) - 在 bin 下执行
./redis-cli -c -p 6379
才是集群的连接方式,不需要指定配置文件,需要加-c
- 在 bin 下执行
-
cluster nodes
可以查看集群配置信息 -
cluster keyslot k1
查看 k1 应该落在哪个槽(就能知道 k1 在哪个节点) -
执行 set 命令,会先计算该 key 会落在那个槽中,可能当前登录的是 6379,但是计算之后这个 key 应该放在 6380 上