
VUE3.0을 빠르게 시작하는 방법:
nodejs 에서 redis 클러스터 기능을 사용하는 방법에 대해 알아 보겠습니다. 비교적 완벽하고 이해하기 쉬운 기사를 찾지 못해 개발 및 디버깅 중에 많은 우회를 하기도 했습니다. 프로세스.
이번 글에서는 로컬에서 Redis 클러스터를 구축하는 방법과 클라이언트에서 클러스터를 활용하는 방법을 자세히 소개하고, 다음 번 우회를 방지하고 개발 및 업무 효율성을 높이기 위해 구축 과정에서 겪게 되는 문제점과 오류를 요약하고 설명하겠습니다 .
클러스터를 사용하게 된 배경은 다음과 같습니다. Redis 싱글톤 모드에서 사용자 수와 방문 수가 증가함에 따라 qps 값이 급격히 상승합니까?? io 작업 수가 많아지면 cpu(100%) 동시에, 일괄 처리 Redis 및 기타 방법은 증상만 치료할 뿐 근본 원인은 해결하지 못하므로 서버 성능의 병목 현상을 해결할 수 없습니다 . 따라서 클러스터 솔루션을 사용하거나 Redis 인스턴스를 추가하는 것이 필수적입니다.
클러스터는 일반적으로 분산 시스템과 달리 여러 서버를 모아 동일한 서비스를 수행하는 서버 클러스터를 의미합니다. 클러스터는 병렬 컴퓨팅을 위해 여러 대의 컴퓨터를 사용하여 높은 컴퓨팅 속도를 달성할 수도 있으며 백업을 위해 여러 대의 컴퓨터를 사용할 수도 있으므로 시스템이 고장나더라도 전체 시스템이 계속해서 정상적으로 실행될 수 있습니다. ( redis3.0 이전에는 센티넬 모드가 일반적으로 사용되었지만 센티넬 구성이 약간 복잡하고 성능 및 고가용성은 평균 수준입니다 .)
투표 내결함성 메커니즘으로 인해 전체 노드의 절반 이상이
필요합니다.노드는 특정 노드에 장애가 발생했다고 믿습니다. 노드가 다운되어 2개의 노드가 클러스터를 구성할 수 없으므로 Redis 클러스터에는 3개 이상의 노드가 필요합니다.
클러스터의 고가용성을 보장하려면 각 노드에 슬레이브 노드(즉, 백업 노드)가 있어야 하므로 Redis 클러스터에는 최소 6개의 서버가 필요합니다. (3개의 마스터와 3개의 슬레이브, 3개의 저장 및 3개의 검색, 고가용성 및 백업)
물론 로컬에서 디버깅할 때 너무 많은 서버를 사용하는 것은 불가능하므로 실제로 6개의 redis 인스턴스를 로컬에서 실행하는 것을 시뮬레이션할 수 있습니다. 프로덕션 환경의 Redis 클러스터 빌드는 기본적으로 여기와 동일합니다.
. 공식 웹사이트에서 설치하도록 선택하거나
#install Brew install redis라는 줄을 사용하여 설치할 수 있습니다.
#redis 서버 시작 #redis 클라이언트 redis-cli를 입력합니다
먼저 redis 구성 파일의 위치를 찾아야 합니다.
brew list redis # Redis 설치 위치 확인cd /opt/homebrew/Cellar/redis/6.2.4 # 위치에 따라 버전을 입력합니다open . # 해당 폴더를 열고Xcode.app 사용하여 homebrew.mxcl.redis.plist 열어 그림과 같이 redis.conf 의 위치를 찾습니다. 아래에:

6개의 서비스 구성 파일 생성
cd /opt/homebrew/etc/ (이전 단계에서 찾은 구성 파일 디렉터리)
# /opt/homebrew/etc/ 경로에 있어야 함 mkdir -p redis/cluster/7000 mkdir -p redis/클러스터/7001 mkdir -p redis/클러스터/7002 mkdir -p redis/클러스터/7003 mkdir -p redis/클러스터/7004 mkdir -p redis/cluster/7005
구성 파일 수정
/opt/homebrew/etc/redis.conf 경로 아래의 구성 파일은 수정할 필요 없이 위에서 생성한 redis/cluster/7000 디렉터리에 복사한 후 하면 됩니다. 수정 단계는 다음과 같습니다.
cd /opt/homebrew/etc/ # 구성 파일 디렉터리를 입력합니다. cp redis.conf redis/cluster/7000/7000.conf code redis/cluster/7000/7000.conf # 수정하려면 편집기나 vim으로 구성 파일을 엽니다.
7000.conf 입력 후 다음 속성을 수정합니다# Redis 포트 번호(각 구성 파일 7000-7005를 수정해야 함) 포트 7000 # 클러스터 모드를 활성화하고 클러스터 활성화 실행 yes # 클러스터 내부 구성 파일 구성 파일 경로, 기본 node-6379.conf (각 구성 파일 7000~7005를 수정해야 함) 클러스터 구성 파일 node-7000.conf # 노드 간 통신 시간 초과 Cluster-node-timeout 5000 # 데이터 지속성 추가만 yes
cd /opt/homebrew/etc/redis/cluster # 구성 파일 디렉터리를 입력합니다. cp 7000/7000.conf 7001/7001.conf cp 7000/7000.conf 7002/7002.conf cp 7000/7000.conf 7003/7003.conf cp 7000/7000.conf 7004/7004.conf cp 7000/7000.conf 7005/7005.conf를 수정
7001.conf-7005.conf참고: 각 구성 파일은 서로 다른 port和cluster-config-file 구성해야 합니다. port和cluster-config-file 값(그렇지 않으면 클러스터가 적용되지 않음)은 포트로 구별됩니다.
구성 파일의 디렉터리는 find /opt/homebrew -name nodes-7000.conf 명령을 통해 찾을 수 있습니다.
6개의 서비스를 구성했기 때문에 하나씩 시작하거나 중지하는 것은 불가능합니다.
/opt/homebrew/etc/redis/cluster 디렉터리에 들어가서 생성
start.sh 및 중지.sh 파일
# start.sh 파일#!/bin/sh redis-서버 /opt/homebrew/etc/redis/cluster/7000/7000.conf & redis-서버 /opt/homebrew/etc/redis/cluster/7001/7001.conf & redis-서버 /opt/homebrew/etc/redis/cluster/7002/7002.conf & redis-서버 /opt/homebrew/etc/redis/cluster/7003/7003.conf & redis-서버 /opt/homebrew/etc/redis/cluster/7004/7004.conf & redis-서버 /opt/homebrew/etc/redis/cluster/7005/7005.conf & # stop.sh 파일 #!/bin/sh redis-cli -p 7000 종료 & redis-cli -p 7001 종료 & redis-cli -p 7002 종료 & redis-cli -p 7003 종료 & redis-cli -p 7004 종료 & redis-cli -p 7005 shutdown &
./start.sh 또는 ./stop.sh 실행하여 서비스를 시작하고 중지합니다.
시작된 Redis 서비스를 보려면 ps -ef |grep redis 실행합니다.
참고: ./를 실행해야 합니다. start.sh 처음으로 sudo chmod +x start.sh 통해 실행 권한을 부여합니다.
redis-cli -p 7000 # 단일 클라이언트 시작 redis-server 7000/7000.conf # 단일 서버 시작 redis-cli -p 7000 shutdown # 서버 종료 sudo chmod +x start.sh # 스크립트 실행 권한 활성화 # redis 마스터-슬레이브 관계 설정(마스터 3개와 슬레이브 3개) redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 클러스터 노드 #클러스터 노드 상태 보기(실행할 클라이언트 입력) 클러스터 정보 #클러스터 정보 보기(실행할 클라이언트 입력) 모든 키 값 보기: 키 * 지정된 인덱스의 값 삭제: del 키 전체 Redis 서버의 데이터 지우기: 플러시홀 현재 라이브러리의 모든 키 지우기: flashdb
Redis에 액세스합니다. Cluster는 이전에 구축된 6개의 Redis 서버를 사용하고 node redis.js , 클러스터의 효과를 테스트할 수 있습니다. ioredis
// redis.js
const Redis = require("ioredis");
const 클러스터 = 새로운 Redis.Cluster([
{
포트: 7000,
호스트: "127.0.0.1",
},
{
포트: 7001,
호스트: "127.0.0.1",
},
]);
Cluster.set("foo", "bar");
Cluster.get("foo", (err, res) => {
// res === '바'
}); 'bull'에서 대기열 가져오기
// Redis 큐 인스턴스 생성 const 인스턴스 = new Queue('custom', {
접두사: '{myprefix}',
createClient(유형) {
// 클러스터 클러스터 인스턴스는 위와 동일합니다. 반환 클러스터
}
})
//redis 큐(생산자)에 데이터 추가
인스턴스.추가(
'요구',
{
...매개변수
},
{
제거OnComplete: 거짓
}
).catch(e => {
콘솔.오류(e)
})
// 소비자 콜백 instance.process('request', 5, async (job, done) => {
console.log('현재 사용된 데이터 가져오기:', job.data)
//비동기 작업 수행 new Promise((resolve)=>resolve()) 대기
완료()
}) bull 프레임워크를 사용하여 ioredis 클러스터에 연결할 때 문제가 있습니다. 데이터가 redis 대기열에 push 때마다 해당 콜백 함수가 여러 번 트리거될 수 있으며 현재로서는 문제인지 판단하는 것이 불가능합니다. 프레임워크 자체의 사용이나 문제(자세한 내용을 아시는 분은 모두 환영합니다. 메시지를 남겨주세요).
클러스터링의 대안: 데이터 동기화 및 데이터 마이그레이션이 필요하지 않은 경우 클라이언트에서 여러 redis 인스턴스를 사용하고 Math.random() 과 결합하여 데이터를 redis 중 하나로 균등하게 나누어 단일 인스턴스 하드웨어 문제를 해결할 수 있습니다. ( cpu 등) 병목 현상 문제.
1. Mac 시스템에서 redis에 접속하면 오류가 발생하나요?
콘솔 오류 메시지: 127.0.0.1:6379에서 Redis에 연결할 수 없습니다. 연결이 거부되었습니다.
이유: 서버가 시작되지 않았거나 시작하지 못했습니다.
해결 방법: 먼저 Redis 서버를 시작해야 합니다. Redis-서버
참조 링크
https://blog. csdn.net/qq_23347459/article/details/104257529
2. 클라이언트를 시작할 때 읽거나 쓸 때 오류가 보고됩니까?
오류 메시지: ClusterAllFailedError: 슬롯 캐시를 새로 고치지 못했습니다.
이유: 각 서비스 아래 구성 파일의 클러스터 구성 파일 속성이 일관됩니다.
처리: 고유 속성 값으로 수정
참조 링크 1
https://stackoverflow.com/questions/57350961/ioredis-clusterallfailederror-failed-to-refresh-slots-cache
참조 2
https://github.com/luin/ioredis/issues /711
3. create master-slave redis 문을 실행하지 못했습니다.
명령문 실행: redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
프롬프트 오류: [ERR] Node 127.0.0.1:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0
: create 문을 실행할 때 데이터가 지워지지 않고 클러스터가 재설정되지 않습니다.
처리:
데이터 지우기 및 클러스터 재설정, rdb 및 aof 파일 지우기,
redis 데이터 지우기 참조
https://stackoverflow.com/questions/37206993/redis-server-cluster-not-working
# 포트 7000의 서비스 가져오기 예를 들어, 7001-7005 $redis-cli -p 7000에 대해 다음 작업을 반복합니다. 127.0.0.1:7000> 플러시홀 127.0.0.1:7000> 클러스터 재설정 127.0.0.1:7000>종료 # rdb 및 aof 파일을 찾으려면 find를 사용하십시오(역시 rdb 디렉토리에 있음). /opt/homebrew -name dump.rdb를 찾으세요. # create 문을 성공적으로 다시 실행합니다. redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1: 7005
클라이언트에서 redis 클러스터를 사용하는 것은 매우 간단합니다. 이에 비해 서버의 구성은 더 번거롭습니다.
클라이언트의 구체적인 용도는 간략하게만 설명합니다. 사용 중에는 Redis 데이터의 동기화 및 마이그레이션과 같은 문제에 주의를 기울여야 합니다.
클러스터를 사용하면 서비스 기능이 향상될 수 있지만 마스터-슬레이브 복제, 센티널 모드, 읽기-쓰기 분리를 지원하고 서버에 대한 부담을 고르게 분산시키는 등의 작업을 수행합니다. 그러나 자동 내결함성 및 복구 기능은 없습니다. 다운타임이 발생하면 일부 읽기 및 쓰기 요청이 실패하여 시스템 가용성이 저하됩니다. 사용시 비즈니스 상황에 따라 다양한 솔루션을 분석하고 선택하십시오.
이 기사는 https://juejin.cn/post/7079928963107127327에서 복제되었습니다.
작가: tager