第六讲复制和高可用_第1页
第六讲复制和高可用_第2页
第六讲复制和高可用_第3页
第六讲复制和高可用_第4页
第六讲复制和高可用_第5页
已阅读5页,还剩25页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Redis技术实战 第6课法律声明【声明】本视频和幻灯片为炼数成金网络课程的教学资料,所有资料只能在课程内使用,不得在课程以外范围散播,违者将可能被追究法律和经济责任。课程详情访问炼数成金培训网站 炼数成金逆向收费式网络课程Dataguru(炼数成金)是专业数据分析网站,提供教育,媒体,内容,社区,出版,数据分析业务等服务。我们的课程采用新兴的互联网教育形式,独创地发展了逆向收费式网络培训课程模式。既继承传统教育重学习氛围,重竞争压力的特点,同时又发挥互联网的威力打破时空限制,把天南地北志同道合的朋友组织在一起交流学习,使到原先孤立的学习个体组合成有组织的探索力量。并且把原先动辄成千上万的学习

2、成本,直线下降至百元范围,造福大众。我们的目标是:低成本传播高价值知识,构架中国第一的网上知识流转阵地。关于逆向收费式网络的详情,请看我们的培训网站 第六讲 课程介绍Redis技术实战课程目标类似in action的书籍要达到的目标,以如何用为主以结合案例的方式来学习如何用不但要知道如何用,还需要知道为什么这么用,因此还会结合原理进行讲解,还有可能结合少量源码进行理解从运维角度出发来管理redis第六讲的内容复制Sentinel(哨兵 高可用)第六讲 复制为什么要复制实现数据的多副本存储,从而可以实现服务的高可用提供更好的读性能复制技术的关键点及难点如何指定被复制对象增量还是全量以及如何实现增

3、量?复制时不影响前端业务的操作网络被中断后如何处理如何防止发送出去的数据丢失,没有达到从服务器如何识别被复制的数据源发生变化,导致数据出错第六讲 复制复制步骤全量同步命令传播增量同步第六讲 复制步骤1.指定master配置文件配置slaveof从节点命令行执行slaveof命令2.建立socket连接从服务器根据配置或者命令行命令slaveof创建连向主服务器的socket3.发送ping命令:当连接创建后发送通过ping命令检查socket的读写状态是否正常检查主服务器是否能正常处理命令请求当从服务器不能在规定时间内得到ping的回复,则表示网络不正常,从服务器会断开socket并重新创建连

4、接如果从服务器收到主服务器返回一个错误信息,比如BUSY redisis busy running a script,you can ,则从服务器会断开连接并重新创建连接如果从服务器收到的回应是”PONG”,则表示一切正常,可以执行下一步流程第六讲 复制配置部署4.身份验证如果从服务器设置了masterauth选项,则进行身份验证,否则不进行通过向master发送命令auth来实现认证,比如auth passwd当master没有设置requirepass时,会提示错误no password is set如果master的设置与slave的密码不一样,则出现invalid password错误

5、5.发送端口信息从服务器执行命令REPLCONF listening-port ,向主服务器发送从服务器的命令监听端口这端口号是为了在master上执行info命令时,可以查看到从节点的端口信息6.同步主从服务器之间互为客户端,可以彼此发送命令和响应回应7.命令传播主服务器执行完命令后会发送给从服务器第六讲 复制同步过程截图slavemaster第六讲 复制配置说明slaveof /指定被复制的数据源masterauth /被复制数据源的认证密码slave-serve-stale-data yesyes表示当slave与master之间的连接断开或者正在处于复制中时,slave服务器可以接收客

6、户端的请求,缺点是可能会读取到过期的数据No表示不接收客户端的请求,返回错误信息SYNC with master in progressslave-read-only yes /从服务器是否只读,如果不是只读,可能会从和主之间的数据不一致repl-ping-slave-period 10 /slave向master发送ping的周期频率,单位是妙repl-timeout 60 /复制超时时间slave在与master SYNC期间有大量数据传输,造成超时在slave角度,master超时,包括数据、ping等在master角度,slave超时,当master发送REPLCONF 、 ACK p

7、ingsrepl-disable-tcp-nodelay no如果你选择“yes”Redis将使用更少的TCP包和带宽来向slaves发送数据,本质就是提高包的有效利用率,但是会导致一定的数据延迟,linux系统是40ms如果你选择了 “no”,包利用率不高,但是延迟低第六讲 复制配置说明repl-backlog-size 1mb /master端的固定缓冲区,影响从节点与主节点网络中断后是否全部同步repl-backlog-ttl 3600 /当slave与master断开后,一定时间超时后,释放backlog里面的数据slave-priority 100用于配置从节点的优先级,当主站不能正

8、常工作时,redis sentinel使用它来选择一个从站并将它提升为主站,低优先级的从站被认为更适合于提升当满足下面的条件时,主不接收前端的写请求min-slaves-to-write 3 /最少多少个slave在线,默认是0,表示关闭此功能min-slaves-max-lag 10/最小时间延迟第六讲 复制同步流程从服务器接到客户端发来的slaveof命令向主服务器发送PSYNC?-1是否第一次复制?向主服务器发送PSYNC 主服务器返回+CONTINUE?主服务器返回+FULLRESYNC 执行增量同步否是否是第六讲 复制全同步过程时间主服务器从服务器T0服务器启动服务器启动T1执行SE

9、T k1 v1T2执行SET k2 v2T3执行SET k3 v3T4向主服务器发送PSYNC?-1T5接收从服务器的命令,执行BGSAVE命令,创建包含k1 k2 k3的RDB文件,并使用缓冲区(repl_backlog)记录接下来执行的所有写命令T6执行SET k4 v4,并将命令记录到缓冲区里面T7执行SET k5 v5,并将命令记录到缓冲区里面T8BGSAVE命令执行完毕,向从服务器发送RDB文件T9接收并载入主服务器发来的RDB文件,获得k1 k2 k3三个键T10向从服务器发送缓冲区中保存的写命令set k4 v4和set k5 v5T11接收并执行主服务器发来的两个set命令,得

10、到k4和k5两个键T12同步完成,现在主从服务器两者的数据库都包含了键k1 k2 k3 k4和k5同步完成,现在主从服务器两者的数据库都包含了键k1 k2 k3 k4和k5第六讲 复制断线后增量复制过程时间主服务器从服务器T0主从服务器完成同步主从服务器完成同步T1执行并传播SET k1 v1执行主服务器传来的set k1 v1T2执行并传播SET k2 v2执行主服务器传来的set k2 v2.T10085执行并传播set k10085 v10085执行主服务器传来的set k10085 v10085T10086主从服务器连接断开主从服务器连接断开T10087执行SET k10086 v10

11、086断线中,尝试重新连接主服务器T10088执行SET k10087 v10087断线中,尝试重新连接主服务器T10089主从服务器重新连接主从服务器重新连接T10090向主服务器发送psync命令T10091向从服务器返回+CONTINUE回复,表示执行部分重同步T10092接收+CONTINUE回复,准备执行部分重同步T10093向从服务器发送set k10086 v10086 set k10087 v10087两个命令T10094接收并执行主服务器传来的两个set命令T10095主从服务器再次完成同步主从服务器再次完成同步第六讲 复制复制积压缓冲区(repl-backlog)是一个固定

12、长度的先进先出的队列,默认大小为1MB当从节点连接上后,所有导致数据变更的命令在执行完成后都会先进入缓冲队列,再传播给从节点如何估算backlog的大小:second*write_size_secondwrite_size_second:每秒产生的写数据量Second:最长等待从连接的时间算出值后,可以乘以一定的放大倍数,更安全,比如乘以2如何判断是否增量同步如果从传递过来的偏移量+1之后的数据还在缓冲区中,则执行增量同步,相反,如果已经不在缓冲区了,则执行全量同步当从节点连接时,发送过来的主的实例id与本机的不一样,则主机会做全量同步每个redis实例启动后会生成一个实例标识第六讲 复制一个

13、现象:停掉主后,再起来,会不会重新全量同步会,因为复制源(主节点的实例id)的id发生了变化主节点宕机并重启后的日志从节点宕机并重启后的日志第六讲 复制心跳检测从服务器默认每秒一次的频率想主发送心跳命令:REPLCONF ACK 通过心跳检测可以知道网络状况,通过info命令可以查看到lag参数,表示主从延迟,单位是秒,一般为0或者1在心跳检测中带有当前从的复制偏移量,当主发送给从的命令有丢失时,可以通过这种高频的心跳检测及时发现偏移量不正确,主服务器可以把缺失的命令重新发给从服务器通过心跳检查可以实现min-slaves功能,即如果主从状态不正常时,不允许主写入数据第六讲 高可用-senti

14、nelRedis高可用应该解决那些问题多个节点拥有相同的数据复制技术当主节点宕机后,如何产生新的主节点当主节点宕机后,从节点如何自动连接到新的主节点如何判断主节点宕机旧的主节点恢复后,如何处理如何监控redis所有节点的健康状态第六讲 高可用-sentinel什么是sentinel(哨兵)本身也就是redis程序的一部分主要功能监控redis节点的健康状态通知,把监控到的变化通知给相关系统或者redis实例,通过redis的订阅机制实现自动热备(failover),主节点宕机-选举新的主节点配置管理,redis实例可以通过sentinel获取到某些共享信息Sentinel本身也是分布式,解决了

15、自身单点问题第六讲 高可用-sentinelSentinel-1Sentinel-2Sentinel-3Server1 (主)Server2 (从)Server3 (从)Server4 (从)监视监视监视复制复制复制第六讲 高可用-sentinel安装及配置3个节点,一个sentinel,一个redis的master,一个slave复制配置之slave(同一台机器配置)port 6380logfile /home/liubx/redisdata/slave1/logs/redis.log“pidfile /var/run/redis.pid与主路径不一致dir /home/liubx/redi

16、sdata/slave1slaveof localhost 6379Sentinel配置在redis的安装目录下有一个配置文件sentinel.confdaemonize yeslogfile /home/liubx/sentinel/sentinel.log“sentinel monitor mymaster 127.0.0.1 6379 1第六讲 高可用-sentinel安装及配置启动sentinelredis-sentinel ./sentinel.confredis-server ./sentinel.conf -sentinel第六讲 高可用-sentinel失效备援(HA)测试当m

17、aster宕机后,slave变成master,master重启后,变成slaveMaster宕机一定时间后,sentinel日志Master宕机一定时间后,slave变成master,日志输出第六讲 高可用-sentinel失效备援(HA)测试当master宕机后,slave变成master,master重启后,变成slaveMaster宕机一定时间后,sentinel中执行info第六讲 高可用-sentinel失效备援(HA)步骤1.主观判断主节点是否下线2.客观判断主节点下线3.sentinel选举出执行故障转移的节点(多个sentinel构成对主节点的监控)4.故障转移选出新的主服务器

18、修改从服务器的复制目标将旧的主服务器变为从服务器第六讲 高可用-sentinel主观判断下线默认每10秒一次的频率发送ping命令,用于检测相关节点是否在线包括主服务器 主所属的从服务器 以及其它sentinel返回+PONG 、LOADING、 -MASTERDOWN这三种状态中一种表示节点在线,反之,则节点不在线在某段时间内,如果ping的返回不正确,则表示该节点主观下线时间由参数sentinel down-after-milliseconds master 50000配置,单位为毫秒这个时间的设置不仅仅影响主节点,还影响主节点所属的所有从节点以及同样监听这个主节点的其它sentinel比

19、如master的ip为1.1 此时的sentinel的ip为1.2,有从节点1.3,1.4 指向1.2主节点;同时,另外一个也监听1.1的sentinel的ip为1.5;则如果1.2这个sentinel的时间配置为10000毫秒,则1.2判断1.1,1.3,1.4,1.5主观下线的时间都为10000毫秒不同的sentinel,这个配置时间可以不一样第六讲 高可用-sentinel客观判断下线当一定数量的其它sentinel也同样判断该master下线时,此sentinel就认为此master为客观下线这个数量由sentinel monitor master ip port num这里面的num

20、指定Sentinel之间会创建通信连接,通过发送命令来获取别的sentinel的判断信息发送sentinel is-master-down-by-addr Current_epoch 配置纪元,也可以理解为选举轮次计数器runid为sentinel的实例id,可以为*,代表判断主节点是否下线状态,如果是具体的id,则表示选举领头的sentinelIp为被sentinel判断为主观下线的主服务器的ip地址Port为被判断下线的主服务器端口当其它sentinel收到上面的命令时,会返回以下三个数据down_state:1代表主服务器下线,0代表未下线leader_runid:*代表此次回复仅为判断

21、主服务器是否下线,具体的值为局部领头sentinel的运行idleader_epoch:上一个参数为具体的运行id时,此参数代表此实例的配置纪元类似于配置版本;如果上一个参数为*,则此参数为0第六讲 高可用-sentinel选举领头sentinel某个sentinel发现主节点客观不在线后都可以发起选举一个sentinel在一次选举中只能投一次票,先到先得一次投票完成后,无论是否成功,投票周期都会加一,即epoch加一如果某个sentinel获取到超过一半的投票,则自己就成为领头sentinel,负责实施故障转移选举举例场景:三台sentinel,编号为1,2,3,master的ip为192.168.1.110,端口为637

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论