redis集群
RedisCluster方案
- 没有中心节点(PXC也没有中心节点),客户端与redis节点直连,不需要中间代理
- 数据可以被分片存储(各个Master节点存储的数据不一样,所以需要建立从节点备份,跟pxc强一致性不同)
- 管理方便,可以自行增删节点
- 集群中应该有奇数个Master节点,至少应该有3个
- redis不需要实现负载均衡(由后端程序Spring实现)
安装RedisCluster镜像
docker pull yyyyttttwwww/redis
创建net2网络
docker network ls
docker network create –subnet=172.19.0.0/16 net2
运行容器
docker run -it -d –name r1 -p 5001:6379 –net=net2 –ip 172.19.0.2 docker.io/yyyyttttwwww/redis bash
修改配置
docker exec -it r1 bash

存放路径:/usr/redis/redis.conf
启动redis
启动redis(进入usr/redis/src)执行: ./redis-server ../redis.conf
创建并启动r2、r3、r4、r5、r6节点
docker run -it -d --name r2 -p 5002:6379 --net=net2 --ip 172.19.0.3 docker.io/yyyyttttwwww/redis bash
docker run -it -d --name r3 -p 5003:6379 --net=net2 --ip 172.19.0.4 docker.io/yyyyttttwwww/redis bash
docker run -it -d --name r4 -p 5004:6379 --net=net2 --ip 172.19.0.5 docker.io/yyyyttttwwww/redis bash
docker run -it -d --name r5 -p 5005:6379 --net=net2 --ip 172.19.0.6 docker.io/yyyyttttwwww/redis bash
docker run -it -d --name r6 -p 5006:6379 --net=net2 --ip 172.19.0.7 docker.io/yyyyttttwwww/redis bash
安装 redis-trib.rb

创建redis集群
docker exec -it r1 bash
cd /usr/redis/
mkdir cluster
cp src/redis-trib.rb cluster/
cd cluster/
./redis-trib.rb create --replicas 1 172.19.0.2:6379 172.19.0.3:6379 172.19.0.4:6379 172.19.0.5:6379 172.19.0.6:6379 172.19.0.7:6379
redis客户端访问
docker exec -it r1 bash
#连接
/usr/redis/src/redis-cli -c
#写入数据
set a 10
get a
#查看集群节点连接情况
cluster nodes
redis集群部署脚本
#删除存在的redis集群节点
docker stop r1 r2 r3 r4 r5 r6
docker rm r1 r2 r3 r4 r5 r6
#创建net2网络
docker network rm net2
docker network create --subnet=172.19.0.0/16 net2
#启动redis容器
docker run -it -d --name r1 -p 5001:6379 --net=net2 --ip 172.19.0.2 docker.io/yyyyttttwwww/redis bash
docker run -it -d --name r2 -p 5002:6379 --net=net2 --ip 172.19.0.3 docker.io/yyyyttttwwww/redis bash
docker run -it -d --name r3 -p 5003:6379 --net=net2 --ip 172.19.0.4 docker.io/yyyyttttwwww/redis bash
docker run -it -d --name r4 -p 5004:6379 --net=net2 --ip 172.19.0.5 docker.io/yyyyttttwwww/redis bash
docker run -it -d --name r5 -p 5005:6379 --net=net2 --ip 172.19.0.6 docker.io/yyyyttttwwww/redis bash
docker run -it -d --name r6 -p 5006:6379 --net=net2 --ip 172.19.0.7 docker.io/yyyyttttwwww/redis bash
echo "创建容器成功,正在启动redis服务,请稍等..."
#启动redis
docker exec -it r1 bash -c "cd /usr/redis/src && ./redis-server ../redis.conf && sleep 1 && exit"
docker exec -it r2 bash -c "cd /usr/redis/src && ./redis-server ../redis.conf && sleep 1 && exit"
docker exec -it r3 bash -c "cd /usr/redis/src && ./redis-server ../redis.conf && sleep 1 && exit"
docker exec -it r4 bash -c "cd /usr/redis/src && ./redis-server ../redis.conf && sleep 1 && exit"
docker exec -it r5 bash -c "cd /usr/redis/src && ./redis-server ../redis.conf && sleep 1 && exit"
docker exec -it r6 bash -c "cd /usr/redis/src && ./redis-server ../redis.conf && sleep 1 && exit"
echo "启动容器的redis服务成功~~~"
#创建集群
docker exec -it r1 bash -c "cd /usr/redis/ && mkdir cluster && cp src/redis-trib.rb cluster/ && cd cluster/ && ./redis-trib.rb create --replicas 1 172.19.0.2:6379 172.19.0.3:6379 172.19.0.4:6379 172.19.0.5:6379 172.19.0.6:6379 172.19.0.7:6379"
echo "redis集群创建成功"
注:shell和docker无缝交互使用 docker exec -c参数