redis-主从复制

1、主从复制简而言之为将主redis的数据同步到从redis,达到主从数据一致。主从复制应用:

  • 读写分离
  • 容灾备份

2、怎样设置主从?

  • 原则:配从不配主
  • 方式:

       a、在从redis中使用执行命令 slaveof host port  [slaveof no one命令表示禁止和主机的同步]

     b、在从redis的配置文件中配置slaveof host port

  • 查询主从信息:info replication

 3、主从复制原理

全量复制:slave连接上master时候,master将整个快照发给slave,slave加载快照的数据,此时为全量复制

增量复制:master每次接收到在自己数据库的写操作,同时会把写命令传给slave

4、常见问题

  • 切入点问题?slave1、slave2是从头开始复制还是从切入点开始复制?比如从k4进来,那之前的123是否也可以复制

-->从头开始复制,不是从切入点(创建从的时间),主从数据保持一致了

  • 从机是否可以写?set可否?

-->从机一般配置为slave-read-only yes,即为不可set,只可以读

  • 主机shutdown后情况如何?从机是上位还是原地待命

-->从机不上位,原地待命

  • 主机又回来了后,主机新增记录,从机还能否顺利复制?

-->主机回来后还是主机身份,主机新增,从机仍然顺利复制

  • 其中一台从机down后情况如何?依照原有它能跟上大部队吗?

-->如果通过命令slaveof设置的主从,从新启动从机后身份会变成主机,需要从新用命令设置为原来主机的从机,那么此时数据就同步了;

如果是通过当前从机的配置文件配置的,那么启动后仍然是从机,且数据是同步的

  • 如果从机中途变更主机,数据变化?

-->清空所有数据,并与新主机的数据同步

5、哨兵模式

  • 什么是哨兵模式?

监控主机是否发生故障,如果发生了故障,根据投票数自动将从机切换为主机

  • 怎么启动哨兵?

新建配置sentinel.conf文件,并添加内容(这里是最简化的配置):

sentinel monitor 被监控主机名字(随意) 127.0.0.1(主机的IP) 6379(主机redis的端口号) 1(选举时候大于该数才能将slave升为主机)

启动哨兵:redis-sentinel sentinel.conf

  • 一个实例:

假设127.0.0.1 6379  6380 6381三个端口分别启动了redis服务,6380为master,其它为slave,然后启动哨兵

哨兵的日志:

2793:X 19 Aug 02:02:42.868 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
2793:X 19 Aug 02:02:42.883 # Sentinel ID is bfbd85c34ae2f4d8f0cd584dda8a90bb44ebe7af
2793:X 19 Aug 02:02:42.883 # +monitor master host6379 127.0.0.1 6380 quorum 1
2793:X 19 Aug 02:02:42.884 * +slave slave 127.0.0.1:6379 127.0.0.1 6380 @ host6379 127.0.0.1 6380
2793:X 19 Aug 02:02:42.885 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ host6379 127.0.0.1 6380

关闭6380的服务,日志:

2820:X 19 Aug 02:21:32.136 # +sdown master host6379 127.0.0.1 6380
2820:X 19 Aug 02:21:32.136 # +odown master host6379 127.0.0.1 6380 #quorum 1/1
2820:X 19 Aug 02:21:32.136 # +new-epoch 2
2820:X 19 Aug 02:21:32.136 # +try-failover master host6379 127.0.0.1 6380
2820:X 19 Aug 02:21:32.147 # +vote-for-leader bfbd85c34ae2f4d8f0cd584dda8a90bb44ebe7af 2
2820:X 19 Aug 02:21:32.147 # +elected-leader master host6379 127.0.0.1 6380
2820:X 19 Aug 02:21:32.147 # +failover-state-select-slave master host6379 127.0.0.1 6380
2820:X 19 Aug 02:21:32.206 # +selected-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ host6379 127.0.0.1 6380
2820:X 19 Aug 02:21:32.207 * +failover-state-send-slaveof-noone slave 127.0.0.1:6381 127.0.0.1 6381 @ host6379 127.0.0.1 6380
2820:X 19 Aug 02:21:32.292 * +failover-state-wait-promotion slave 127.0.0.1:6381 127.0.0.1 6381 @ host6379 127.0.0.1 6380
2820:X 19 Aug 02:21:32.853 # +promoted-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ host6379 127.0.0.1 6380
2820:X 19 Aug 02:21:32.853 # +failover-state-reconf-slaves master host6379 127.0.0.1 6380
2820:X 19 Aug 02:21:32.906 * +slave-reconf-sent slave 127.0.0.1:6379 127.0.0.1 6379 @ host6379 127.0.0.1 6380
2820:X 19 Aug 02:21:33.863 * +slave-reconf-inprog slave 127.0.0.1:6379 127.0.0.1 6379 @ host6379 127.0.0.1 6380
2820:X 19 Aug 02:21:33.863 * +slave-reconf-done slave 127.0.0.1:6379 127.0.0.1 6379 @ host6379 127.0.0.1 6380
2820:X 19 Aug 02:21:33.939 # +failover-end master host6379 127.0.0.1 6380
2820:X 19 Aug 02:21:33.939 # +switch-master host6379 127.0.0.1 6380 127.0.0.1 6381
2820:X 19 Aug 02:21:33.940 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ host6379 127.0.0.1 6381
2820:X 19 Aug 02:21:33.940 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ host6379 127.0.0.1 6381
2820:X 19 Aug 02:22:03.944 # +sdown slave 127.0.0.1:6380 127.0.0.1 6380 @ host6379 127.0.0.1 6381

从日志可以看出,主机动6380切换到了6381。

此时,启动6380端口的服务,日志:

2820:X 19 Aug 02:30:57.570 # -sdown slave 127.0.0.1:6380 127.0.0.1 6380 @ host6379 127.0.0.1 6381
2820:X 19 Aug 02:31:07.500 * +convert-to-slave slave 127.0.0.1:6380 127.0.0.1 6380 @ host6379 127.0.0.1 6381

从日志可以看出,原主机down机后,再恢复时候,哨兵会将其作为当前主机(6381)的从机使用

猜你喜欢

转载自www.cnblogs.com/shixiemayi/p/9498423.html