Redis之主从复制解读
目录
基本概述
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master/Leader),后者称为从节点(Slave/Follower)数据的复制是单向的!只能由主节点复制到从节点(主节点以写为主、从节点以读为主)
数据的复制是单向的,只能由主节点到从节点。
默认情况下,每台Redis服务器都是主节点,一个主节点可以有0个或者多个从节点,但每个从节点只能有一个主节点 。
作用
1、数据备份:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
2、故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务
的冗余。
3、负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写
少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
4、高可用(集群)基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
如何配置主从复制
命令配置(Slaveof )
Redis Slaveof 命令可以将当前服务器转变为指定服务器的从属服务器(slave server)。如果当前服务器已经是某个主服务器(master server)的从属服务器,那么执行 SLAVEOF host port 将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。
另外,对一个从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。
利用『 SLAVEOF NO ONE 不会丢弃同步所得数据集』这个特性,可以在主服务器失败的时候,将从属服务器用作新的主服务器,从而实现无间断运行。
使当前数据库停止与其他数据库的同步,转成主数据库
返回值:总是返回 OK 。
在 redis-cli 客户端中执行 slaveof 命令只会对当前环境生效,重启后失效。要想永久生效,需要在 redis.conf 配置文件中添加 slaveof 配置。
配置文件配置
编辑redis-conf配置文件
需要启动多个服务,就需要配置多个配置文件。每个配置文件对应修改以下信息:(端口号、pid文件名、日志文件名、rdb文件名)
vi redis_master79.conf
vi redis_sub80.conf
vi redis_sub81.conf
根据指定的配置文件启动redis
主从复制缺点
复制延时,信号衰减。由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。
master挂了,不会自动重选一个master,且剩余的slave不能执行写命令。每次master挂了都只能人工进行干预
主从复制原理
- 当从连接上主服务器之后,从服务器向主服务发送进行数据同步消息 - 全量复制
- 主服务器接收到从服务器发送过来同步消息,把主服务数据进行持久化rbd文件,把rdb文件发送从服务器,从服务器拿到rdb进行读取
- 每次主服务器进行写操作之后,和从服务器进行数据同步(这里是主服务器主动) - 增量复制
主从复制常见问题解答
1、从机是否可以执行写命令?
从机不可以执行写命令
2、从机切入点问题 ,也就是slave是从头开始复制还是从切入点开始复制?
假设:
master启动,写到k3
slave1跟着master同时启动,跟着写到k3
slave2写到k3后才启动,那之前的也是会复制过来的
3、主机shutdown后情况如何?从机是变为master还是原地待命 ?
从机不动,原地待命,从机数据可以正常使用;等待主机重启动归来
4、 主机shutdown后,重启后主从关系还在吗(配置文件)?从机能够顺利复制吗?
主从关系依旧在,也能顺利复制
命令补充(info replication)
replication 相关的信息:
参数名 | 含义 |
---|---|
role | 如果实例不是任何节点的从节点,则值是”master”,如果实例从某个节点同步数据,则是”slave”。 请注意,一个从节点可以是另一个从节点的主节点 |
主节点
从节点
- 点赞
- 收藏
- 关注作者
评论(0)