redis 凭借着强大的功能和可靠的稳定性,应用场景越来越广。逐渐成为软件开发工程师必备的技能之一。
本篇文章,暂不做基本功能的介绍。直接教大家如何部署redis集群。
集群演进主要分为2部分。
一、主从备份机制
一个redis 主服务可以拥有多个从服务;一个从服务器,只可拥有一个主服务。从服务 也可以作为其他服务的主服务。
在redis的复制机制中,主服务器写入的任何数据,都会被从服务器同步。所以一般情况下,从服务都是只读的。
可以衍生的功能操作就是,redis的 读写分离。一般写操作,直接写主服务器,读取操作,可以读取 从服务器。这样可以提高服务的性能。
如何实现主从机制?
实现比较简单,直接修改从服务的redis配置文件。增加一下命令即可:
replicaof <host> <port>
主从备份的机制,解决了数据丢失的问题。但是,如果主机挂掉。数据写入还是无法解决,还是会造成系统有异常。所以,就必须要有更好的方案,于是就有了以下的哨兵模式。
二、哨兵模式
哨兵模式建立在主从备份机制的基础之上。
主从机制的背景下,加入主机服务挂掉。要让所有服务能正常的话,必须要恢复主机的正常,如果恢复不了,就必须启用一个新的主机。
如果这些都靠人为操作来完成,花费的时间,肯定不少。而redis 的哨兵就是redis 提供的自动完成以上操作的功能。
redis sentinel 以心跳的方式检测主服务器及其下属从服务器的运行情况。并在主服务异常的时候,实施故障转移,从从服务器中以特定的规则,选出下一个从服务器作为新的主服务器,以保证不影响业务系统提供正常的服务。
如何启动哨兵?其实很简单,只需要在 redis 所在目录下 新建一个sentinel.conf文件,文件内容如下 :
port 26379
sentinel monitor <master_name> <ip> <port> <quorum>
启动sentinel命令 : redis-server sentinel.conf --sentinel
需要注意的是
1、sentinel monitor 只需要 配置主服务器,即可自动监视 主服务器下的从服务器。无需配置监视 从服务器。
2、一个sentinel 可以监视多个 主服务,只需要配置多个 sentinel monitor master即可。
3、sentinel 可以组网,即可以同时使用多个sentinel。 以防止唯一的sentinel故障。
三、集群功能
具体来说,Redis集群会将整个数据库空间划分为16384个槽(slot)来实现数据分片(sharding),而集群中的各个主节点则会分别负责处理其中的一部分槽。当用户尝试将一个键存储到集群中时,客户端会先计算出键所属的槽,接着在记录集群节点槽分布的映射表中找出处理该槽的节点,最后再将键存储到相应的节点中
当用户想要向集群添加新节点时,只需要向Redis集群发送几条简单的命令,集群就会将相应的槽以及槽中存储的数据迁移至新节点。与此类似,当用户想要从集群中移除已存在的节点时,被移除的节点也会将自己负责处理的槽以及槽中数据转交给集群中的其他节点负责。最重要的是,无论是向集群添加新节点还是从集群中移除已有节点,整个重分片(reshard)过程都可以在线进行,Redis集群无须因此而停机。