作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。
MySQL
PostgreSQL
Redis(本章节)
Etcd
前面我们介绍了哨兵原理及部署,哨兵解决的是Redis高可用,今天我们来介绍类似MongoDB的的分片集群的Redis集群。Redis 集群是 Redis 官方提供的分布式解决方案,它通过数据分片(Sharding) 和主从复制(Replication) 来实现高可用性和横向扩展。
这是 Redis 集群最核心的机制。
CRC16(key) % 16384。客户端如何知道某个键在哪个节点上?有两种模式:
MOVED 3999 192.168.1.2:6381)。这是通过主从复制和 Raft 思想共识来实现的。
cluster-node-timeout 时间内未收到节点 B 的 PONG 回复,则节点 A 将节点 B 标记为“疑似下线”。使用 redis-cli --cluster reshard 命令可以安全地将哈希槽从一个节点迁移到另一个节点。
MSET, MGET),必须确保所有键位于同一个节点(即属于同一个哈希槽)。可以使用“哈希标签”来强制将不同的键分配到同一个槽。SELECT 命令选择多个数据库。INTER, SUNION 等涉及多个键的命令。 +-------------------------------------+
| Redis Cluster |
| (Logical 16384 Slots) |
+-----+-----------+-----------+-------+
| | |
+-------+-----+ +---+----+ +----+------+
| Master 1 | |Master 2| | Master 3 |
| (Slots 0-5k)| |(5k-10k)| |(10k-16383)|
+-------+-----+ +---+----+ +----+------+
| | |
+-------+-----+ +---+----+ +----+------+
| Slave 1 | | Slave 2| | Slave 3 | (Replicas)
+-------------+ +--------+ +-----------+
客户端可以连接任意节点。
节点间通过Gossip协议(PING/PONG)通信。