docker搭建redis集群

1通过docker获取redis镜像

通过命令docker search redis获取安装最新的redis镜像

docker搭建redis集群

也可以直接通过命令安装

$   docker pull docker.io/redis:5.0.0,通过docker images 查看是否安装成功

docker搭建redis集群

$  docker network create redis-net

docker搭建redis集群

 创建redis-net虚拟网卡,目的是让docker容器能与宿主桥接网络,并间接与外界连接。

查看redis-net虚拟网卡网关ip

$  docker network inspect  redis-net  | grep "Gateway" |  grep --color=auto -P '(\d{1,3}.){3}\d{1,3}' -o

docker搭建redis集群

 在home目录下新建文件夹mkdir /home/docker/redisContainer/redis-cluster

在建好的文件夹中新建文件名为redis-cluster.tmpl文件

$  touch redis-cluster.tmpl

配置文件的内容为:

port ${PORT}
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.21.0.14
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes

创建完文件后执行:

for port in `seq 7000 7005`; do \
mkdir -p ./${port}/conf \
&& PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \
&& mkdir -p ./${port}/data; \
done

上述命令会在redis-cluster.tmpl同级目录中创建7000 7001 7002 7003 7004 7005的文件夹,在每个文件夹下创建conf、data文件夹和在conf文件夹下的redis.conf配置文件

docker搭建redis集群

再根据下载好的redis镜像来创建容器

for port in `seq 7000 7005`; do \
  docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} \
  -v/home/docker/redisContainer/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
  -v /home/docker/redisContainer/redis-cluster/${port}/data:/data \
  --restart always --name redis-${port} --net redis-net \
  --sysctl net.core.somaxconn=1024 redis:5.0.0 redis-server /usr/local/etc/redis/redis.conf; \
done

注意:-v/home/docker/redisContainer/redis-cluster/${port}/conf/redis.conf 和 -v /home/docker/redisContainer/redis-cluster/${port}/data为你创建的7000中的redis.conf和data的完整路径,否则无法完成各个容器redis中的配置文件映射

容器创建好之后通过命令docker ps来查看

docker搭建redis集群通过命令来进入任意容器:

$  docker exec -it redis-7000 /bin/bash\

通过下面的命令,进行集群连接。

$   /usr/local/bin/redis-cli --cluster create 172.18.0.2:7000 172.18.0.3:7001 172.18.0.4:7002 172.18.0.5:7003 172.18.0.6:7004 172.18.0.7:7005 --cluster-replicas 1

docker搭建redis集群

输入命令$  redis-cli -p 7000 -c

$  set name chend

$  get name