使用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.3172.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.confredis6381.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,则说明集群搭建完成。


相关推荐
呆呆小雅26 分钟前
C#关键字volatile
java·redis·c#
miss writer1 小时前
Redis分布式锁释放锁是否必须用lua脚本?
redis·分布式·lua
蜜獾云1 小时前
docker 安装雷池WAF防火墙 守护Web服务器
linux·运维·服务器·网络·网络安全·docker·容器
亽仒凣凣2 小时前
Windows安装Redis图文教程
数据库·windows·redis
年薪丰厚2 小时前
如何在K8S集群中查看和操作Pod内的文件?
docker·云原生·容器·kubernetes·k8s·container
zhangj11252 小时前
K8S Ingress 服务配置步骤说明
云原生·容器·kubernetes
岁月变迁呀2 小时前
kubeadm搭建k8s集群
云原生·容器·kubernetes
墨水\\2 小时前
二进制部署k8s
云原生·容器·kubernetes
Source、2 小时前
k8s-metrics-server
云原生·容器·kubernetes
颜淡慕潇2 小时前
【K8S问题系列 |19 】如何解决 Pod 无法挂载 PVC问题
后端·云原生·容器·kubernetes