Redis-cluster集群
1 | Redis3.0引入的分布式存储方案 |
2 | 集群由多个node节点组成,redis数据分布在节点之中,在集群之中分为主节点和从节点 |
3 | 集群模式当中,主从一一对应,数据写入和读取与主从模式一样,主负责写,从只能读 |
4 | 集群模式自带哨兵模式,可以自动实现故障切换,但是故障切换完成之前,整个集群都将不可使用,切换完毕之后,集群会立即恢复 |
集群的作用
集群有个特殊的地方,集群模式按照数据分片来的 | ||
1 | 数据分区 | 是集群的核心功能,每个主都可以对外提供读和写的功能,但是数据是一一对应写入主的对应从节点,在集群模式中,可以容忍数据的不完整 |
2 | 高可用 | 高可用是集群的主要目的 |
数据分片如何实现
1 | redis的集群引入了哈希槽的概念,redis集群当中共有16384个哈希槽位,从0开始计算 (0-16383) |
2 | 根据集群当中主节点数,分配哈希槽,每个主从节点只负责一部分的哈希槽位 |
3 | 每次读写都涉及到哈希槽位,key通过CRC16(校验机制)校验之后,对16384取余数,余数值决定数据放入哪个哈希槽位,通过这个值去找到对应槽位所在节点,然后直接跳转到这个节点进行存取操作 |
redis-cluster集群主从复制
1 | 主宕机之后,主节点原来负责的哈希槽位将会不可用,需要从节点代替主节点继续负责原有的哈希操作,保证集群正常工作 |
2 | 这也是故障切换的过程中,会提示集群不可用的原因,切换完成之后,集群恢复后继续工作 |
在集群模式当中,只能选择0号库,集群是不能切库的 |
集群流程
1 | 集群自带主从复制和哨兵模式 |
2 | 每个主节点之间互相间隔,可以容忍数据的不完整,核心目的就是为了实现高可用 |
3 | 哈希槽位决定每个节点的读写操作,在创建key时,系统已经分配好了指定槽位 |
4 | 面试题 MOVED不是报错,只是提醒客户端去分配好的槽位节点,获取数据 |
#6台redis同时操作,用多重执行
nginx实现代理
在nginx节点配置,实现负载均衡!
stream {
upstream redis_cluster {
server 192.168.233.7:6379;
server 192.168.233.8:6379;
server 192.168.233.9:6379;
}
server {
listen 6379;
proxy_pass redis_cluster;
proxy_connect_timeout 1s;
proxy_timeout 1s;
proxy_responses 1;
}
}
nginx代理
Proxy_responses 1; | 在集群之中只要有一个节点相应,然后代理服务器就会把响应传递给客户端,可以增加整个系统的稳定性,只要有一个节点响应,那么客户端就可以继续发起请求,不会因为某个节点失效,导致整个请求失效 |
nginx是否可以提供多端口服务 | 可以提供多端口服务 |