Redis集群

Docker下Redis的集群方案

作者: yym439 时间: 2019-11-04

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

redis配置

存放路径:/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

 安装Ruby

创建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参数