docker配置redis6.2.6集群

1,696 阅读3分钟

docker配置redis6.2.6集群方案

docker 安装教程

docker的学习 - 掘金 (juejin.cn)

redis集群安装过程

  1. 创建 docker 网络

  2. 编写 redis 集群配置文件

  3. 启动 redis 集群

创建 docker 网络

docker network create redis --subnet 172.38.0.0/16

编写 redis 集群配置文件

  1. 文件配置

大致思路:

image.png

根据思路编写脚本:

for port in $(seq 6379 6384);
do
my_ip=`expr $port - 6377`
mkdir -p /root/redis_config/redis-cluster/node-${port}/conf
mkdir -p /root/redis_config/redis-cluster/node-${port}/data
touch /root/redis_config/redis-cluster/node-${port}/conf/redis.conf
cat << EOF>/root/redis_config/redis-cluster/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.${my_ip}
cluster-announce-port 6379
cluster-announce-bus-port 16379
EOF
done

for ((port = 6379; port < 6379 + 6; port++)); do
  my_ip=`expr $port - 6377`
  docker run -p ${port}:6379 \
    -p 1${port}:16379 \
    -v /root/redis_config/redis-cluster/node-${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
    -v /root/redis_config/redis-cluster/node-${port}/data:/data \
    --restart always \
    --privileged=true \
    --net=redis \
    --ip=172.38.0."${my_ip}" \
    --name redis${port} -d my_redis:6.2.6 redis-server /usr/local/etc/redis/redis.conf
done

创建 redis 集群

redis-cli --cluster create 172.38.0.2:6379 172.38.0.3:6379 172.38.0.4:6379 172.38.0.5:6379 172.38.0.6:6379 172.38.0.7:6379 --cluster-replicas 1

测试是否能够连接

  1. 连接的 6379 节点

redis-cli -c -h redis6379 -p 6379

redis6379:6379> cluster nodes
d7c03e9b9b8dd787ccffaabcba85915281c0db57 172.38.0.7:6379@16379 slave 3f90db0d932b2bfbf843bf0290b14228b2c946a1 0 1646317621000 2 connected
3f90db0d932b2bfbf843bf0290b14228b2c946a1 172.38.0.3:6379@16379 master - 0 1646317621485 2 connected 5461-10922
6ba628d2354657c31e15caac5f62bdacfb426225 172.38.0.5:6379@16379 slave 0dd642d142727068e2c3ac5f5fa18b6b18f30260 0 1646317620475 3 connected
0dd642d142727068e2c3ac5f5fa18b6b18f30260 172.38.0.4:6379@16379 master - 0 1646317622494 3 connected 10923-16383
f0e27fefc1e6d9c2726941d79a30e508aa595a9c 172.38.0.6:6379@16379 slave cd1f20f58b3f864ca1a7ed5afa2c502dc0c7ee1a 0 1646317622091 1 connected
cd1f20f58b3f864ca1a7ed5afa2c502dc0c7ee1a 172.38.0.2:6379@16379 myself,master - 0 1646317620000 1 connected 0-5460
  1. 连接 6380 节点 并设置值

redis-cli -c -h redis6380 -p 6379

设置 set a abc

  1. 切换到6379节点, 读取值
172.38.0.4:6379> get a
"abc"

探索 集群 cluster-announce-ip

cluster-announce-ip填入主机ip试试能不能用

设置主机IP方式大致思路:

image.png

#!/bin/bash
for port in $(seq 6379 6384);
do
mkdir -p /root/redis_config/redis-cluster/node-${port}/conf
mkdir -p /root/redis_config/redis-cluster/node-${port}/data
touch /root/redis_config/redis-cluster/node-${port}/conf/redis.conf
cat << EOF>/root/redis_config/redis-cluster/node-${port}/conf/redis.conf
port ${port}
bind 0.0.0.0
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.0.155
cluster-announce-port ${port}
cluster-announce-bus-port 1${port}
EOF
done

for ((port = 6379; port < 6379 + 6; port++)); do
  my_ip=`expr $port - 6377`
  docker run -p ${port}:${port} \
    -p 1${port}:1${port} \
    -P \
    -v /root/redis_config/redis-cluster/node-${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
    -v /root/redis_config/redis-cluster/node-${port}/data:/data \
    --restart always \
    --privileged=true \
    --net=redis \
    --ip=172.38.0."${my_ip}" \
    --name redis${port} -d my_redis:6.2.6 redis-server /usr/local/etc/redis/redis.conf
done

而创建集群的方式需要修改成:

redis-cli --cluster create 172.38.0.2:6379 172.38.0.3:6380 172.38.0.4:6381 172.38.0.5:6382 172.38.0.6:6383 172.38.0.7:6384 --cluster-replicas 1

上面这两种思路的方式, 主要是
① 多个IP(虚拟机) 一对一到 多个端口(主机)
② 多个端口(虚拟机) 一对一到 多个端口(主机)