Redis 主从复制

  

常见的主从形式

 

第三种是因为slave太多,都从master同步数据,master IO压力很大,所以拿一部分slave也作为master。

一个slave只能有一个master,一个master可以有多个slave。

主从复制不会阻塞redis服务器,redis服务器在主从复制的同时仍可以处理客户端请求。

 

 

主从复制的作用

  • 数据冗余(数据备份)
  • 读写分离:从slave读取数据、master负责数据的写操作,提高服务器性能
  • 负载均衡:多个从节点都负责读,可使用nginx进行读的负载均衡
  • 高可用:master出现问题,可使用一个slave作为master;部分slave出现问题,其它slave可用

 

 

全量复制、偏移量

slave第一次连接master后,会从master复制全部数据,称为全量复制。

之后每次从master同步,都只复制偏移量(offset,距离上一次同步,期间做的修改)。如果偏移量复制失败,则尝试进行全量复制。

当然,如果有需要,slave 在任何时候都可以发起全量同步。

 

 

redis主从同步配置

有2种方式:配置文件方式、命令方式。

 

redis 5.0之后的版本用replicaof代替了slaveof,虽然在5.0中slaveof还能用(向下兼容),但早晚要被取消,尽量用replicaof。

此处以5.0版本为例,若使用的是5.0之前的版本,把所有的replicaof都换成slaveof即可。

 

要模拟的话,在VMware上克隆虚拟机,就有多个Linux了,不必修改使用的端口号。

如果在一个虚拟机上模拟(使用多个redis服务器),将之前的redis复制多份,放到/usr/local/redis下,重命名为redis1、redis2....并修改redis.conf中的端口号、各种文件保存位置。

 

 

如何查看redis的版本?

 cd到redis的bin目录,以下4句命令任选一句执行:

./redis-cli -v
./redsi-cli --version  #全称是2根-

./redis-server -v
./redis-server --version

 

 

 


 

 

配置文件方式(推荐)

修改redis.conf中的配置。

 

1、master的配置

replicaof、masterauth的配置要注释掉。

master宕机后,把某个slave的replicaof配置注释掉,作为新的master,再把其它slave指向此节点。

 

 

设置slave只读(读写分离)。

 

其实这些都是默认值,看一下只是怕之前改过。

 

看一下有没有设置密码。

 

如果做了修改,需重启redis。

 

 

 

2、slave的设置

设置一下master的ip、port,如果master设置了密码,此处还需要写上master的密码。

重启下redis生效。

 

 

 

连上master,看下主从复制信息:

info replication

连接的slave的个数,各slave的ip、port、state、偏移量都可以看到。

那个replid即replication id,每次复制完都会用replid打一个标记复制至此,距上一replid之间的内容就是偏移量(增量)。

我们随便set一个键值对,比如set user hasagei

 

 

 

连上slave,同样的方式看下:

master的信息、本slave的信息都可以看到,包括slave是否只读、偏移量等等。

有个参数是connected_slaves,是本节点的从节点个数(层叠,从节点也可以作为主节点),如果有,也会列出各从节点的信息。

 

get一下刚才在master中设置的key,能获取到值;

set一个键值对,报错,即只读。

 

 


 

 

 

命令方式(了解即可)

(1)连接到要做为主节点的redis服务器

replicaof no one

使之成为主节点

 

config set replica-read-only yes

 设置slave只读

 

也可以先查看,不符合要求再设置:

config get replica-read-only

 

 

 

(2)连接到要作为slave的redis服务器

replicaof no one

可能之前就是某个master的从属,先去掉杂七杂八的主人。

 

replicaof 192.168.1.7 6379  #master的ip、port

 

 

缺点:

  • 配置不是永久性的,只在本次连接期间有效,下次还需要配置,麻烦
  • 如果master设置了密码,则连不上

 

 


 

 

 

也可以手动同步:

sync  #马上执行主从同步

 

posted @ 2019-06-24 15:55  chy_18883701161  阅读(2525)  评论(0编辑  收藏  举报