redis主从原理+哨兵原理+搭建

配置1主2从3哨兵

主从
原理

1、全量同步
Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。具体步骤如下:

  • 从服务器连接主服务器,发送SYNC命令;
  • 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令;
  • 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;
  • 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;
  • 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;
  • 从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;

2、增量同步
Redis增量复制是指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。
增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。

搭建主从:
  1. 复制6份redis.conf文件, 按照个人喜好命名
    为了便于区分, 这里分别命名为 :
    redis-master-6379.conf
    redis-slaver-6380.conf
    redis-slaver-6381.conf
    sentinel-63791.conf
    sentinel-63792.conf
    sentinel-63793.conf

  2. 修改相关配置属性
    在文件中找到以下属性并修改
    (1). 修改redis-master-6379.conf文件(Redis主服务器配置)

port 6379
daemonize yes
bind 0.0.0.0
pidfile "/var/run/redis-6379.pid"
logfile "/var/log/redis/redis-6379.log"
masterauth "123456" # 主从都保持一样的密码,且 master 的配置也需要这一行,在执行切换 master 的时候好像不会去添加这一行
requirepass 123456

(2). 修改redis-slaver-6380.conf文件(Redis从服务器1配置)

port 6380
daemonize yes
bind 0.0.0.0
dbfilename dump6380.rdb
slaveof 127.0.0.1 6379
pidfile "/var/run/redis-6380.pid"
logfile "/var/log/redis/redis-6380.log"
masterauth "123456" # 主从都保持一样的密码,且 master 的配置也需要这一行,在执行切换 master 的时候好像不会去添加这一行
requirepass 123456

(3). 修改redis-slaver-6381.conf文件(Redis从服务器2配置)

port 6381
daemonize yes
bind 0.0.0.0
dbfilename dump6381.rdb
slaveof 127.0.0.1 6379
pidfile "/var/run/redis-6381.pid"
logfile "/var/log/redis/redis-6381.log"
masterauth "123456" # 主从都保持一样的密码,且 master 的配置也需要这一行,在执行切换 master 的时候好像不会去添加这一行
requirepass 123456
哨兵
原理

每隔1秒每个哨兵会向主节点、从节点及其余哨兵节点发送一次ping命令做一次心跳检测,sentinel认为某个服务下线则判定为主观下线,当下线数达到配置设置的客观下线数则判断判断认为客观下线,进行选取产生新的master节点,master节点降级为slave节点;
详见:https://www.cnblogs.com/Eugene-Jin/p/10819601.html

搭建

(4). 修改sentinel-63791.conf文件(Redis哨兵1配置)
直接清空文件内容, 并加以下配置代码

port 63791
sentinel monitor mymaster 127.0.0.1 6379 2  //主节点别名为mymaster,后面是ip和端口,2代表判断主节点失败至少需要2个sentinel节点同意
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 18000 
sentinel parallel-syncs mymaster 1 
pidfile /var/run/redis-sentinel-26381.pid
logfile /var/log/redis/redis-sentinel-26381.log
sentinel auth-pass mymaster 123456 

(5). 修改sentinel-63792.conf文件(Redis哨兵2配置)
直接清空文件内容, 并加以下配置代码

port 63792
sentinel monitor mymaster 127.0.0.1 6379 2 
sentinel down-after-milliseconds mymaster 5000 
sentinel failover-timeout mymaster 18000 
sentinel parallel-syncs mymaster 1 
pidfile /var/run/redis-sentinel-63792.pid
logfile /var/log/redis/redis-sentinel-63792.log
sentinel auth-pass mymaster 123456 

(6). 修改sentinel-63793.conf文件(Redis哨兵3配置)
直接清空文件内容, 并加以下配置代码

port 63793
sentinel monitor mymaster 127.0.0.1 6379 2 
sentinel down-after-milliseconds mymaster 5000  // 主节点故障5秒后启用新的主节点
sentinel failover-timeout mymaster 18000 #故障转移超时时间18s:a 如果转移超时失败,下次转移时时间为之前的2倍;b 从节点变主节点时,从节点执行 slaveof no one 命令一直失败的话,当时间超过180S时,则故障转移失败;c 从节点复制新主节点时间超过180S转移失败
sentinel parallel-syncs mymaster 1  #故障转移时最多可以有1个从节点同时对主节点进行数据同步,数字越大,用时越短,但是访问速度回降低,存在网络和 IO 开销
pidfile /var/run/redis-sentinel-63793.pid
logfile /var/log/redis/redis-sentinel-63793.log
sentinel auth-pass mymaster 123456 

启动Redis并开启哨兵进行测试

redis-server redis-master-6379.conf
redis-server redis-slaver-6380.conf
redis-server redis-slaver-6381.conf

可以分别查看节点状态信息

redis-cli -h 127.0.0.1 -p 6379
info replication

在这里插入图片描述
启动哨兵

redis-sentinel sentinel-63791.conf &
redis-sentinel sentinel-63792.conf &
redis-sentinel sentinel-63793.conf &

查看sentinel状态信息

redis-cli -h 127.0.0.1 -p 63791
info sentinel

在这里插入图片描述
可以看出当前配置了一个主服务器, 端口是6379, 和2个从服务器, 并开启了3个哨兵

  1. 测试哨兵机制
    将主服务器进程杀掉
    在这里插入图片描述
    当kill掉该进程后, 可以看到redis实时日志信息
    在这里插入图片描述
    可以看到,6379主服务器断了之后,sentinel 帮我们选了6381作为新的主服务器
    接下来查看一下6381的状态信息
    在这里插入图片描述
    从6381的状态信息中看到, 原来的从服务器6381在主服务器6379挂掉之后已经被选举成了新的主服务器

接下来我们再重新开启6379服务器, 那么6381会不会将自己的主服务器角色让给6379呢? 答案当然是否定的~~
在这里插入图片描述
重新启动6379服务器后, 主服务器依然是刚才选举得来的6381, 6379此时成了从服务器的角色

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值