docker启动redis实现主从复制

前言
redis的主从复制算是redis的进阶使用了,不再停留于redis的键值对使用。看了两篇博客,又看了看狂神的视频,简单了解了一下主从复制。 其实就是启动多个redis,把多个redis给连接在一起,master主机用来存写,slave用来读取。

我在服务器里面输命令的时候一直出现下面问题,就顺便解决了一下。

Xshell一直出现^c ,不知道怎么一直按Ctrl +C_干净的坏蛋的博客-CSDN博客

一些需要用到的命令:

docker exec -it 容器名 bash// 进入到容器里面
cd /usr/local/bin //进入到这个目录下面
//我们可以看到redis-cli 和redis-server都在这个地方
redis-cli -p 端口号 //登录到redis里面,报错WRONGPASS invalid username-password pair or user is disabled的话,我们输入一下redis的密码即可
info replication //查看此redis的一些信息
​# Replication
role:master //主机
connected_slaves:0 //从机数量
master_failover_state:no-failover
 

进行上面的操作之后,觉得有点不对劲,既然主从复制的每一个redis库都是一个redis服务端,那我docker启动一个redis,只能算是一个redis,所以我应该使用docker启动多个redis。

我去网上找了一篇博客,发现确实如此Docker搭建redis主从复制xiaoweiwei99的博客-CSDN博客docker redis主从复制

我们直接启动两个redis

docker run -d --privileged=true -p 6379:6379 --restart always -v /usr/local/redis/conf/redis.conf:/etc/redis.conf -v /root/usr/local/redis/data:/data  --name redisStudy redis redis-server /etc/redis.conf
​
docker run -d --privileged=true -p 6380:6379 --restart always -v /usr/local/redis/conf/redis6380.conf:/etc/redis6380.conf -v /root/usr/local/redis/data6380:/data  --name redis-slave1 redis redis-server /etc/redis6380.conf

我们上面使用的配置文件,虽然名字不同,但是里面的内容是相同的(先提前说一下这样是不对的,但是为了发现问题,我们需要故意这样做)

再补充一点就是,上面的端口映射,前面是外部访问我们服务器的端口,后面是我们容器内的端口,由于不是同的容器,所以后面都写6379是没有任何问题滴。

我们通过上面的命令启动了多个redis服务端,我们已经可以开始实现主从复制了

通过快捷命令登录到客户端

我们先来登录到主机redisStudy中=

docker exec -it redisStudy redis-cli -p 端口号// 这里的端口号必须和redis.conf配置文件里面的相对应,配置文件里面默认的是6379,如果我们不指定端口进入的话,默认就是6379
#接下来查看一下redis-slave1的信息
info replication //我们可以通过这个命令来看到到我们的机器是从机还是主机,如果没有配置的话,任何一个redis都是master主机 
​​​​​​​
​

在主从复制的时候,我们一般不用动主机,只用动从机就可以了。

我们登录到从机上,在从机上面添加主机

docker exec -it redis-slave1 redis-cli #直接进入启动redis客户端,如果不加-p的话,就默认进入6379端口

我们现在进入到了redis-slave1,我们可以看到我们当前的redis服务端也是主机,我们需要给redis-slave1设置成redisStudy的从机

slaveof 主机地址 主机端口 //注意地址和端口中间有一个空格

那主机的地址是什么呢?主机的端口是什么呢?

现在说说主机的端口,我们在启动主机的时候,做了一个端口映射 -p 6379:6379 前面的6379是阿里云服务器开放的安全组,也就是外部访问我们服务器时候的端口,后面的6379是我们容器里面启动redis的端口,这个端口是在redis.conf配置文件里面设置的,一般配置文件默认的6379,所以我们后面的这个端口也直接6379就可以了。如果redis配置文件里面的的端口号发生了变化,那端口映射也就需要跟着改变。

那主机的地址是什么呢? 有两种写法,一种就是我们服务器的地址,直接写就可以。或者我们可以通过docker inspect 容器名 |grep IPAddress来查看,后者现在还不是很清楚,好像是和docker网络有关系,我们掌握第一种方式即可。

slaveof 服务器地址 6379

我们看到了OK,我们再输入info replication来看看

​​​​​​​ 我们可以看到当前的redis服务端已经变成了一个从机,并且显示出了主机的host和port,但是链接状态确实down

我们去主机看看,确实是没有链接上。

那原因是什么呢?我去网上找了半天,发现说的错误可高级,还要去查看redis的日志。 后面我又找了找错误原因,发现其实是从机连接主机的时候没有设置密码,我们需要去对应的配置文件里面把 replicaof 和masterauth配置一下

然后我我们把这个容器删掉,再重新启动一个redis-slave1容器。注意:我们新启动的这个容器必须是用上面设置过replicaof和masterauth的配置文件。

docker run -d --privileged=true -p 6380:6379 --restart always -v /usr/local/redis/conf/redis6380.conf:/etc/redis6380.conf -v /root/usr/local/redis/data6380:/data  --name redis-slave1 redis redis-server /etc/redis6380.conf

也就是上面的这个命令,这个和启动主机命令所使用的配置文件是不同的。

好了,之后我们往主机里面写入数据的时候,从机就会自动也存储一份数据。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值