1、创建一个 myredis 文件夹:
mkdir /myredis
2、复制一个原生的redis.conf 配置文件到myredis文件夹
cp /etc/redis.conf /myredis/redis.conf
3、在 myredis 文件夹中创建 9 个 redis 配置文件 :
由 redis + port.conf 表示不同 port 的配置文件
redis6379.conf
redis6380.conf
redis6381.conf
redis6382.conf
redis6383.conf
redis6384.conf
redis6385.conf
redis6386.conf
redis6387.conf
4、编辑配置文件
redis6379.conf :
include /myredis/redis.conf --引用其它配置文件
port 6379 --端口
pidfile "/var/run/redis_6379.pid" --pid文件
dbfilename "dump6379.rdb" --日志文件名
cluster-enabled yes --打开集群模式
cluster-config-file nodes-6379.conf --设置节点配置文件名
cluster-node-timeout 15000 --设置节点失联时间(ms),超过该时间,集群自动切换主从节点
其它端口的配置文件与 redis6379.conf 类似,只需将其中的6379替换成相应端口即可
替换命令:
%s/6379/6380 --将6379替换为6380,其它配置文件类似
1、启动所有redis服务
redis-server /myredis/redis6379.conf
redis-server /myredis/redis6380.conf
redis-server /myredis/redis6381.conf
redis-server /myredis/redis6382.conf
redis-server /myredis/redis6383.conf
redis-server /myredis/redis6384.conf
redis-server /myredis/redis6385.conf
redis-server /myredis/redis6386.conf
redis-server /myredis/redis6387.conf
查看myredis中的文件,检查是否生成了所有的节点配置文件;如果没有相应的节点配置文件,则重启该节点的redis服务
2.1、进入redis的src文件夹
该文件夹是解压缩redis安装包时所得到的 redis-x.x.x 下的src文件夹
cd /opt/redis-6.2.6/src
2.2、执行合并命令
在src目录下查看是否有 redis-trib.rb 文件,如果没有需要自行安装(高版的redis自带 rb 环境,这里使用的是redis6)
redis-cli --cluster create --cluster-replicas 2 ip:port [ip:port…]
其中 2 表示一个节点中包含 1 个服务器以及 2 个从服务器;所以9个服务器则有3个节点,每个节点包含 1 个服务器以及 2 个从服务器
redis-cli --cluster create --cluster-replicas 2 192.168.117.130:6379 192.168.117.130:6380 192.168.117.130:6381 192.168.117.130:6382 192.168.117.130:6383 192.168.117.130:6384 192.168.117.130:6385 192.168.117.130:6386 192.168.117.130:6387
2.3、当出现询问时输入yes
Can I set the above configuration? (type 'yes' to accept): yes
1、连接任意一个端口即可进入集群
redis-cli -c -p 6379
2、查看集群节点信息
cluster nodes
一个redis集群中包含 16384 个插槽(hash slot),数据库中的每个 key 都属于16384 中的一个。
节点A负责处理0 - 5460号插槽,节点B负责处理5461 - 10922号插槽,节点C负责处理10923~16383号插槽
当我们往redis集群中存数据时,集群通过公式 CRC16(key) % 16384来计算key应该属于那个插槽.然后将该key存入到对应插槽的节点中
通过 cluster nodes 命令可以查看每个节点所对应的插槽
从上图可以看出 6379、6380、6381 作为主节点
(6383+6385)、(6386+6387)、(6382+6384)分别为 6379、6380、6381的从节点
6379 负责处理0 - 5460号插槽
6380负责处理5461 - 10922号插槽
6381负责处理10923~16383号插槽
集群操作
1、在集群中同时插入一个值
如下图所示,执行 set test mytest 时,对 test 进行计算,它所对应的插槽为 6918 ,而 6918 由 80 节点负责,所以集群将此操作交给 80 节点执行,并将该key存入 80 节点
2、在集群中同时插入多个值
redis集群无法通过常规的命令进行赋值
可以通过分组的方式添加多个值,即需要加上 " {} "
赋值:mset key{group} value [key{group} value …]
取值:mget key{group} [key{group}]
3、计算 key 的插槽值
cluster keyslot key