1. 什么是主从复制?
主从复制是指在 Redis 中可以通过配置一个 Redis 实例为主节点,其他 Redis 实例为从节点,主节点会将自己的数据同步到所有从节点。这种模式的好处是可以将读操作分摊到多个从节点上,减轻主节点的负载压力。
主从复制的实现方式可以通过在 Redis 配置文件中设置 slaveof 参数。比如以下配置表示将本机 Redis 设置为从节点,主节点为 192.168.0.2,端口为 6380:
slaveof 192.168.0.2 6380
当主节点发生数据变化时,从节点会自动同步数据。如果从节点宕机,主节点会将同步数据的队列保存下来,等到从节点恢复时再进行同步。
2. 主从复制的使用场景
主从复制的使用场景一般是在读多写少的应用中,将读操作分摊到多个从节点上,减轻主节点的负载压力。比如在电商网站中,商品详情页的访问量非常高,可以将主节点用于写操作(比如更新商品信息),多个从节点用于读操作(比如根据商品 ID 查询商品信息)。
同时,由于从节点也是一个完整的 Redis 实例,所以可以通过提高从节点的数量来提高系统的可用性和容错能力。比如在两个数据中心之间进行主从复制同步,可以在遇到一方发生宕机时,快速切换到另一方的主节点,从而保证系统的可用性。
3. 什么是哨兵模式?
哨兵模式是在主从复制的基础上,增加了自动容错和故障恢复的功能。在 Redis 中配置一个或多个哨兵节点,每个哨兵节点会监控所有主节点的运行状况。当哨兵节点发现某个主节点宕机时,会自动从从节点中选出新的主节点,然后通知其他从节点进行切换。
哨兵模式的实现方式是运行一个或多个 redis-sentinel 进程监听某个主节点的运行状况。每个哨兵节点都会对主节点进行心跳检测,如果发现主节点宕机或者下线,就会通过选举算法选出新的主节点,然后进行切换。
在哨兵模式中,主节点和从节点的角色是动态变化的。当哨兵节点发现主节点宕机时,会选举一个从节点作为新的主节点,其他从节点都会变成新的从节点。同时,在切换期间,哨兵节点还可以自动将日志数据同步到新的主节点,保证数据的一致性。
4. 哨兵模式的使用场景
哨兵模式的使用场景一般是在对高可用性要求极高的系统中。比如对于金融交易系统、医疗设备控制系统等,一旦发生故障,就会造成严重的后果。此时可以通过哨兵模式保证系统的高可用性和容错能力。
在实际应用中,可以通过部署多个哨兵节点来提高系统的可用性和容错能力。如果有 N 个主节点,则可以部署 2N+1 个哨兵节点,其中至少需要保证 N+1 个哨兵节点处于可用状态,才能保证系统的正确运行。在选举新的主节点之前,这些哨兵节点需要达成一致意见,确保选出的新主节点能够达到目的,避免因选举不当导致的数据不一致或者系统故障。