Redis学习之--主从复制与集群管理——Linux版(八)

一、是什么

官网:https://redis.io/topics/replication
中文官网:http://redis.cn/topics/replication.html

也就是我们常说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主。
主机挂了,从机立马可用,然后我们可以修复主机。配从不配主。

二、能干嘛 

  1. 读写分离
  2. 容灾恢复

三、怎么玩

以6379为主机,6380和6381为从机,形成一主二仆的结构
3.1、拷贝多个redis.conf文件 cp redis.conf redis_6379.conf   cp redis.conf redis_6380.conf   cp redis.conf redis_6381.conf
3.2、配从不配主 :从库配置

①通过命令配置(手工配置)   slaveof 主机IP 主机端口
命令:slaveof 127.0.0.1 6379
缺点:每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件
查看该机状态:info replication

②写进配置文件
写进配置:slaveof 主机IP 主机端口
步骤: 修改从机80的配置文件(81相同):
      1. 开启daemonize yes
      2. pid文件名字  pidfile /var/run/redis_6380.pid
      3. 指定端口  port 6380
      4. log文件名字(日志分开) logfile "/var/log/redis/redis-server_6380.log"
      5. dump.rdb名字(数据分开恢复) dbfilename dump_6380.rdb
      6. 配置主从关系  slaveof 127.0.0.1 6379
③为了查看日志或者数据恢复方便,也可以选择修改主机的配置
      1. 开启daemonize yes
      2. pid文件名字  pidfile /var/run/redis_6379.pid
      3. log文件名字(日志分开) logfile "/var/log/redis/redis-server_6379.log"
      4. dump.rdb名字(数据恢复分开) dbfilename dump_6379.rdb
3.3、分别启动三个服务,三个服务的状态


下面以通过命令配置方式来演示三种情况

3.4、一仆二主

问题1:切入点问题:k1~k3是在没开启主从复制之前赋值的,从机get k1~k3可以得到值吗,还是仅有开启主从复制之后的k4能取到值?
答:全部可以取到值。从机会将主机的全部数据接手。
问题2:从机是否可以写?
答:不可。
问题3:主机shutdown后情况如何?从机是上位还是原地待命,数据还在吗?
答:数据肯定在。从机原地待命,没有上位还是从机,但从机状态变成down。
问题4:主机又回来了后,还是主机吗,新增记录后从机还能否顺利复制吗?
答:主机还是Master。数据当然会继续复制。
问题5:其中一台从机down后情况如何?依照原有它能跟上大部队吗?
答:不能。从机每次断开都要重新连一下slaveof ip port,不然默认是主机。。除非写进配置文件




3.5、薪火相传

1、上一个Slave可以是下一个slave的Master,Slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻master的写压力。
2、意思就是:79是主机,80是79的从机;80是主机,81是80的从机。一棒一棒链条式的往下传。80既是主机又是从机,算主机还是从机呢?答案是总体算从机。
3、中途变更转向:会清除之前的数据,重新建立拷贝最新的
4、如何修改:slaveof 新主库IP 新主库端口

3.6、反客为主 slaveof no one

使当前数据库停止与其他数据库的同步,转成主数据库。

四、复制原理

  1. slave启动成功连接到master后会发送一个sync命令
  2. Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
  3. 全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中
  4. 增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步
  5. 但是只要是重新连接master,一次完全同步(全量复制)将被自动执行

五、哨兵模式 sentinel

5.1、是什么

反客为主的自动版,替代了手工写slaveof  no one。能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。
哨兵模式,顾名思义放哨的,即实时监控。

5.2、怎么玩(使用步骤)

①重新调整为一主二仆的结构
②在自定义的/etc/redis目录下新建sentinel.conf文件,名称不能修改  touch sentinel.conf
③配置哨兵,填写内容
     sentinel monitor 被监控数据库名字(自命名) 监控的主机IP 监控的主机端口 count
    数字count,表示主机挂掉后slave投票看让谁接替成为主机,得票数多少后成为主机。至少需要count个从机投票通过。
    示例:vim sentinel.conf
    文本:sentinel monitor master001 127.0.0.1 6379 1
④启动哨兵
    ./redis-sentinel /etc/redis/sentinel.conf 

⑤正常主从演示
⑥模拟原有的master挂了

⑦投票新选

过程:
⑧重新主从继续开工,info replication查查看

⑨问题:如果之前的master重启回来,会不会双master冲突?
不会。原79主机回来之后只能从头做起,跟着新老大混,变成新主机的从机小弟。但有时候我们发现:info replication  显示可能还是主机,那是因为还没被哨兵检测到。稍等一下再info replication ,你就会发现变成从机了。

5.3、一组sentinel能同时监控多个Master

5.4、sentinel.conf 文档
官网:https://redis.io/topics/sentinel
中文官网:http://redis.cn/topics/sentinel.html
参考链接:https://www.cnblogs.com/LiZhiW/p/4851640.html

六、主从复制的缺点

由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。

猜你喜欢

转载自blog.csdn.net/qq_37358143/article/details/106471485