redis
독립 실행형 모드는 매우 간단합니다. 단일 노드만 시작하면 되며 설치 프로세스는 5분도 채 걸리지 않습니다. redis
非常简单,你只需要启动一个单一的节点就可以了,安装过程不超过5分钟。
通过redis-benchmark
测试简单的命令,QPS
可达到10w
以上,不得不说非常的让人惊艳了。
单机模式的问题也非常明显。缺乏高可用的机制!
假如redis
进程死了,进程就只能够穿透到底层的数据库中,对业务来说非常的危险。如果你把redis
当作数据存储来用,情况会更加严重,甚至会丢失数据。
所以最基本的redis
部署,都会增加一个或者多个slave
(现在叫replication
)。
当主redis
发生问题的时候,能够选取一个slave
顶上去。
非常可惜的是,这种模式和传统的MySQL
主从一样,切换起来比较蛋疼,需要借助外部的工具,比如keepalived
等辅助进行切换,部署和维护难度直接飙升。
keepalived
是一个基于VRRP
协议来实现的高可用方案,通过 IP 漂移实现高可用。从描述上就可以看出它需要网络管理员的参与,和我们轻量级的redis
背道而驰。
哨兵模式就是使用额外的进程来替换keepalived
的功能,对redis
进程的存活性进行判断。在哨兵模式下,一旦主节点宕机,从节点作为主节点的备份可以随时顶上来。
但哨兵模式一个最大的问题,就是哨兵的数量太多,至少需要3个节点。
对redis
进行仲裁的时候,需要n/2+1
个节点投票才能确认,这也是分布式系统的一般做法 (quorum)。和Zookeeper
类似,哨兵节点做成奇数个,是非常合适的。
哨兵模式可以通过sentinel monitor
配置同时检测多套集群,在集群数量适中的时候,还是比较好用的。
但哨兵模式有很多隐藏的坑,比如哨兵的启动,必须在master
存活的情况下才能正常运行;另外,如果你的redis
配置文件中使用RENAME
屏蔽了一些危险命令时,哨兵也不能够启动。
客户端在连接redis
的时候,就不能再直接连接redis
的实例,它需要从哨兵转上一圈,以便获取一些变更信息。
集群模式可以说是这里面最优雅的方式了。你只需要部署多个对等的redis
节点,然后使用客户端命令进行组群就可以了。
ip=192.169.0.23 ./bin/redis-cli --cluster create $ip:7001 $ip:7002 $ip:7003 $ip:7004 $ip:7005 $ip:7006 --cluster-replicas 1
它对节点的要求也是比较多的,一般是采用6个节点,三主三从。一旦节点数量超过10个,协同性就会变得不太灵活,因此,单个集群的存储和性能上限也迅速达到。
集群模式的一些缺点很隐蔽。它的服务端节点倒是非常稳定了,但有些命令会严重影响性能。比如mget
,pipeline
redis-benchmark
를 통해 간단한 명령을 테스트해 보면 QPS
가 10w
이상에 도달할 수 있는데, 이는 매우 놀랍습니다. 🎜🎜싱글 플레이어 모드의 문제도 매우 명백합니다. 고가용성 메커니즘이 부족합니다! 🎜🎜 redis
프로세스가 종료되면 프로세스는 기본 데이터베이스에만 침투할 수 있으며 이는 비즈니스에 매우 위험합니다. redis
를 데이터 저장소로 사용하면 상황이 더욱 심각해지고 데이터가 손실될 수도 있습니다. 🎜🎜마스터-슬레이브 모드🎜🎜따라서 가장 기본적인 redis
배포에서는 하나 이상의 슬레이브
(현재는 복제
라고 함)를 추가합니다. 🎜🎜마스터 redis
에 문제가 발생하면 슬레이브
를 선택하여 인계받을 수 있습니다. 🎜🎜이 모드는 기존의 MySQL
마스터-슬레이브 모드와 동일하다는 점이 아쉽습니다. keepalived
와 같은 외부 도구를 사용해야 합니다. code> 등을 사용하여 전환을 지원하므로 배포 및 유지 관리의 어려움이 급증했습니다. 🎜🎜keepalived
는 IP 드리프트를 통해 고가용성을 달성하는 VRRP
프로토콜을 기반으로 하는 고가용성 솔루션입니다. 이는 우리의 경량 redis
와는 상반되는 네트워크 관리자의 참여가 필요하다는 설명을 보면 알 수 있습니다. 🎜🎜Sentinel 모드🎜🎜Sentinel 모드는 redis
프로세스의 생존 여부를 판단하기 위해 keepalived
기능을 대체하는 추가 프로세스를 사용합니다. 센트리 모드에서는 마스터 노드가 다운되면 슬레이브 노드가 마스터 노드의 백업으로 언제든지 돌아올 수 있습니다. 🎜🎜하지만 센티넬 모드의 가장 큰 문제점 중 하나는 센티넬이 너무 많아 최소 3개의 노드가 필요하다는 것입니다. 🎜🎜redis
를 중재할 때 n/2+1
노드는 투표를 통해 확인해야 합니다. 이는 분산 시스템(쿼럼)의 일반적인 관행이기도 합니다. Zookeeper
와 마찬가지로 홀수 개의 센티넬 노드를 만드는 것이 매우 적합합니다. 🎜🎜센티넬 모드는 센티넬 모니터
구성을 통해 여러 클러스터를 동시에 감지할 수 있습니다. 클러스터 수가 적당할 때 비교적 사용하기 쉽습니다. 🎜🎜하지만 센티널 모드에는 숨겨진 함정이 많이 있습니다. 예를 들어, redis
구성 파일이 활성화되어 있으면 센티넬 시작도 활성화되어 있어야 합니다. 일부 위험한 명령을 차단하기 위해 RENAME
을 사용하면 Sentinel을 시작할 수 없습니다. 🎜🎜클라이언트가 redis
에 연결되면 더 이상 redis
의 인스턴스에 직접 연결할 수 없습니다. 일부 변경 사항을 얻으려면 센티널에서 원을 만들어야 합니다. 정보. 🎜🎜클러스터 모드🎜🎜클러스터 모드는 여기서 가장 우아한 방법이라고 할 수 있습니다. 여러 피어 redis
노드를 배포한 다음 클라이언트 명령을 사용하여 그룹화하기만 하면 됩니다. 🎜rrreee🎜또한 노드가 많이 필요합니다. 일반적으로 노드 6개, 마스터 3개, 슬레이브 3개가 필요합니다. 노드 수가 10개를 초과하면 협업의 유연성이 떨어지므로 단일 클러스터의 스토리지 및 성능 제한에 빠르게 도달합니다. 🎜🎜클러스터 모드의 일부 단점이 숨겨져 있습니다. 서버 노드는 매우 안정적이지만 일부 명령은 성능에 심각한 영향을 미칩니다. 예를 들어 mget
, 파이프라인
등이 있습니다. 실행을 위해 요청을 여러 노드에 분산한 다음 이를 집계해야 합니다. 노드가 많을수록 성능이 저하됩니다. 🎜위 내용은 Redis 클러스터 모드는 무엇이며 장점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!