使用Docker搭建一主二从的redis集群

文章目录

本文使用 主机 指代 物理机 、 master机 指代"一主二从"中的 一主 , slave机 指代"一主二从"中的 二从

一、根据基础镜像构建三个docker容器

根据本文第一章(到自动启动redis之前,不要设置自动启动,会出错)配置基础镜像的相关设置,构建好后,将其导出为镜像,并根据镜像构建master和slave机

bash 复制代码
docker commit centos7 centos-redis:latest
docker run --name redis-node-1 -d -p 6379:6379 --privileged centos-redis
docker run --name redis-node-2 -d -p 6380:6379 --privileged centos-redis
docker run --name redis-node-3 -d -p 6381:6379 --privileged centos-redis

可以进入容器通过ifconfig查看三台容器的ip

bash 复制代码
docker exec -it redis-node-1 /bin/bash
yum install net-tools
ifconfig

得到结果如下

看到这台容器的ip为172.17.0.2,同理另外两台是172.17.0.3,172.17.0.4。

接下来用ping命令来看看三个容器是否互通,如果能正常发送数据则三台容器搭建完成。


二、构建master机

搭建完成后,进入master机

bash 复制代码
docker exec -it redis-node-1 /bin/bash

在redis-7.0.15的目录/usr/local/src/redis-7.0.15/下复制一份redis.conf文件为redis6379.conf作为master机的配置文件。

bash 复制代码
cd /usr/local/src/redis-7.0.15/
cp redis.conf redis6379.conf

修改以下参数

bash 复制代码
daemonize yes
bind 0.0.0.0
protected-mode no
port 6379
dir /myredis
pidfile /var/run/redis_6379.pid
logfile "/myredis/6379.log"
requirepass 123321
dbfilename dump6379.rdb
appendonly no

注意: 一定要注释掉bind 127.0.0.1 -::1,要不然连接会一直报错MASTER <-> REPLICA sync started # Error condition on socket for SYNC: Connection refused

是否成功主要看划红线的两条信息。


三、配置slave机

配置好后,回到docker外的主机界面,将master机的redis6379.conf文件复制到主机,并接着复制到slave机

bash 复制代码
docker cp redis-node-1:/usr/local/src/redis-7.0.15/redis6379.conf redis.conf
docker cp redis.conf redis-node-2:/usr/local/src/redis-7.0.15/redis6380.conf
docker cp redis.conf redis-node-3:/usr/local/src/redis-7.0.15/redis6381.conf

在slave机的redis6380.conf,redis6381.conf两个文件中分别进行修改

bash 复制代码
# 两台slave都一样
masterauth "123321"
# replicaof <masterip> <masterport>
# 这里的masterip是自己机器上的ip,要用ipconfig查询后填入
replicaof 172.17.0.2 6379
#配置redis-node-2
port 6380
logfile "myredis/6380.log"
#配置redis-node-3
port 6381
logfile "myredis/6381.log"

先master后slave依次启动

在redis-node-1上启动

bash 复制代码
redis-server /usr/local/src/redis-7.0.15/redis6379.conf
redis-cli -a 123321

在redis-node-2上启动

bash 复制代码
redis-server /usr/local/src/redis-7.0.15/redis6380.conf
redis-cli -a 123321 -p 6380

在redis-node-3上启动

bash 复制代码
redis-server /usr/local/src/redis-7.0.15/redis6381.conf
redis-cli -a 123321 -p 6381

四、测试

在主机上输入命令set k1 v1,再在两个从机上输入命令get k1,如果都能得到结果v1,则说明集群搭建完成。


相关推荐
梦想不只是梦与想3 分钟前
docker-compose.yml
docker·docker-compose·docker run
hweiyu003 小时前
Redis命令:HTTL
redis·缓存
樱花落木兰8 小时前
分布式登录实战:Session 会话共享改造,Redis 存储用户登录状态
java·javascript·数据库·redis·分布式·缓存
ShineWinsu9 小时前
对于Redis:Steam、Geospatial、Hyperloglog、Bitmap、Bitfield类型的解析
数据库·c++·redis·分布式·缓存·面试·zset
更深兼春远9 小时前
第2篇:Dify 部署保姆级教程:用 Docker跑起来
docker·容器·dify
海绵宝宝转agent11 小时前
基于Redis ZSet+AOP+注解实现限流注解算法
数据库·redis·算法
imDwAaY11 小时前
Redis 也能做消息队列?从 Stream 的存储讲到消费确认
数据库·redis·缓存
小白的码BUG之路13 小时前
Docker -- No space left on device
运维·docker·容器
imDwAaY13 小时前
Redis 哈希表如何边扩容边服务?讲透渐进式 Rehash
redis·哈希算法·散列表
wzq11_66614 小时前
Kubernetes集群——Service篇(详细讲解!!!)
云原生·容器·kubernetes