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 #马上执行主从同步