Redis,一款非常流行的键值对型内存数据库,最初是以单实例形式使用的。不仅可以代替Memcache,同时保有Memcache所不具备的一些特性;它可以处理大量的数据、支持各种数据结构(如hash、set、list、sorted set),这些特性使得Redis受到越来越多开发者的欢迎。
但是,单机性能有限,对于应对高并发、海量数据处理,当系统负载增加,单实例就无法很好地承受;此外,单机模式也无法有效地实现高可用保证。
那么,如何解决单实例的限制及实现高可用?这时,出现了像Sentinel,RedisCluster 等解决方案,可以有效地解决这些问题。
其中,Sentinel 可以实现“主从”模式,通过封装原生的Redis协议, Sentinel 能够实现Redis集群的监控、自动故障恢复;此外,Sentinel也能够完成Master的发现、子节点同步、故障转移等。
sentinel.conf
port 26379
sentinel myid 0de9675071cf452bb8378d4712d72868
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel flover-timeout mymaster 180000
sentinel auth-pass mymaster redis-pass
如上配置中所示,Sentinel 会对Redis实例进行监控,当Redis实例超时或异常,Sentinel 会根据自定义的条件启动备用的Redis实例;如果原实例恢复,Sentinel 会恢复原实例,达到一种高可用的效果。通过 Sentinel 方式,可以有效的完善Redis的高可用,在故障发生的情况下,也能保证客户端的数据接收、保存不会出现异常。
另外,RedisCluster也可以实现 Redis 集群的功能,它使用分片技术,通过副本来保证集群中数据的安全;同时,RedisCluster也支持节点的动态添加、删除和高可用,将原本受单节点性能及安全性限制的应用改造成多节点组成的集群系统,从而可以有效提高应用的并发能力、处理性能和可用性。
从单实例到高可用,Redis 越来越完善,更受开发者的青睐。比如,多节点的特性可以支持更多类型的数据,更大的容量,更大的容量,更便捷的管理方式,让Redis变得更加强大,也能更好的满足客户的需求。