Redis(7)-主从复制

1. 主从复制

就是指将主机数据更新后根据配置和策略,自动同步到备机master/slave,其中master以写为主,slave以读为主;
用处: 读写分离,容灾快速恢复(可以简单理解为就是由于各服务器的数据都一致,可以迅速恢复);
如何创建: 配从(slave)不配主(master);
基本操作:将各个从服务器中的配置文件(从主服务器那里复制的,使用include指令,这个在默认配置里面有提示);
比如修改为后台执行(不然同一个Linux操作系统怎么执行多个redis),
修改Pid的文件名字pidfile;
指定端口port也要修改(毕竟端口号不重复,默认6379);
Log文件的名字;
dump.rdb的名字dbfilename;
更换appendonly名字或者关掉;(就是是否开启AOF文件,一旦开启就需要和上面的一样换名字,名字一样,不好吧);

如上图般修改;

在redis-cli指令中,完整一点的是redis-cli -h(IP地址) -p(端口号);当然默认情况下不填,IP是127.0.0.1,端口号是6379;

按照上面的情况打开各个不同的redis服务端;

然后通过redis-cli -p 端口号打开需要的客户端;
这个时候已经打开了三台服务器,并且启动了三个服务端它就算主从完成了吗,当然还没开始;
首先可以使用指令info replication查看当前服务端的连接状态;默认情况下每一个服务器都是主服务器

slaveof <IP> <port>:经某个服务器变成另一个服务器的从服务器;

使用这个指令之后,当前的服务器就变成了一个从服务器;然后再查看一下主服务器当前的信息:

上图主服务器的信息中,不仅表明了从服务器的个数,而且有从服务器的IP地址端口号等消息;

经过了上面的显示,现在我们可以尝试一下,主从复制是否成功,现在主服务器添加元素,然后就在从服务器中查看:


看来果然在主服务器中存入的数据从服务器中可以看到;
下图是所有目录产生的文件:和配置文件里面设置的文件名字一致;

注意:主服务器运行读和写,但是从服务器只允许读不允许写;

  1. 主服务器中的数据与从服务器中的数据一致;
  2. 从机不允许写,只允许读;
  3. 一旦主机shutdown,那么从机就会等待主机返回;
  4. 如果按照上面的方式进行设置主从redis,那么属于临时的,也就是一旦你的从服务器关闭,再次打开就不再是从服务器了;如果想将一个服务器变成一个永久的从服务器,在配置文件中配置slaveof <masterIP> <port>即可,像是上面使用include直接引入配置文件,就只需要添加这一条配置就可以了;

1.复制原理

每一次从机连接上主机后都会向主机发送sync指令;然后主机将其中的RDB文件发送到从机中,从机收到RDB文件之后进行全部加载;最后就是主机和从机同步所有的信息;

在复制时,这一个从服务器可以作为下一个从服务器的主服务器;但是和前面的一样,只要你拥有从服务器的身份,你就无法进行数据的写入;
如果想要去除自身的从服务器身份,只需要使用slaveof no one,表明不做从服务器,这时就可以做主服务器;

2. 哨兵模式

通过后台监控主机是否出现故障,一旦出现故障可以自动将从服务器转换为主服务器;

Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。借鉴自中文官方文档

关于使用哨兵模式的一些配置:

  1. 在自定义的redis.conf文件同级目录下新建sentinel.conf文件;
  2. 在sentinel.conf文件中设置如下配置:sentinel monitor mymaster 127.0.0.1 6379 1,其中mymaster是为监控对象起的服务器名称,1表示要有多少个哨兵同意才能够迁移(上面是表示只要有一个同意就可以更换了);
  3. 打开哨兵;
  4. 当我强行关闭(shutdown)主服务器后,哨兵模式就会启动,然后自动配置新的主服务器;
    第一条表示无法连接主服务器;第二条表示将主服务器设置成6380为端口的服务器;然后查看那个端口服务器的状态;


    如上;之前的主服务器也会变成新主服务器的从服务器(当它再次开启的时候);
那么如何选择需要的新服务器呢?
  1. 根据优先级靠前的先选择;(在redis.conf文件里面有slave-priority 100,就是用来设计优先级的,自己进行修改就可以了);
  2. 获得偏移量最多的从服务器会进化成主服务器;(即获得旧主服务器数据最多的服务器);
  3. 选择一个runid最小的从服务器作为新的主服务器;(每一个redis实例启动的时候就会生成一个40位的runid);需要的所有相关信息可以通过info查看(我看了一下,果然不知道怎么进行比较);

注意,目前我所了解过的所有优先级,一般都是值越小优先级越高;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神秘的天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值