文章目录


一、创建redis_cluster网桥

docker network create redis_cluster --subnet=172.38.1.0/24 -o com.docker.network.bridge.name=redis_cluster
ifconfig redis_cluster

docker部署redis集群_docker部署redis集群

二、启动六个容器

两个容器为一组,一个master,一个slave,master挂掉,slave会成为master

for port in $(seq 1 6); \
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat << EOF >/mydata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes #启动集群模式
cluster-config-file nodes.conf #集群节点信息文件
cluster-node-timeout 5000 #redis节点宕机被发现的时间
cluster-announce-ip 172.38.1.1${port} #集群节点的汇报ip,防止nat,此处为docker容器IP
cluster-announce-port 6379 #集群节点的汇报port,防止nat
cluster-announce-bus-port 16379 #集群节点的汇报bus-port,防止nat
appendonly yes #开启aof持久化
EOF
# 通过脚本一次启动6个redis容器
docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port} \
-v /mydata/redis/node-${port}/data:/data \
-v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis_cluster --ip 172.38.1.1${port} redis:6.0 redis-server /etc/redis/redis.conf
done

三、创建集群

docker exec -it redis-1 bash
redis-cli --cluster create 172.38.1.11:6379 172.38.1.12:6379 172.38.1.13:6379 172.38.1.14:6379 172.38.1.15:6379 172.38.1.16:6379 --cluster-replicas 1
redis-cli -c #进入集群
cluster info #查看集群信息

docker部署redis集群_redis集群_02

cluster nodes

docker部署redis集群_docker_03

四、卸载集群

for port in $(seq 1 6); do docker rm -f redis-${port}; done
rm -rf /mydata/redis

redis集群与单体的区别

1、key批量操作支持有限:例如mget、mset必须在一个slot;
2、Key事务和Lua支持有限:操作的key必须在一个节点;
3、key是数据分区的最小粒度:不支持bigkey分区;
4、不支持多个数据库:集群模式下只有一个db0;
5、复制只支持一层:不支持树形复制结构。

五、参考文章

​Docker部署Redis集群​​​​为什么Redis默认是16个数据库?​