1、主从复制
Master/Slave 机制:master机器负责“写”,Salve机器负责备份和读,也就是常说的读写分离。
1.1 原理
复制原理:Slave启动成功连接到Master后会发送一个sync命令,Master接到命令启动后台的存盘进程,同时手机所有接受到的用于修改数据集命令。在后台进程执行完毕之后,Master将传送整个数据文件到slave,以完成一次完全同步。
全量复制:slave服务在接受到数据库文件数据后,将其存盘并加载到内存中;
增量复制:master继续将新的所有收集到的修改命令依次传给slave,完成同步;
但是只要重新连接master,一次完全同步(全量复制)将被自动执行。
1.2 查看redis服务的角色
默认情况下每个redis服务都是master的角色,可以登录客户端输入:
Info replication 查看该redis服务的角色。
1.3 master到slave 角色
方法一、手动输入命令
1)、启动redis服务;
2)、启动客户端;
3)、在客户端输入: slaveof masterIp masterPort
缺点:redis服务再次重启后,不在作为salve角色,而是采用默认的master角色;
方法二、修改配置文件
Redis再次重启后还是salve角色。
1:master 服务器的ip和端口;
2: master服务器如果有密码的话,这里输入它的密码;
1.4 一主多备
举例说明啊,1个主机 A ,2个slave机器 B和C;
Master服务器是redis启动默认的,我们要把redis的服务B和C变为Slave角色,可通过上面介绍的命令或配置文件模式实现。
说明:
- 主机Master是可以写的,而从机Slave是不允许进行写操作的;
- 从机slave也可以继续作为其他机器的mater,也就是说,A是master,B的master是A,C的master可以是B,但是B还是Slave角色,不能写数据;
- 当主机master挂了的时候,从机slave和slave默认还是不会变为master的,master A重启后自动变为slave B和C的master;
- 就是slave挂了,如果是通过命令使一个服务变为slave,那么重启服务后这个redis服务将不在是slave,而是默认的master;如果是通过修改配置文件的话,那么重启redis服务后还是slave的角色;
1.5 主从模式的优缺点
优点:
1、同一个Master可以同步多个Slaves。
2、Slave同样可以接受其它Slaves的连接和同步请求,这样可以有效的分载Master的同步压力。因此我们可以将Redis的Replication架构视为图结构。
3、Master Server是以非阻塞的方式为Slaves提供服务。所以在Master-Slave同步期间,客户端仍然可以提交查询或修改请求。
4、Slave Server同样是以非阻塞的方式完成数据同步。在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据为了分载Master的读操作压力,Slave服务器可以为客户端提供只读操作的服务,写服务仍然必须由Master来完成。即便如此,系统的伸缩性还是得到了很大的提高。
5、Master可以将数据保存操作交给Slaves完成,从而避免了在Master中要有独立的进程来完成此操作。
6、支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。
缺点:
1、Redis不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。
2、主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。
3、Redis的主从复制采用全量复制,复制过程中主机会fork出一个子进程对内存做一份快照,并将子进程的内存快照保存为文件发送给从机,这一过程需要确保主机有足够多的空余内存。若快照文件较大,对集群的服务能力会产生较大的影响,而且复制过程是在从机新加入集群或者从机和主机网络断开重连时都会进行,也就是网络波动都会造成主机和从机间的一次全量的数据复制,这对实际的系统运营造成了不小的麻烦。
4、Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。
其实redis的主从模式很简单,在实际的生产环境中是很少使用的,我也不建议在实际的生产环境中使用主从模式来提供系统的高可用性,之所以不建议使用都是由它的缺点造成的,在数据量非常大的情况,或者对系统的高可用性要求很高的情况下,主从模式也是不稳定的。
2、哨兵模式 sentinel
能够后台自动监控主机master是否故障,如果发生故障了根据投票自动将从库Slave转化为主库master。
2.1 配置文件 sentinel.conf
首先我们看下 哨兵模式的配置文件 sentinel.conf 文件。
- 这个文件的名称,注意是和redis.conf不同的文件;
- 启动哨兵模式,我们是新启动一个进程去监控master服务的,新启的服务是否是守护进程,一般建议设置为守护进程;
- 哨兵模式的日志输出日志文件名;
4、哨兵模式输出文件目录,需要自行定义一个路径;
5、设置哨兵模式的关键点,格式为
sentinel monitor <master-name>(可自定义) < master-ip> <r master--port> <quorum>
<quorum>代表只有<quorum>个或<quorum>个以上的哨兵认为主服务器不可用的时候,才会进行failover操作。
sentinel monitor mymaster 192.168.11.128 6379 2
例如:sentinel monitor mymaster 127.0.0.1 6379 2
表示监控master在127.0.0.1 6379 的redis服务器,当2个或2个以上的slave认为Master不可用,就触发选的选举,从剩余的slave中选出新的master服务器。
6、代表重新选举的时间间隔,默认30秒,就是从老的master不可用,到选寻的master之间间隔30秒,可进行设置;
2.2 启动哨兵模式
1、在master服务器上首先修改sentinel.conf文件;
2、当redis-server服务器启动后,启动redis-sentinel服务,启动命令和redis-server类似:
./redis-sentinel /path/to/sentinel.conf
可通过查看sentinel日志(sentinel.conf文件里可配置)文件,查看master服务挂了后,redis的哨兵机制触发,并选出新的master服务器来。
当老的master服务再次重启后,它将不在是master,而是新master的一个slave。
2.3 哨兵模式的优缺点
优点:
哨兵集群模式是基于主从模式的,所有主从的优点,哨兵模式同样具有。
1、主从可以切换,故障可以转移,系统可用性更好。
2、哨兵模式是主从模式的升级,系统更健壮,可用性更高。
缺点:
Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。
配置复杂