默认情况下,每台Redis都是主节点 ,一般情况下,只要配从机就好了

环境配置

  1. 127.0.0.1:6379> info replication # 查看当前库的消息
  2. # Replication
  3. role:master # 自己是主机
  4. connected_slaves:0 # 没有从机
  5. master_replid:4366452367ea43aaac307243916c00ce9c0c6004
  6. master_replid2:0000000000000000000000000000000000000000
  7. master_repl_offset:0
  8. second_repl_offset:-1
  9. repl_backlog_active:0
  10. repl_backlog_size:1048576
  11. repl_backlog_first_byte_offset:0
  12. repl_backlog_histlen:0
  • 复制三份conf文件
  • 依次修改每份的
    • 端口
    • pid名字
    • log文件名字
    • dump.rdb名字
  • 启动三个Redis

redis-server zmsconfig/redis81.conf
image.png

  • 让6380作为6179的从机 ```bash 127.0.0.1:6380> SLAVEOF 127.0.0.1 6379 # 使自己作为6379的从机 OK

从机查看自己的信息

127.0.0.1:6380> info replication

Replication

role:slave # 身份是从机 master_host:127.0.0.1 # 主机地址 master_port:6379 # 主机端口号 master_link_status:up master_last_io_seconds_ago:8 master_sync_in_progress:0 slave_repl_offset:28 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:770969c98307a8e37dd22e5e561c7831611dbc33 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:28 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:28

主机查看自己的信息

127.0.0.1:6379> info replication

Replication

role:master # 身份是master connected_slaves:1 # 从机的个数 slave0:ip=127.0.0.1,port=6380,state=online,offset=140,lag=1 master_replid:770969c98307a8e37dd22e5e561c7831611dbc33 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:140 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:140

``` 让81也作为79的从机
image.png

这里使用的是命令,是暂时的,只是本次的情况可以使用。
在配置文件中进行配置就是永久的。

  • 主机是负责写的,从机只能负责读
  • 主机所有信息数据,自动被从机保存

在主机写
image.png
可以在从机读
image.png

如果在从机写
image.png

  • 主机断开连接,从机依旧连接到主机,从机这个时候不能进行写,此时如果主机上线,从机依旧可以获得主机的信息
  • 从机断开连接后,如果没有使用conf配置主机信息,那么他启动以后就是master,这时候手动配置器作为其他redis的主机,这个时候他依旧可以获取到主机的所有信息(但也仅仅可以获得主机的东西)。

image.png

复制原理

  • 全量复制:
    • 主节点收到从服务器的全量重同步请求时,主服务器便开始执行bgsave命令,同时用一个缓冲区记录从现在开始执行的所有写命令。
    • 当主服务器的bgsave命令执行完毕后,会将生成的RDB文件发送给从服务器。从服务器接收到RDB文件时,会将数据文件保存到硬盘,然后加载到内存中。
    • 主服务器将缓冲区所有缓存的命令发送到从服务器,从服务器接收并执行这些命令,将从服务器同步至主服务器相同的状态。

作者:云枭
链接:https://juejin.cn/post/6844903650175746056
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 增量复制:
    • 复制偏移量:
      • image.png
      • 从服务器slave0和slave1都有一个参数offset,这个参数就是从服务器的复制偏移量。master_repl_offset这个参数就是主服务器的偏移量。
      • 主服务器的复制偏移量保存向从服务器发送过的字节数据。

从服务器的复制偏移量保存着从主服务器接收的字节数据。
通过对比主服务器和从服务器的复制偏移量就可以知道命令是否丢失,丢失则补发复制偏移量相差的字节命令。

  • 如果master宕机,那么如何选出一个新的master?
    • 手动:选择一个从节点执行 slaveof no one ,让自己变成主机,那么其他节点就可以手动连接到最新的这个主节点,这个时候原来的master修复了之前的slave也不会作为他的slaves
    • 自动:哨兵模式

哨兵模式

  • 自动选举master的模式