美文网首页
《redis学习》之主从复制&哨兵机制

《redis学习》之主从复制&哨兵机制

作者: 夏天嘚花花 | 来源:发表于2019-04-09 22:35 被阅读0次

redis主从复制

主从复制之一主多从

image.png

配置详解
1.编辑从服务器上的redis.conf文件,并修改如下配置

slaveof 192.168.199.128 6379
masterauth 123456 #如果主服务器有设置了密码的话这里才需要

2.配置完可以通过配置查看
192.168.199.128(master)

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.199.129,port=6379,state=online,offset=182,lag=1
slave1:ip=192.168.199.130,port=6379,state=online,offset=182,lag=1
master_replid:84908783c1c16571e3a563de043f4a50fb347091
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:182
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:182

192.168,199.129 , 192.168,199.130 (slave)

127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.199.128
master_port:6379
#master当前的状态up表示在线,down表示离线
master_link_status:up
master_last_io_seconds_ago:4
master_sync_in_progress:0
slave_repl_offset:294
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:84908783c1c16571e3a563de043f4a50fb347091
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:294
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:294

通过连接到从服务器的客户端执行keys *,可以发现已经复制成功。如果要让从服务器不能写操作可以设置

slave-read-only yes

主从复制之线性复制

image.png

配置过程跟一主多从差不多,这样的好处是假如master挂掉后,可以直接slave1作为master,slave2不需要变化

复制的原理详解

redis的复制功能包括 同步命令传播

旧版(Redis2.8之前)复制功能

同步: 将从服务器的数据库状态更新至主服务器所处的数据库状态
同步操作一般发生从服务器连接上主服务器的时候,断线重连后需要再次执行同步操作

image.png
image.png
命令传播:同步完成后,主服务器进行操作会使得从服务器再次不一致,所以主服务器需要将操作执行的命令(造成主从不一致的命令,例如增删改)发送给从服务器,使其再次一致
旧版复制的缺陷

我们知道从服务器连接主服务器时会做一次同步操作,期间需要将主服务器上的数据生成一个RDB文件传给从服务器,如果从服务器出现跟主服务器断线后重新连接时会再次执行同步操作。本身RDB这一步是一个很耗时的工作,如果只是仅仅的断线几秒钟,期间主服务器只执行了几次写操作,从服务器都必须执行RDB操作,这样会使得效率低下


image.png

新版(Redis2.8以上)复制功能

新版将SYNC命令换成了PSYNC,其中包括完整重新同步部分重新同步
完整重新同步:初次复制的时候使用,跟SYNC的步骤一样
部分重新同步:断线重连时候使用,使用了复制偏移量,可以判断断线期间的偏移量是否大于某个阈值,如果不大于则不用完整重新同步,而是只是发送断线后主服务器执行过的操作命令进行同步。

部分重新同步

主服务器的复制偏移量和从服务器的复制偏移量
主服务器的复制积压缓冲区
服务器的运行ID(用来区分是哪个从服务器的)


image.png
#复制积压缓冲器的大小设置
repl-backlog-size 1mb

sentinel哨兵机制

常用配置文件详解
port 26379
dir /tmp
#哨兵监控这个master,在至少quorum个哨兵实例都认为master down后把master标记为odown
sentinel monitor master001 192.168.110.10163792
#设置master和slaves的密码
# sentinel auth-pass <master-name> <password>
#master或slave多长时间(默认30秒)不能使用后标记为s_down状态
sentinel down-after-milliseconds master001 30000
#选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长
sentinel parallel-syncs master001 1
#若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败
sentinel failover-timeout master001 180000
# sentinel notification-script <master-name> <script-path>
# sentinel client-reconfig-script <master-name> <script-path>

配置一主二从三哨兵实例

image.png
1.先按照上面的配置方法配置主从复制

....参考上面配置

2.配置三台哨兵(三台哨兵一样)

1.开启sentinel的端口的防火墙

vim /etc/sysconfig/iptables
加入
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 26379 -j ACCEPT
重启网络
service iptables restart

2.配置哨兵sentinel.conf

port 26379
#关闭保护模式
protected-mode no
#哨兵的工作目录
dir /usr/local/redis/work
#配置监控的master实例,2表示至少两台同意后才会故障转移
sentinel monitor mymaster 192.168.199.128 6379 2
#配置过期的时间
sentinel down-after-milliseconds mymaster 30000
选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长,这里指定每次只有一个同步
sentinel parallel-syncs mymaster 1
#配置认证master的密码
sentinel auth-pass mymaster 123456

3.启动哨兵集群

[root@server-1 bin]# ./redis-sentinel /usr/local/redis/etc/sentinel.conf 
2459:X 13 Apr 02:05:10.808 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
2459:X 13 Apr 02:05:10.808 # Redis version=4.0.14, bits=64, commit=00000000, modified=0, pid=2459, just started
2459:X 13 Apr 02:05:10.808 # Configuration loaded
2459:X 13 Apr 02:05:10.812 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 4.0.14 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
 |    `-._   `._    /     _.-'    |     PID: 2459
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

2459:X 13 Apr 02:05:10.858 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
2459:X 13 Apr 02:05:10.867 # Sentinel ID is 91cf03707d04919d59f08911f9549432f034fd1a
2459:X 13 Apr 02:05:10.867 # +monitor master mymaster 192.168.199.128 6379 quorum 2

分别查看三台的状态

#-------------------128
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.199.129,port=6379,state=online,offset=25949,lag=1
slave1:ip=192.168.199.130,port=6379,state=online,offset=25949,lag=1
master_replid:06771fc0a9902eba5016cc3d6ebd126cbec97789
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:26239
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:26239
#-------------------129
192.168.199.129:6379> info replication
# Replication
role:slave
master_host:192.168.199.128
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:51333
slave_priority:100
slave_read_only:1
connected_slaves:0
#-------------------130
192.168.199.130:6379> info replication
# Replication
role:slave
master_host:192.168.199.128
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:40678
slave_priority:100
slave_read_only:1
connected_slaves:0

4.到此集群已经搭建好了,这可以发现redis自动在sentinel.conf加了额外的配置(查看每一台的sentinel.conf文件末尾)

#128
sentinel known-slave mymaster 192.168.199.129 6379
sentinel known-slave mymaster 192.168.199.130 6379
sentinel known-sentinel mymaster 192.168.199.129 26379 abde7eac0f5a3bab66f8a8d483257dde3918fc0c
sentinel known-sentinel mymaster 192.168.199.130 26379 c74804d00075b185655cec328df2dabd87dd6300
sentinel current-epoch 0
#129
sentinel known-slave mymaster 192.168.199.129 6379
sentinel known-slave mymaster 192.168.199.130 6379
sentinel known-sentinel mymaster 192.168.199.130 26379 c74804d00075b185655cec328df2dabd87dd6300
sentinel known-sentinel mymaster 192.168.199.128 26379 91cf03707d04919d59f08911f9549432f034fd1a
sentinel current-epoch 0
#130
sentinel known-slave mymaster 192.168.199.129 6379
sentinel known-slave mymaster 192.168.199.130 6379
sentinel known-sentinel mymaster 192.168.199.129 26379 abde7eac0f5a3bab66f8a8d483257dde3918fc0c
sentinel known-sentinel mymaster 192.168.199.128 26379 91cf03707d04919d59f08911f9549432f034fd1a
sentinel current-epoch 0

5.模拟master宕机后,查看是否有做故障转移(redis做故障转移会自动修改redis.conf,sentinel.conf的配置)

#在192.168.199.128上执行shudown关闭服务器后观察sentinel日志状态
127.0.0.1:6379> shutdown

查看控制台日志输入

2505:X 13 Apr 02:12:02.012 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
2505:X 13 Apr 02:12:02.012 # Sentinel ID is 91cf03707d04919d59f08911f9549432f034fd1a
2505:X 13 Apr 02:12:02.012 # +monitor master mymaster 192.168.199.128 6379 quorum 2
2505:X 13 Apr 02:12:02.015 * +slave slave 192.168.199.129:6379 192.168.199.129 6379 @ mymaster 192.168.199.128 6379
2505:X 13 Apr 02:12:02.027 * +slave slave 192.168.199.130:6379 192.168.199.130 6379 @ mymaster 192.168.199.128 6379
2505:X 13 Apr 02:12:42.959 * +sentinel sentinel abde7eac0f5a3bab66f8a8d483257dde3918fc0c 192.168.199.129 26379 @ mymaster 192.168.199.128 6379
2505:X 13 Apr 02:13:05.846 * +sentinel sentinel c74804d00075b185655cec328df2dabd87dd6300 192.168.199.130 26379 @ mymaster 192.168.199.128 6379
2505:X 13 Apr 02:22:26.389 # +sdown master mymaster 192.168.199.128 6379
2505:X 13 Apr 02:22:26.724 # +new-epoch 1
2505:X 13 Apr 02:22:26.730 # +vote-for-leader abde7eac0f5a3bab66f8a8d483257dde3918fc0c 1
2505:X 13 Apr 02:22:27.029 # +config-update-from sentinel abde7eac0f5a3bab66f8a8d483257dde3918fc0c 192.168.199.129 26379 @ mymaster 192.168.199.128 6379
#==========这里可以看到将master变成了192.168.199.130=======
2505:X 13 Apr 02:22:27.029 # +switch-master mymaster 192.168.199.128 6379 192.168.199.130 6379
2505:X 13 Apr 02:22:27.041 * +slave slave 192.168.199.129:6379 192.168.199.129 6379 @ mymaster 192.168.199.130 6379
2505:X 13 Apr 02:22:27.045 * +slave slave 192.168.199.128:6379 192.168.199.128 6379 @ mymaster 192.168.199.130 6379

查看129和130目前的状态可以发现130变成了master,129变成了130丛服务器

192.168.199.130:6379> info replication
# Replication
role:master
connected_slaves:0
master_replid:90cf45c2cae935fe53f6119748844b528aeec09a
master_replid2:06771fc0a9902eba5016cc3d6ebd126cbec97789
master_repl_offset:152883
second_repl_offset:122266
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:152869

https://www.cnblogs.com/PatrickLiu/p/8444546.html
https://blog.csdn.net/zc309087694/article/details/83417335
https://www.jianshu.com/p/06ab9daf921d

相关文章

  • redis(二)

    Redis用户认证 禁用危险命令 主从复制的过程 主从复制的部署 哨兵 Redis哨兵+主从+密码 Redis哨兵...

  • Redis的高可用,哨兵机制Sentinel

    上一篇聊了Redis的主从复制以及实现原理,下面会在复制的基础上来说说Redis的高可用方案:哨兵机制 哨兵机制 ...

  • Redis入坟(六)分布式集群,概念、原理、实操

    课程目标1、 掌握 Redis 主从复制的配置和原理2、 掌握 Redis 哨兵机制(Sentinel)原理和实战...

  • Redis主从复制下的哨兵模式

    一.哨兵机制 有了主从复制的实现以后,如果想对主服务器进行监控,那么在redis2.6以后提供了一个"哨兵"的机制...

  • Redis的高可用

    Redis主从复制 什么是主从复制 Redis有三种集群方案,主从复制,哨兵,cluster集群,主从复制是指将一...

  • 《redis学习》之主从复制&哨兵机制

    redis主从复制 主从复制之一主多从 配置详解1.编辑从服务器上的redis.conf文件,并修改如下配置 2....

  • redis

    redis配置文件概括说明 redis 常用配置 redis 主从复制 配置文件修改 手动修改 redis 哨兵部...

  • redis集群

    本章要点 Redis主从 Redis哨兵 Redis集群 主从复制原理 1. Redis 主从 比较简单在redi...

  • redis的三种集群方式

    redis的三种集群方式 redis有三种集群方式:主从复制,哨兵模式和集群。 1.主从复制 主从复制原理: 从服...

  • spring boot data redis的三种配置方式

    redis 单机版 redis sentine 主从复制:master:哨兵名称,nodes:主节点列表 redi...

网友评论

      本文标题:《redis学习》之主从复制&哨兵机制

      本文链接:https://www.haomeiwen.com/subject/absmiqtx.html