Redis-主从复制

1、概念

主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,master以写为主,slaver以读为主

2、作用

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

Redis-主从复制_第1张图片

3、搭建环境来测试

    1、 创建/myredis文件

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

Redis-主从复制_第2张图片

关闭appendonly no

Redis-主从复制_第3张图片

    3、配置一主两从,创建三个配置文件

  • redis6379.conf
  • redis6380.conf
  • redis6381.conf

在redis6379.conf内填写一下内容,其他也是一样。

include /myredis/redis.conf

pidfile /var/run/redis_6379.pid

port 6379

dbfilename dump6379.rdb

Redis-主从复制_第4张图片

   4、启动三台服务器

启动并查看进程ps -ef | grep redis

Redis-主从复制_第5张图片

查看三台主机运行情况:info replication

首先客户端连接上对应的redis:redis-cli -p 6379

Redis-主从复制_第6张图片

配从(库)不配主(库):slaveof 

在6380和6381上执行: slaveof 127.0.0.1 6379

1、在主机上写,在从机可以读取数据

2、主机挂掉,重启就行,一切如初,从机还是连接上主机。

3、从机重启需重设:slaveof 127.0.0.1 6379

4、主从复制原理

1)当连接上主服务后,从服务器 主服务发送进行数据同步消息

2)主服务器 接到 从服务器 发送过来的同步信息,把主服务数据进行持久化,rdb文件,把rdb文件发送给从服务器从服务器拿到rdb进行读取

3)之后每次主服务器进行写操作后,都和从服务器进行数据同步。

5、​​​​​​​常用3招

     1)一主两从问题

  • 某台从机在某个时候挂了,主机之后添加了数据,这台从机后面又连上这个台主机,数据是从头开始还是从切入点开始(主机设置k4进来,前面的k1,k2,k3是否可以复制???)

:是从头开始复制的,之前的数据也会复制。

  • 从机是否可以写?set可否?

:不可以,只能读取数据。

  • 主机shutdown后情况如何?从机是上位还是原地待命

:原地待命,不会上位。

    2)​​​​​​​薪火相传

上一个Slave可以是下一个slave的Master,Slave同样可以接收其他 slaves的连接和同步请求

优点:

有效减轻master的写压力

缺点:

1)一旦某个slave宕机,后面的slave都没法备份

2)主机挂了,从机还是从机,无法写数据了

   3)反客为主

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

操作:slaveof  no one  将从机变为主机,这个是手动的。

6、哨兵模式

反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。

Redis-主从复制_第7张图片

使用步骤

1)一主二仆模式,6379为主,6380和6381为仆。

2)​​​​​​​自定义的/myredis目录下新建sentinel.conf文件,名字绝不能错

3)配置哨兵,填写内容

vim sentinel.conf -->  写入 :sentinel monitor mymaster 127.0.0.1 6379 1

sentinel 哨兵,monitor 监视,mymaster:监控对象起的服务器名称

1 :为至少有多少个哨兵同意迁移的数量。

​​​​​​​​​​​​​​4)启动哨兵

执行  redis-sentinel  /myredis/sentinel.conf

Redis-主从复制_第8张图片

5)​​​​​​​​​​​​​​当主机挂掉从机选举产生新的主机

从机会被选举为主机呢?根据优先级别:默认级别:replica-priority 100,值越小优先级越高

Redis-主从复制_第9张图片

就比如上面的6379这个主机挂掉了,这个时候比如选择了从机6380为主机,这时6381为6380的从机,其中6379也为6380的从机。

6)哨兵选择过程

  • 选择新的主机过程

选择条件依次:

1)选择优先级靠前的:优先级:在redis.conf中默认是:replica-priority 100

2)选择偏移量最大的:偏移量:获取原主机数据最全的

3)选择runid最小的从服务器: 每一个redis实例启动都会随机生成一个40位的runid。

  • 确定新的master

挑选出新的从服务器sentinel原主服务器的下的从服务器发送 slaveof no one 命令,产生新的master

  • 原主机成从服务器

当原服务器再次上线好了,sentinel其发送slaveof 命令让其成为新主机的从服务器

你可能感兴趣的:(redis,redis)