1. Redis内部实现
1.1. 多机数据库
主从复制:通过主从数据复制,以解决主数据丢失可以从备那恢复,具体实现见主从复制实现章节。
Sentinel监控:监控主从服务器状态,并当主故障下线后将从升为新主。
集群分片(shard N):根据key的hash值,将key-val存入不同分片节点,实现负载分担。
三者关系:
1.1.1. 主从复制
RedisReplication的特点和优势:
(1)同一个Master可以同步多个Slaves。
(2)Slave同样可以接受其它Slaves的连接和同步请求,这样可以有效的分载Master的同步压力。因此我们可以将Redis的Replication架构视为图结构。
(3)Master Server是以非阻塞的方式为Slaves提供服务。所以在Master-Slave同步期间,客户端仍然可以提交查询或修改请求。
(4)Slave Server同样是以非阻塞的方式完成数据同步。在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据。
(5)为了分载Master的读操作压力,Slave服务器可以为客户端提供只读操作的服务,写服务仍然必须由Master来完成。即便如此,系统的伸缩性还是得到了很大的提高。
(6)Master可以将数据保存操作交给Slaves完成,从而避免了在Master中要有独立的进程来完成此操作。
1.1.2. Sentinel监控
Sentinel只是一个运行在特殊模式下的Redis服务器,使用不同的命令表。
一般情况下,Sentinel以每10秒1次向被监控的主服务器和从服务器发送INFO命令,当主服务器处于下线状态,或者Sentinel正在对主服务器进行故障迁移操作时,Sentinel向从服务器发送INFO命令的频率会改为每秒1次。
Sentinel只会与主服务器和从服务器建立命令连接和订阅连接,Sentinel和Sentinel之间只创建命令连接。
1.1.3. 集群分片(shard N)
总共16384个slot。
案例:某公司集群部署:
1. Redis节点: 8台物理机;每台128G内存;每台机器上8个instance
2. Sentienl:3台虚拟机
集群方案:
Redis Node由一组Redis Instance组成,一组Redis Instatnce可以有一个Master Instance,多个Slave Instance
章节回顾
命令:cluster MEET <ip> <port> 新增node
…] 为node分配slot