一、什么是主从复制
主从复制,就是主机数据更新后根据配置和策略,自动同步到备用机上面去的master/slaver机制。master以写为主,slaver以读为主。一主多从形式。
主从复制的用处:一是读写分离,扩展性能,提高访问速度;二是容灾快速恢复。但不能减小内存的压力,只能减小读写操作的访问压力。
二、如何进行Redis的主从复制
1.讲究一个原则,配从不配主;主服务能写也能读,从服务能读不能写。
- 拷贝多个redis.conf文件include
- 开启daemonize yes (后台启动模式)
- pid文件名字pidfile (可以不设置)
- 指定端口port
- log文件名字
- dump.rdb文件名字,名字需要改掉,几台redis服务器之间最好不要重复。
- appendonly 关掉或者换名字
2.查看主从复制的相关信息
//通过该指令可以查看主从复制的详情
info replication
信息如下图所示:
3.设置主从关系的指令
//将该台服务器设置成某服务器的从服务器
slaveof 主服务器的ip 主服务器的端口号port
设置成功后再用查看指令进行查看,可获得如下信息
注意:
- 当从服务器宕机之后,重新启动时需要重新设置主从模式,即 slaveof 主服务器的ip 主服务器的端口号port 指令。否则从服务器无法做到与主服务的数据一致,重新设置了主从关系之后,从服务器会自动复制主服务器的数据来完成主从数据一致性。
- 若主机发生宕机情况,而从服务器不会上位成主服务器,而是选择原地待命,可用 查看命令查看,即此时项目只能进行读的操作,无法进行写的操作。但当主机重新连上之后,依然可以进行主从复制,保持数据一致性。切记,若其中任意一台服务器进行了flushdb的操作导致数据的丢失,那么其他服务器的数据也同时丢失
- 可以通过配置文件进行配置,实现永久的主从复制关系,而不不是一旦从服务器发生宕机,需要手动的确立主从关系。
如图所示,masterip表示主服务器的ip,masterport表示主服务器的端口号,将前面的#去掉,重启从服务器,就会永久生效主从关系。
三、主从复制的原理
- 每次从机联通后,都会向主机发送sync(同步)指令。
- 主机在接到sync指令后,就会立即向从机发送RDB文件。
- 从机收到RDB文件之后,就会立即进行全盘加载。
- 之后主机的每次写操作,都会立刻发送给从机,从机执行相同的命令。
四、主从复制的去中心化,薪火相传
常规情况下,我们都是一主多从,但当主服务器宕机之后,从服务器是原地待命,等待主服务器重新连上,此时整个项目就只能进行读的操作不能进行写的操作,这对于用户而言是不友善的。
因此我们需要做到当主机宕机之后,剩下的某一台从机可以升级为主机,此时我们就需要将其中一台从机执行取消主从关系的命令。
slaveof no noe
再将剩下的从机执行 slaveof 主服务器的ip 主服务器的端口号port 重新绑定主机。
五、哨兵模式
从以上四中我们需要人工手动的去进行重新绑定主从关系,但使用哨兵模式之后,redis会自动进行监听,若主机宕机,会在剩下的从机中根据投票数选取一台作为主机,并重新绑定主从关系。因此只要配置了哨兵模式,就永远会有一个主服务器在运行。
哨兵模式必须是基于主从复制的模式上来进行实现的。
配置哨兵模式:
在redis.conf的同级目录下新建一个文件:sentinel.conf 文件。
在配置文件中填写以下内容(只需要一句话即可):
//mymaster表示自己给监控对象取的名字,随便取。
//127.0.0.1 6379 表示哨兵监视的主服务器
//最后的 1 表示至少一个哨兵同意迁移的数量,一般设置的哨兵数量都是 奇数,才好进行投票嘛,不会出现平票的可能
sentinel monitor mymaster 127.0.0.1 6379 1
启动哨兵,执行指令:
redis-sentinel /redis.conf的路径/sentinel.conf
哨兵模式的特点: