一、什么是主从复制

一主一从,一主多从

做读写分离(可以设置主写从读),做数据副本,扩展数据性能
一个maskter可以有多个slave,一个slave只能有一个master
数据流向是单向的,从master到slave

二、复制到配置

启动两个服务端:

示例:在阿里云服务器上创建两个redis服务端配置文件(注意配置文件中的端口不同),使用不同的配置文件启动,用两个客户端分别连接。

一个服务端配置文件是:redis_6379.conf,另一个服务端配置文件是:redis_6380.conf

启动两个服务端命令redis-server redis_6379.conf        redis-server redis_6380.conf          #分开执行

查看是否开启两个服务端:ps -ef|grep redis-server

Redis(五)——主从做读写分离原理与优化

启动之后可以通过可视化工具连接

两个客户端连接:(分别通过不同端口连接)

Redis(五)——主从做读写分离原理与优化

 

Redis(五)——主从做读写分离原理与优化

做主从联系有两种方式

方式一:直接执行slave命令

6379是主,6380是从
在6380客户端执行下面命令
slaveof 127.0.0.1 6379 #异步

#如果想取消复制,主从库就没关联了,但是之前的数据不会清除 slaveof no one

在主库上设置键值

Redis(五)——主从做读写分离原理与优化

在从库上面执行slaveof绑定主库

Redis(五)——主从做读写分离原理与优化

 

方式二:配置文件方式

主库配置文件

daemonize yes
port 6379
bind 0.0.0.0
protected-mode no
dir "/root/data"
logfile "6379.log"

在从库的配置文件redis_6380.conf中加入这两句话

slaveof ip port #配置主节点ip和端口
slave-read-only yes #从节点只读,因为可读可写,数据会乱

Redis(五)——主从做读写分离原理与优化

关掉之前的redis服务端连接,重新启动

重新启动之后,在客户端不用再执行slave命令

在主库直接set键值

Redis(五)——主从做读写分离原理与优化

在从库就能直接获取,但是从库不能写入数据,只能读取

Redis(五)——主从做读写分离原理与优化

三、复制常见问题

1.读写分离

读流量分摊到从节点

可能遇到问题:复制数据延迟,读到过期数据,从节点故障

2.主从配置不一致

maxmemory不一致:丢失数据

数据结构优化参数:主节点做了优化,从节点没有设置优化,会出现一些问题

3.规避全量复制

第一次全量复制,不可避免:小主节点,低峰(夜间)

节点运行id不匹配:主节点重启(运行id变化)

复制挤压缓冲区不足:增大复制缓冲区大小,rel_backlog_size

4.规避复制风暴

单主节点复制风暴,主节点重启,所有从节点复制

 

。。。