云服务器上基于docker搭建redis集群

395 阅读2分钟

环境

腾讯云服务器,Ubuntu 20.04 LTS 64bit

要求

搭建三主三从的redis cluster集群

创建容器

用 docker compose 创建并启动容器。

其中一对容器的启动配置如下:

  redis-1-master:
    image: redis
    container_name: redism1
    command: redis-server /etc/redis/redis.conf
    restart: always
    privileged: true
    volumes:
      - .../redis/redism1/conf/redis.conf:/etc/redis/redis.conf #数据文件挂载
      - .../redis/redism1/data:/data #数据文件挂载
    ports:
      - 6379:6379
      - 16379:16379
      
    redis-1-slave:
    image: redis
    container_name: rediss1
    command: redis-server /etc/redis/redis.conf
    restart: always
    privileged: true
    volumes:
      - .../redis/rediss1/conf/redis.conf (宿主机redis.conf保存的位置):/etc/redis/redis.conf #数据文件挂载
      - .../redis/rediss1/data:/data #数据文件挂载
    ports:
      - 6380:6380
      - 16380:16380
  ....

三主三从的端口分别为:6379 6381 6383 (主) 6380 6382 6384 (从)

docker-compose写好后在该文件夹执行

docker-compose -f xx.yml(docker-compose文件) up -d

其中:

-f: 指定文件

-d: 后台运行

配置文件

daemonize no
dir /data/
dbfilename dump-6379.rdb
rdbcompression yes
rdbchecksum yes
save 10 2
appendonly yes
appendfsync always
appendfilename appendonly-6379.aof
databases 16
port 6384 // 节点端口
protected-mode no // 保护模式设置为no,允许外网访问。最好再设一个密码
client-output-buffer-limit slave 0 0 0
cluster-enabled yes
cluster-config-file nodes.conf // 集群nodes相关信息
cluster-node-timeout 10000
cluster-announce-ip 124.223.xx.xx // 外网IP
cluster-announce-port 6384 // 外网端口
cluster-announce-bus-port 16384 // 集群内部通信端口

\

创建集群

  1. 进入一个容器
docker exec -it redism1 bash
  1. 创建集群
redis-cli --cluster create 124.223.xx.xx:6379 124.223.xx.xx:6381 124.223.xx.xx:6383 124.223.xx.xx:6380 124.223.xx.xx:6382 124.223.xx.xx:6384 --cluster-replicas 1

其中:

--cluster :代表集群模式

124.223.xx.xx: 为云服务器公网IP(如果要远程访问redis的话需要用公网IP)

--cluster-replicas 1: 代表一个主配一个从,值为2则表示 一个主配两个从

遇到的问题

在创建集群时超时

执行这个命令超时:

redis-cli --cluster create 124.223.xx.xx:6379 124.223.xx.xx:6381 124.223.xx.xx:6383 124.223.xx.xx:6380 124.223.xx.xx:6382 124.223.xx.xx:6384 --cluster-replicas 1

无法连接到这个地址。

需要将124.223.xx.xx + 端口 加入到防火墙(安全组)中

Waiting for the cluster to join..

可以连接到主redis,但是节点无法加入

检查创建集群的指令中的IP是否和redis配置文件中 cluster-announce-ip 一样。

修改后配置文件后,关闭所有相关redis容器,删除掉生成的相关文件

重新启动容器,创建集群