redis5.0.5主从复制(哨兵机制)详解及解决redis主机设置了密码的无法实现主从复制的情况

一、简介

一个Redis服务可以有多个该服务的复制品,这个Redis服务称为Master,其它复制称为Slaves。
在这里插入图片描述

如图中所示,我们将一台Redis服务器作主库(Matser),其他三台作为从库(Slave),主库只负责写数据,每次有数据更新都将更新的数据同步到它所有的从库,而从库只负责读数据。这样一来,就有了两个好处:
(1) 读写分离,不仅可以提高服务器的负载能力,并且可以根据读请求的规模自由增加或者减少从库的数量。
(2)数据被复制成了了好几份,就算有一台机器出现故障,也可以使用其他机器的数据快速恢复。
需要注意的是:在Redis主从模式中,一台主库可以拥有多个从库,但是一个从库只能隶属于一个主库。

二、 Redis主从复制配置

在Redis中,要实现主从复制架构非常简单,只需要在从数据库的配置文件中加上如下命令即可(笔者是在同一台机器上实现主从复制的):
1.把redis的原始配置文件复制两份,原始的配置文件作为Master的配置文件,另外两个作为Slave的配置文件
在这里插入图片描述

2、Master的配置文件与默认文件相比我只修改了3个地方。

#系统默认是no, Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启动守护线程。
daemonize yes
#绑定的主机地址,默认只能本机访问,我把这个注释掉了
#bind 127.0.0.1
#非保护模式,这是 是redis3.2 之后加入的新特性,如果不设置为no,则无法进行主从复制
protected-mode no

3.两个Slave的配置文件需要修改以下几个地方
Slave1

daemonize yes
#bind 127.0.0.1
#这条配置原始的redis配置文件中没有,需要添加。slaveof  master地址 master端口号
slaveof 192.168.25.140 6379
#Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定
pidfile /var/run/redis_6380.pid
port 6380
#日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null
logfile "6380.log"
#指定本地数据库文件名,默认值为dump.rdb
dbfilename dump6380.rdb

Slave2

daemonize yes
#bind 127.0.0.1
slaveof 192.168.25.140 6379
pidfile /var/run/redis_6381.pid
port 6381
logfile "6381.log"
dbfilename dump6381.rdb

4.启动服务器
在这里插入图片描述
5.启动服务器
Master
在这里插入图片描述
Slave1
在这里插入图片描述
Slave2
在这里插入图片描述
我们可以用info replication这个命令看看个个节点的状态
Master
在这里插入图片描述
Slave1
在这里插入图片描述
Slave2
在这里插入图片描述
以上就表示主从复制成功

当然你也可以使用slaveof no one这个命令变成Master
在这里插入图片描述
使用slaveof 192.168.25.140 6379变成Slave
在这里插入图片描述

三、解决redis主机设置了密码的无法实现主从复制的情况

如果你的Master设置了密码,则Slave配置文件中的masterauth 后面必须写你Master的密码,不然主从复制不成功。
Master

daemonize yes
#bind 127.0.0.1
protected-mode no
#设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH <password>命令提供密码,默认关闭
requirepass 123456

Slave1

daemonize yes
#bind 127.0.0.1
slaveof 192.168.25.140 6379
pidfile /var/run/redis_6380.pid
port 6380
logfile "6380.log"
dbfilename dump6380.rdb
#主redis服务器密码
masterauth 123456

Slave2

daemonize yes
#bind 127.0.0.1
slaveof 192.168.25.140 6379
pidfile /var/run/redis_6381.pid
port 6381
logfile "6381.log"
dbfilename dump_6381.rdb
masterauth 123456

四、哨兵模式搭建

1.哨兵作用
1、通过发送命令,让Redis服务返回监测其运行状态,包括主服务和从服务器
2、当哨兵监测到主服务master宕机,会自动将slave切换成master,然后通过发布,订阅模式,通知其他从服务器,修改配置文件,让他们切换主机。
2.搭建流程
(1) Master配置文件相较原始配置文件需要修改以下地方

daemonize yes
#bind 127.0.0.1
protected-mode no
requirepass 123456
#放开注释masterauth 并设置密码为123456(此处设置连接主机的密码,如果这台机器是主机,此处配置无用,但是哨兵模式中,主机切换到其他机器上这台机器就是从机,如果此处不设置masterauth将连不上主机)
masterauth 123456

(2)Slave配置文件相较原始配置文件需要修改以下地方
Slave1

daemonize yes
#bind 127.0.0.1
slaveof 192.168.25.140 6379
pidfile /var/run/redis_6380.pid
port 6380
logfile "6380.log"
dbfilename dump6380.rdb
masterauth 123456
protected-mode no
requirepass 123456

Slave2

daemonize yes
#bind 127.0.0.1
slaveof 192.168.25.140 6379
pidfile /var/run/redis_6381.pid
port 6381
logfile "6381.log"
dbfilename dump6381.rdb
masterauth 123456
protected-mode no
requirepass 123456

(4)重启redis服务。
(5)在redis的解压目录把sentinel.conf文件复制到你的redis目录,一共复制三分,我的是sentienl26379.conf、sentienl26380.conf、sentienl26381.conf。
(6)sentienl26379.conf、sentienl26380.conf、sentienl26381.conf相较原始文件修改了以下地方
sentienl26379.conf

protected-mode no
pidfile /var/run/redis-sentinel26379.pid
#Sentinel monitor <name> <ip> <port> <quorum> name :redis主服务名称,可以自行命名,但是在一个sentinel网络中,一个redis主服务只能有一个名称;ip和port :redis主服务的IP地址和端口号;quorum :表示要将这个主服务器判断为失效并下线至少需要2个sentinel同意;
sentinel monitor mymaster 192.168.25.140 6379 2
#主机认证密码改为123456
sentinel auth-pass mymaster 123456 
#如果当前sentinel与master直接的通讯中,在指定时间内没有响应或者响应错误代码,那么当前sentinel就认为master失效SDOWN,“主观”失效,默认为30秒
sentinel down-after-milliseconds mymaster 10000
#当failover失败后,每隔1分钟就会进行一次master失败迁移,默认是3分钟
sentinel failover-timeout mymaster 60000

sentienl26380.conf

protected-mode no
pidfile /var/run/redis-sentinel26380.pid
#默认的哨兵端口号为26379
port 26380
sentinel monitor mymaster 192.168.25.140 6379 2
sentinel auth-pass mymaster 123456 
sentinel down-after-milliseconds mymaster 10000
sentinel failover-timeout mymaster 60000

sentienl26381.conf

protected-mode no
pidfile /var/run/redis-sentinel26381.pid
port 26381
sentinel monitor mymaster 192.168.25.140 6379 2
sentinel auth-pass mymaster 123456 
sentinel down-after-milliseconds mymaster 10000
sentinel failover-timeout mymaster 60000

(7)启动哨兵
sentienl26379.conf
在这里插入图片描述
sentienl26380.conf
在这里插入图片描述
sentienl26381.conf
在这里插入图片描述
(8)我们强行停止其中的一个master,模拟其中一个master服务器突然宕机的情况:
在这里插入图片描述
在这里插入图片描述
然后我们可以看到sentinel从发现一个master宕机,到投票确认,再到从slaves中选出新的master的整个过程:
在这里插入图片描述
我们可以看到端口号为6381的redis服务被重新选举为新的master,原来的master被重新设置为slave,状态为未启动。
在这里插入图片描述
然后我们重新启动端口号为6379的redis服务可以发现,原来的master会自动成为一个slave:
在这里插入图片描述
以上,就是redis的主从复制相关的问题,如果大家觉得这篇文章对您有帮助的化,请帮笔者点个赞,小小的赞就是对我最大的肯定,谢谢啦!

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值