1、先用docker下载镜像
2、宿主机上创建redis配置文件和数据挂载目录,如:/data/redis/conf0/redis.conf , /data/redis/data0;配置文件不要设置密码
配置文件内容:

daemonize no
 appendonly yes
 #requirepass xxx
 port 7007
 timeout 0
 loglevel debug
 databases 16
 dir /data
 logfile stdout
 #bind 127.0.0.1
 save 900 1
 rdbcompression yes
 dbfilename dump.rdb
 maxclients 128
 appendfilename appendonly.aof
 appendfsync everysec
 #开启集群
 cluster-enabled yes
 #集群节点不可用的最长时间,而不将其视为失败
 cluster-node-timeout 5000


#如果将其设置为no(默认情况下为默认值),则当Redis集群被标记为失败时,或者当某个节点无法到达时,Redis集群中的节点将停止为所有流量提供服务法定人数的主持人或未达到全部覆盖范围的人。这样可以防止从不知道群集更改的节点读取可能不一致的数据。可以将此选项设置为yes,以允许在失败状态期间从节点进行读取,这对于希望优先考虑读取可用性但仍希望防止写入不一致的应用程序很有用。当仅使用一个或两个分片的Redis Cluster时,也可以使用它,因为它允许节点在主服务器发生故障但无法进行自动故障转移时继续为写入提供服务。

#cluster-allow-reads-when-down yes


#该节点的配置存储位置的文件路径,默认情况下为nodes.conf。该文件不被人触及。它是由Redis Cluster实例在启动时简单生成的,并在需要时进行更新

cluster-config-file nodes.conf


3、启动容器

docker run -d --name redis0 -p 7007 --net host -v /data/redis/conf0/redis.conf:/etc/redis/redis.conf -v /data/redis/data0:/data redis redis-server /etc/redis/redis.conf --appendonly yes
 docker run -d --name redis1 -p 7008 --net host -v /data/redis/conf1/redis.conf:/etc/redis/redis.conf -v /data/redis/data1:/data redis redis-server /etc/redis/redis.conf --appendonly yes
 docker run -d --name redis2 -p 7009 --net host -v /data/redis/conf2/redis.conf:/etc/redis/redis.conf -v /data/redis/data2:/data redis redis-server /etc/redis/redis.conf --appendonly yes
 docker run -d --name redis3 -p 7010 --net host -v /data/redis/conf3/redis.conf:/etc/redis/redis.conf -v /data/redis/data3:/data redis redis-server /etc/redis/redis.conf --appendonly yes
 docker run -d --name redis4 -p 7011 --net host -v /data/redis/conf4/redis.conf:/etc/redis/redis.conf -v /data/redis/data4:/data redis redis-server /etc/redis/redis.conf --appendonly yes
 docker run -d --name redis5 -p 7012 --net host -v /data/redis/conf5/redis.conf:/etc/redis/redis.conf -v /data/redis/data5:/data redis redis-server /etc/redis/redis.conf --appendonly yes4、连接其中一个redis容器
 redis-cli --cluster create ip:7007 ip:7008 ip:7009 ip:7010 ip:7011 ip:7012 --cluster-replicas 1

5、设置密码

redis-cli -h localhost -p 7007 -c
 127.0.0.1:6379> config set requirepass 'password'   // 设置密码
 127.0.0.1:6379> config set masterauth 'password'    // 设置连接密码
 127.0.0.1:6379> config rewrite                        // 把config set 操作写入配置文件中
 设置密码后连接集群
 redis-cli -h 127.0.0.1 -p 6379 -c -a password

5、关闭集群
方式一:进入redis后,使用SHUTDOWN指令或SHUTDOWN SAVE指令或SHUTDOWN NOSAVE指令。
方式二:通过redis的客户端程序redis-cli的shutdown命令
redis-cli -p 7007 shutdown

(保留原有集群的)重启:
不需要再执行上面步骤4的集群生成指令。
第一步:先关闭各个Redis节点。
第二步:再启动各个Redis节点即可。(注意:启动redis服务时请在上次成功启动服务的目录启动,即已经生成rdb/aof,conf的目录,否则该节点加入不了集群)
(删除原有集群的)重启:
需要再执行上面步骤4的集群生成指令。
第一步:先关闭各个Redis节点。
第二步:删除各个Redis安装目录下的节点配置文件nodes.conf、数据文件*.aof/dump.rdb。

#查看集群信息
 cluster info
 #查看节点
 cluster nodes
 CLUSTER ADDSLOTS
 添加新节点不指定主节点(自己为空的主节点):
 redis-cli --cluster add-node 127.0.0.1:7006(新节点) 127.0.0.1:7000(随机节点)
 连接新节点后执行
 cluster replicate 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e(主节点id)
 指定主节点
 redis-cli --cluster add-node 127.0.0.1:7006(新节点) 127.0.0.1:7000(随机节点) --cluster-slave --cluster-master-id 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e(主节点id)
 重新分片脚本
 redis-cli --cluster reshard <host>:<port>(随机节点) --cluster-from <node-id>(源节点) --cluster-to <node-id>(目标节点) --cluster-slots <number of slots>(源节点从最小开始number个) --cluster-yes(自动输入yes)
 删除节点,如果是个主节点并且不为空,则需要先将数据从其重新分片到所有其他主节点
 redis-cli --cluster del-node 127.0.0.1:7000(随机节点) `<node-id>`(要删除的节点)