>  기사  >  데이터 베이스  >  Redis 클러스터 모드는 무엇이며 장점은 무엇입니까?

Redis 클러스터 모드는 무엇이며 장점은 무엇입니까?

WBOY
WBOY앞으로
2023-05-28 11:44:101062검색

독립 실행형 모드

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를 통해 간단한 명령을 테스트해 보면 QPS10w 이상에 도달할 수 있는데, 이는 매우 놀랍습니다. 🎜🎜싱글 플레이어 모드의 문제도 매우 명백합니다. 고가용성 메커니즘이 부족합니다! 🎜🎜 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제