背景
Redis 是一个流行的 in-memory 数据库,广泛应用于 Web 开发中,但当 Redis 出现故障时,需要手动重启服务器,对稳定性和可用性带来了挑战。因此 Redis 在 2.8 版本之后引入了哨兵模式,可以实现自动故障转移。
什么是 Redis 哨兵模式
Redis 哨兵模式是一种自动发现 Redis 服务器,并在主服务器出现故障时自动切换到 Redis 从服务器的技术。哨兵模式包括一个或多个哨兵进程和每个 Redis 数据库(包括主数据库和从数据库)的实例。哨兵有选择合适的从数据库进行自动故障转移的权利。
哨兵模式由哨兵进程和 Redis 实例组成,哨兵进程充当自动监控、配置、维护Redis 集群的角色。
Redis 哨兵模式如何工作
Redis 哨兵模式架构
- 主服务器:单个 Redis 数据库实例,用于读写操作,可以有从服务器( slave)。
- 从服务器:单个 Redis 数据库实例,用于备份主服务器数据,不能进行写操作。一个主可有多个从。
- 哨兵:作为独立的进程运行,自动交互和通讯,执行自动故障转移以及重新配置Redis 集群。
哨兵工作方式
哨兵进程默认五秒钟检查一次 Redis 主服务器是否可用,当 Redis 主服务器不可用时,哨兵通过判断哨兵进程已经达成的共识来判断是否需要启用其中一个从数据库作为臨时主数据库。当一个从 database 在哨兵进程共同选择的过程中被选为新的主数据库时,这个从 database 就会向其他的从 database 发送消息,切换到新的主数据库,然后这个数据库就转为从数据库,因此实现了自动故障转移。
Redis 哨兵模式示例代码
连接Redis 主服务器
const redis = require('redis'); const client = redis.createClient({ host: 'localhost', port: 6379, password: 'password' })
哨兵的启动
-- -------------------- ---- ------- ----- ----- - ----------------- ----- -------- - -------------------- ----- ------ ----- ----------- -- ----- ---------- - ----------- ----- -------- - ----------- ----------------------- ---------------------- ---------- - ---------------------- -- ----------- --------------------------------- ------------ ------------- -------- - -- ----- ----- ---- --------------------------- - -- ------- --- ----------- - --------------- - --- ---------------- --- ---
连接 Redis 从数据库
const redis = require('redis'); const client = redis.createClient({ host: 'localhost', port: 6380, password: 'password' })
发布消息
client.publish('testChannel1', 'Hello Redis Sentinel!')
订阅消息
client.subscribe('testChannel1'); client.on("message", (channel, message) => { console.log(`Received '${message}' from channel '${channel}'`); });
总结
Redis 哨兵模式是值得前端开发者深入学习的一项技术。本文从技术角度分析了 Redis 哨兵模式的实现原理,并提供了 Node.js 的代码示例。希望能对前端开发者在解决 Redis 故障转移时提供有效的指导。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/648a6b1748841e989488d9ad