当redis集群中的主节点宕机时,redis会等待节点超时将从节点升级为主节点。奴隶晋升为主人可能需要额外的时间。在主服务器从服务器升级到主服务器的过程中,写/读操作,尤其是写操作将失败。如何确保零停机时间?
ghhkc1vu1#
我认为这是大多数数据库的常见问题。假设您有一个mongo replicaset,master出现故障,需要一段时间才能升级从属服务器,并且会丢失写入,mongo shard或mysql也是如此。即使redis能够提供一个即时的故障转移(这是不可能的),你的写操作也不能得到保证,除非你在每一个操作上都使用aof和write-to-disk,但是这会非常慢,并且会破坏redis的整体功能。为了更好地保证写操作,一个解决方案是将数据推送到一个队列,比如kafka,并异步地写入redis或任何其他数据存储。但是,接着又引入了一个堆栈,我们还必须担心它的故障转移。所以,我认为我们应该试着把redis当作一个缓存,而不是一个永久的数据存储。
1条答案
按热度按时间ghhkc1vu1#
我认为这是大多数数据库的常见问题。假设您有一个mongo replicaset,master出现故障,需要一段时间才能升级从属服务器,并且会丢失写入,mongo shard或mysql也是如此。
即使redis能够提供一个即时的故障转移(这是不可能的),你的写操作也不能得到保证,除非你在每一个操作上都使用aof和write-to-disk,但是这会非常慢,并且会破坏redis的整体功能。
为了更好地保证写操作,一个解决方案是将数据推送到一个队列,比如kafka,并异步地写入redis或任何其他数据存储。但是,接着又引入了一个堆栈,我们还必须担心它的故障转移。
所以,我认为我们应该试着把redis当作一个缓存,而不是一个永久的数据存储。