环境
腾讯云服务器,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 // 集群内部通信端口
\
创建集群
- 进入一个容器
docker exec -it redism1 bash
- 创建集群
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容器,删除掉生成的相关文件
重新启动容器,创建集群