redis学习笔记(15)主从复制

2022/5/2 2:12:50

本文主要是介绍redis学习笔记(15)主从复制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1、概述

主机数据更新后根据配置和策略, 自动同步到备机的 master/slaver 机制,Master 以写为主,Slave 以读为主,主从复制节点间数据是全量的。

作用:

    • 读写分离,性能扩展
    • 容灾快速恢复

2、复制原理

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

3、哨兵模式

反客为主:当一个 master 宕机后,后面的 slave 可以立刻升为 master,其后面的 slave 不用做任何修改。用 slaveof no one 指令将从机变为主机。而哨兵模式是反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。

当主机挂掉,从机选举产生新的主机

    • 哪个从机会被选举为主机呢?根据优先级别:slave-priority 。
    • 原主机重启后会变为从机。

4、复制延时

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

5、故障恢复

优先级:在 redis.conf 中默认 slave-priority 100,值越小优先级越高。

偏移量:指获得原主机数据最全的概率。

runid:每个 redis 实例启动后都会随机生成一个 40 位的 runid。

6、搭建一主多从

1)创建/myredis文件夹;

2)复制redis.conf配置文件到文件夹中去

cp /usr/local/redis/redis-6.2.0/redis.conf /usr/local/redis/myredis/

  3)创建一主两从的三个配置文件并配置(三个配置文件只是端口号不同,分别为6380,6381,6382)

include redis.conf
pidfile /var/run/redis_6382.pid
port 6382
dbfilename dump6382.rdb

  4)启动三个redis服务(命令为:redis-server程序位置   conf文件位置)

/usr/local/redis/redis-6.2.0/src/redis-server /usr/local/redis/myredis/redis6380.conf
/usr/local/redis/redis-6.2.0/src/redis-server /usr/local/redis/myredis/redis6381.conf
/usr/local/redis/redis-6.2.0/src/redis-server /usr/local/redis/myredis/redis6382.conf

  5)连接三个redis服务

/usr/local/redis/redis-6.2.0/src/redis-cli -p 6380
/usr/local/redis/redis-6.2.0/src/redis-cli -p 6381
/usr/local/redis/redis-6.2.0/src/redis-cli -p 6382

  6)查看主机运行情况,在redis-cli里运行命令  info replication,此时的运行结果如下,可以看到主机均为master:

role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:65005be677cd7ebcecddbc540217b5a59e95dad0
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

  7)设置端口为6381和6382的服务为从节点,6380为主节点,在连接6381和6382的redis-cli里运行如下命令:

slaveof 127.0.0.1 6380

  

 

参考:Redis | ZC 的学习录 (zhangc233.github.io)

参考:(29条消息) redis主从复制---搭建一主多从_Java钉子户的博客-CSDN博客

 

 



这篇关于redis学习笔记(15)主从复制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程