Redis初学16:主从复制

主从复制

简介

主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主,如下图:
在这里插入图片描述
好处:
1.读写分离,性能扩展
2.容灾快速恢复

搭建

我这里准备了三台Linux设备(一台阿里云服务器,两台虚拟机),服务器当主机,两台虚拟机当从机。我在两台虚拟机上面也安装了Redis。

过程:

  1. 启动三台设备上的Redis服务

  2. 然后使用info replication命令查看主从复制的相关信息
    一般显示的信息都如下图所示:
    在这里插入图片描述
    我们可以看到,一开始,三台设备还没设置主从时都属于主机。

  3. 配置主机
    主机一定要修改bind 127.0.0.1 -::1,将127.0.0.1修改成自己主机的ip地址或者修改成0.0.0.0(表示所有主机都可以连接到redis),我这里因为设置了密码所以设置成所有主机都可以访问,如下图:
    在这里插入图片描述
    配置完之后重启Redis!!!

  4. 配置从机
    (1)关闭从机的防火墙;
    (2)修改从机的bind 127.0.0.1 -::1,将127.0.0.1修改成0.0.0.0;
    (3)如果redis的主机设置了密码,需要在从机的config文件中进行配置。对从机的redis.conf文件中的masterauth位置进行配置,如下图:
    在这里插入图片描述
    (4)重启Redis之后,使用slaveof命令配置从机

slaveof 主机的ip 主机redis运行使用的端口号

在两台虚拟机上面执行该命令之后,重新info replication命令查询状态,如下图:
在这里插入图片描述
我们可以看到,此时虚拟机的角色从主机变成了从机。
我们新增一个键进行测试,如下图:
在这里插入图片描述
这表明我们主从复制成功搭建起来了。

特点:
1.在主机上写,在从机上可以读取数据,在从机上写数据报错,如下图:

从机写数据报错
在这里插入图片描述
2.主机挂掉,重启就行,一切如初;从机挂掉之后要重新使用slaveof命令设置为从机

主从复制原理

全量复制:而从服务器(slave)在接收到rdb数据库文件数据后,将其存盘并加载到内存中
全量复制过程:

  1. 当从服务器(slave)启动成功连接到主服务器(master)后会发送一个进行数据同步的消息;
  2. 主服务器(master)接到消息之后会启动后台的存盘进程(把主服务器数据进行持久化),同时收集所有接收到的用于修改数据集命令, 在后台进程执行完毕之后,主服务器(master)将传送整个rdb数据文件到从服务器(slave),完成一次完全同步;

增量复制:主服务器(master)继续将新的所有收集到的修改命令依次传给从服务器(slave),完成同步。
注意:这个过程是主服务器(master)主动去做的,不需要从服务器(slave)发出消息申请进行。

只要是从服务器(slave)重新连接主服务器(master),一次完全同步(全量复制)将被自动执行
在这里插入图片描述

主从复制常用操作

“薪火相传”

上一个从服务器(slave)可以是下一个从服务器(slave)的主服务器(master),slave同样可以接收其他 slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻master的写压力,去中心化降低风险,如下图:
在这里插入图片描述
用法:

slaveof ip 端口号(port)

中途变更转向:会清除之前的数据,重新建立拷贝最新的
风险:
1.一旦某个slave宕机,后面的slave都没法备份;
2.主机挂了,从机还是从机,无法写数据了;

“反客为主”

当一个master宕机后,后面的slave可以立刻升为master,其后面的slave不用做任何修改。
用法:

slaveof  no one

用 slaveof no one 将从机变为主机。

哨兵模式

简介

反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库,如下图:
在这里插入图片描述

使用步骤

配置哨兵

1.在主机配置文件目录下新建sentinel.conf文件。名字绝不能错
2.配置哨兵,填写内容
在sentinel.conf文件里面填写,
sentinel monitor mymaster 主机ip 6379 1
sentinel auth-pass mymaster 密码
其中mymaster为监控对象起的服务器名称, 1 为至少有多少个哨兵同意迁移的数量(意为有多少个哨兵认为主机挂掉了才同意迁移,1是一个哨兵认为主机挂掉了就迁移,2是得两个哨兵都认为主机挂掉了才可以迁移)
注意:sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码应该设置相同。
3.启动哨兵
在sentinel.conf文件目录底下执行 redis-sentinel sentinel.conf 命令,启动哨兵,如下图:
在这里插入图片描述
上面红框中就是从机的信息,正好和master的slave信息对应着,如下图:
在这里插入图片描述
配置哨兵这里有个坑要说一下:
哨兵启动后找不到slave
原因:
1.没有在服务器开放26379端口,阿里云服务器的还要在阿里云安全组也开放这个端口;
2.slave挂掉了…

哨兵监控

当主机挂掉后,从机选举会产生新的主机
我们人为地把主机的进程 kill 掉,
(大概10秒左右可以看到哨兵窗口日志,切换了新的主机)
哪个从机会被选举为主机呢?根据优先级别:slave-priority
原主机重启后会变为从机。

我这里一直出问题…主服务器挂掉之后一直启用不了从服务器作为master😭

复制延时

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

故障恢复

在这里插入图片描述
关于选择条件的解释:
优先级在redis.conf中默认:slave-priority 100,值越小优先级越高
偏移量是指获得原主机数据最全的
每个redis实例启动后都会随机生成一个40位的runid

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值