设为首页 收藏本站
查看: 1952|回复: 0

[经验分享] Redis的复制

[复制链接]

尚未签到

发表于 2018-11-2 09:35:12 | 显示全部楼层 |阅读模式
  复制解决了单点问题,满足了故障恢复和负载均衡的需求,也是稍后Redis Sentinel和Cluster的基础。
  配置复制,主要是SLAVEOF命令的使用,其可以建立复制关系,断开复制关系,和切换主节点。
  127.0.0.1:6379> help SLAVEOF
  SLAVEOF host port
  summary: Make the server a slave of another instance, or promote it as master
  复制的过程中,数据同步是影响整个复制是否高效的关键环节。数据同步,分为全量复制,和部分复制。
  全量复制,一般用于初次复制场景,它会把主节点全部数据(RDB快照)发送给丛节点。
  部分复制,用于处理复制中因网络闪断等原因造成的数据丢失场景,当从节点再次连接上主节点后,若条件允许,主节点会补发丢失的数据给从节点。
  全量复制,在日志中体现如下:
  110153:S 19 Jul 00:44:11.946 # MASTER timeout: no data nor PING received...
  110153:S 19 Jul 00:44:11.946 # Connection with master lost.
  110153:S 19 Jul 00:44:11.946 * Caching the disconnected master state.
  110153:S 19 Jul 00:44:11.946 * Connecting to MASTER 127.0.0.1:6379
  110153:S 19 Jul 00:44:11.946 * MASTER  SLAVE sync started
  110153:S 19 Jul 00:44:11.946 * Non blocking connect for SYNC fired the event.
  110153:S 19 Jul 00:44:11.955 * Master replied to PING, replication can continue...
  110153:S 19 Jul 00:44:11.956 * Trying a partial resynchronization (request 49ff7b0c8271d78a1eef1e366513e978e412b959:254183).
  110153:S 19 Jul 00:44:11.958 * Full resync from master: 49ff7b0c8271d78a1eef1e366513e978e412b959:2342950
  110153:S 19 Jul 00:44:11.958 * Discarding previously cached master state.
  110153:S 19 Jul 00:44:12.149 * MASTER  SLAVE sync: receiving 6801810 bytes from master
  110153:S 19 Jul 00:44:12.175 * MASTER  SLAVE sync: Flushing old data
  110153:S 19 Jul 00:44:12.203 * MASTER  SLAVE sync: Loading DB in memory
  110153:S 19 Jul 00:44:12.284 * MASTER  SLAVE sync: Finished with success
  部分复制,在日志中体现如下:
  110153:S 19 Jul 00:38:40.437 # MASTER timeout: no data nor PING received...
  110153:S 19 Jul 00:38:40.438 # Connection with master lost.
  110153:S 19 Jul 00:38:40.438 * Caching the disconnected master state.
  110153:S 19 Jul 00:38:40.438 * Connecting to MASTER 127.0.0.1:6379
  110153:S 19 Jul 00:38:40.440 * MASTER  SLAVE sync started
  110153:S 19 Jul 00:38:40.441 * Non blocking connect for SYNC fired the event.
  110153:S 19 Jul 00:38:40.442 * Master replied to PING, replication can continue...
  110153:S 19 Jul 00:38:40.442 * Trying a partial resynchronization (request 49ff7b0c8271d78a1eef1e366513e978e412b959:2312).
  110153:S 19 Jul 00:38:40.442 * Successful partial resynchronization with master.
  110153:S 19 Jul 00:38:40.442 * MASTER  SLAVE sync: Master accepted a Partial Resynchronization.
  部分复制,也就是psync命令运行的过程(其是对早期Redis只支持全量复制的优化),要满足3个条件。

  •   主从节点各自复制偏移量。
  •   主节点复制积压缓冲区。
  •   主节点运行ID。
  1. 复制偏移量
  主节点处理完写入命令后,会把命令的字节长度做累加记录。从节点会每秒钟上报自身的复制偏移量给主节点。两者体现在info replication的统计信息中。
  127.0.0.1:6379> info replication
  # Replication
  role:master
  ...
  slave0:ip=127.0.0.1,port=6389,state=online,offset=4703828,lag=1
  master_repl_offset:4703828
  通过对比主从节点的复制偏移量(master_repl_offset-slave0:offset),可以判断数据是否一致。
  2. 复制积压缓冲区
  其为保存在主节点上的一个固定长度队列,默认大小1MB(通过repl-backlog-size调整),当主节点有连接的从节点时被创建,主节点响应写命令时,会把命令发送给从节点,还会写入复制积压缓冲区。由于缓冲区本质上是先进先出的定长队列,能实现保存最近已复制数据的功能,用于部分复制和复制命令丢失的数据补救。该缓冲区的统计信息如下,据此可算出复制积压缓冲区内可用偏移量的范围:[repl_backlog_first_byte_offset, repl_backlog_first_byte_offset+repl_backlog_histlen]。
  127.0.0.1:6379> info replication
  # Replication
  role:master
  ...
  repl_backlog_active:1

  repl_backlog_size:67108864 /* Backlog circular buffer>  repl_backlog_first_byte_offset:2 /* Replication offset of first byte in the backlog buffer. */
  repl_backlog_histlen:4704779 /* Backlog actual data length */
  由于该缓冲区大小有限,就有可能复制数据没来得及传送的从节点,就被挤出了,此时只能触发全量复制了。
  3. 主节点运行ID
  Redis节点启动后,会动态分配一个40位的十六进制字符串作为运行ID,其主要用来唯一标识Redis节点。从节点保存主节点的运行ID,表明自己正在复制哪个主节点。Redis节点关闭再启动后,运行ID会随之变化,从节点将做全量复制。
  最后看下复制参数
  masterauth abcdefg
  requirepass abcdefg
  slave-read-only yes
  repl-disable-tcp-nodelay no
  repl-backlog-size 64mb
  repl-ping-slave-period 10
  repl-timeout 60
  repl-backlog-ttl 3600
  slave-serve-stale-data yes
  #min-slaves-to-write 0
  #min-slaves-max-lag 10
  若感兴趣可关注订阅号”数据库最佳实践”(DBBestPractice).
DSC0000.jpg



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-629662-1-1.html 上篇帖子: 基于redis分布式锁实现“秒杀” 下篇帖子: Redis的RDB和AOF-Memos
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表