Redis 클러스터는 Redis의 기본 기능 중 하나로, 자동 샤딩, 복제 및 고가용성을 지원합니다. 이전에 세넷널을 사용하여 구현되었습니다. 클러스터는 데이터세트를 여러 인스턴스 중에 자동으로 분할하고, 특정 인스턴스(특히 마스터)가 사용 불능이 되거나 다수의 노드와 통신할 수 없는 경우에도 가용성을 제공하여 파티션 발생 시 계속 작업을 수행할 수 있도록 설계되었습니다.
그러나 클러스터는 대규모 장애가 발생할 경우 중단됩니다(예: 대부분의 마스터 인스턴스가 사용 불능일 때). 또한, 마스터와 슬레이브가 동시에 실패하면 클러스터는 정상적인 작업을 계속할 수 없습니다( contrib/deploy-sentinel.sh를 사용하여 노드를 추가하거나 클러스터 레이아웃을 자동으로 변경하여 해결할 수 있습니다).
Redis 클러스터 문서에 따르면, “최소 클러스터“는 적어도 3개 이상의 마스터 노드를 포함해야 예상대로 작동합니다. 하지만 가장 적합한 설정은 적어도 6개의 노드(3개의 마스터와 3개의 슬레이브, 각 마스터는 슬레이브를 가지고 있어야 합니다).
중요: NAT 환경 또는 Docker와 같이 IP 주소나 TCP 포트가 리매핑되는 환경에서는 Redis 클러스터를 지원하지 않습니다. 또한, 모든 클라이언트 라이브러리가 지원하는 것은 아닙니다.
이 기사는 Redis 클러스터(클러스터 모드 비활성화로)를 CentOS 8에 설정하는 방법을 보여줍니다. Redis를 설치하는 방법, 클러스터 노드를 구성하는 방법, 클러스터를 생성하는 방법 및 클러스터 장애 조치 테스트가 포함되어 있습니다.
참고: 이 가이드에서는 클러스터 모드를 실행하기 위해 새로운/비어 있는 Redis 인스턴스를 사용할 것입니다. 클러스터 모드는 저희 Redis 시리즈의 처음 두 가이드에서 수행된 일부 구성으로는 작동하지 않습니다. 특히 replica 매개변수를 사용할 때 작동하지 않습니다.
전제 조건:
테스트 환경 설정
Redis Master1: 10.42.0.247 Redis Master2: 10.42.0.197 Redis Master3: 10.42.0.132 Redis Slave1: 10.42.0.200 Redis Slave2: 10.42.0.21 Redis Slave3: 10.42.0.34

저희 설정에는 3개의 읽기/쓰기 마스터 노드와 3개의 읽기 전용 레플리카 노드가 있습니다. 각 마스터에는 하나의 레플리카가 있으며, 따라서 세 개의 샤드에 모든 클러스터 데이터가 포함되어 있습니다. 응용 프로그램 API 또는 CLI 클라이언트는 마스터 노드에만 쓸 수 있지만 클러스터의 모든 노드에서 읽을 수 있습니다.
단계 1: 모든 노드에 Redis 설치
1. 모든 인스턴스에 SSH를 통해 로그인한 후 다음 명령을 실행하여 Redis 모듈을 DNF 패키지 매니저를 사용하여 설치하십시오.
# dnf module install redis
2. 그 다음, Redis 서비스를 시작하고 시스템 부팅시 자동으로 시작하도록 설정하고 실행 여부를 확인하십시오 (모든 6 인스턴스에서 서비스 확인):
# systemctl start redis # systemctl enable redis # systemctl status redis
단계 2: 모든 노드에서 Redis 인스턴스 구성
3. 이 섹션에서는 Redis 클러스터 노드를 구성하는 방법을 설명합니다. 여기에서 수행하는 구성은 모든 노드에서 수행될 수 있도록 합니다.
/etc/redis.conf 구성 파일을 사용하여 Redis 서버를 구성하십시오. 권장되는 방법으로, 편집하기 전에 원본 파일의 백업을 만들고 사용할 명령 줄 텍스트 편집기를 선택하십시오.
# cp /etc/redis.conf /etc/redis.conf.orig # vi /etc/redis.conf
4. 그 다음, 다음 구성 매개변수를 찾아 값을 편집하십시오. bind 매개변수는 Redis 서버가 수신 대기할 인터페이스를 설정합니다. 해당 값은 인스턴스 LAN IP로 설정하십시오. 클러스터 생성 프로세스의 진행, 특히 클러스터에 가입하는 단계를 지연시키는 것을 발견했기 때문에 127.0.0.1을 제거하십시오.
bind 10.42.0.247
그런 다음 protected-mode을 no
로 설정하여 클러스터의 다른 인스턴스에서의 연결을 허용하십시오.
protected-mode no
포트 매개변수는 Redis 서버가 연결을 수신 대기할 포트를 정의하며, 기본값은 6379입니다. 이는 클라이언트와의 통신을 위한 데이터 포트입니다.
port 6379

5. 다음 매개변수 세트는 클러스터 모드를 활성화하고 유용한 기능을 설정합니다. cluster-enabled 매개변수는 yes
로 설정되면 클러스터 모드를 활성화합니다.
cluster-enabled yes
그다음, cluster-config-file 매개변수는 클러스터 노드의 클러스터 구성 파일 이름을 설정합니다 (예: nodes-6379.conf). 이 파일은 작업 디렉토리에 생성되며 (기본값은 /var/lib/redis로 dir 매개변수를 사용하여 정의함), 사용자가 편집할 수 없습니다.
cluster-config-file nodes-6379.conf
다음으로 유용한 클러스터 옵션은 cluster-node-timeout입니다. 이 옵션은 인스턴스가 실패 상태로 간주되기 전에 사용할 수 없는 시간의 최대 양을 밀리초 단위로 설정하는 데 사용됩니다. 15000의 값은 15초와 동일합니다.
cluster-node-timeout 15000

6. 또한 디스크에 Redis 지속성을 활성화해야 합니다. Append Only File (AOF) 중 하나의 지속성 모드를 사용할 수 있습니다. 이 모드는 서버가 성공적으로 수신한 모든 쓰기 작업을 기록합니다 (작업 디렉토리에 생성된 appendonly.aof 파일). 데이터는 서버 시작 시 재생되어 원래 데이터 세트를 재구성합니다.
활성화하려면 appendonly 매개변수를 yes
로 설정하십시오.
appendonly yes

7. 모든 변경 사항을 적용하기 위해 모든 노드에서 Redis 서비스를 재시작하십시오.
# systemctl restart redis
8. 이 시점에서 모든 클러스터 노드는 이제 ID를 가지고 있어야합니다. 이는 /var/log/redis/redis.log에 위치한 로그 파일에서 확인할 수 있습니다.
# cat /var/log/redis/redis.log

9. 다음으로, 모든 인스턴스에서 포트 6397 및 16379을 엽니다. 후자의 포트는 클러스터 버스에 사용됩니다(바이너리 프로토콜을 사용하는 노드 간 통신 채널). 이는 Redis 클러스터 TCP 연결에 대한 기본 요구 사항입니다.
# firewall-cmd --zone=public --permanent --add-port=6379/tcp # firewall-cmd --zone=public --permanent --add-port=16379/tcp # firewall-cmd --reload
3단계: Redis 클러스터 생성
10. 클러스터를 생성하려면 다음과 같이 redis-cli 명령줄 클라이언트를 사용하십시오. --cluster create
는 클러스터 생성을 활성화하며 --cluster-replicas 1
은 각 마스터당 한 개의 레플리카를 생성한다는 의미입니다.
6개 노드가 있는 설정에서는 3개의 마스터와 3개의 슬레이브가 있습니다.
첫 번째 6개 노드는 마스터 (M)
로 간주되고 다음 세 개는 슬레이브 (S)
로 간주됩니다. 첫 번째 슬레이브인 10.42.0.200:6379는 첫 번째 마스터인 10.42.0.247:6379를 복제하고, 두 번째 슬레이브는 두 번째 마스터를 복제합니다.
다음 명령은 위의 논리적 설정을 나타내도록 형식화되었습니다.
# redis-cli --cluster create 10.42.0.247:6379 10.42.0.197:6379 10.42.0.132:6379 10.42.0.200:6379 10.42.0.21:6379 10.42.0.34:6379 --cluster-replicas 1

11. 클러스터 생성이 성공하면, 아무 호스트에서 다음 명령을 실행하십시오 (-h
플래그를 사용하여 IP 주소를 지정) 클러스터 노드를 모두 나열하기 위해.
# redis-cli -h 10.42.0.247 -p 6379 cluster nodes
아래 스크린샷에 표시된 것처럼 모든 클러스터 노드를 볼 수 있어야 합니다. 슬레이브는 그들의 마스터를 나타냅니다.

다른 필드는 다음 순서로 구성되어 있습니다: 노드 ID, IP 주소:포트, 플래그, 마지막 핑 전송, 마지막 퐁 수신, 구성 에포크, 링크 상태, 슬롯 (마스터용).
4단계: Redis 클러스터 장애 조치 테스트
12. 이 섹션에서는 클러스터 장애 조치 테스트하는 방법을 보여줍니다. 우선, 마스터 노드들을 메모해 두세요.
# redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep master

또한, Redis 슬레이브들도 메모해 두세요.
# redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep slave

13. 그다음, 마스터 노드 중 하나 (예: 10.42.0.197)에서 Redis 서비스를 중지하고 클러스터의 모든 마스터 노드들을 확인해 보세요.
# systemctl stop redis # redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep master
다음 스크린샷에서 볼 수 있듯이 노드 10.42.0.197:6367은 실패 상태이고 그의 슬레이브 10.42.0.21:6379은 마스터로 승격되었습니다.

14. 이제 실패한 노드에서 Redis 서비스를 다시 시작하고 클러스터의 모든 마스터를 확인하세요.
# systemctl start redis # redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep master

또한, 클러스터 슬레이브들을 확인하여 실패한 마스터가 이제 슬레이브인지 확인하세요.
# redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep slave

5단계: Redis 클러스터 간 데이터 복제 테스트
15. 마지막 섹션에서는 클러스터 데이터 복제를 확인하는 방법을 설명합니다. 마스터 중 하나에 키와 값을 생성한 다음 다음과 같이 클러스터 노드에서 모두 읽어보려고합니다. redis-cli 유틸리티에서 클러스터 지원을 활성화하고 클러스터 모드에서 데이터에 액세스하려면 -c
스위치를 사용하십시오.
# redis-cli -c -h 10.42.0.247 -p 6379 set name 'TecMint.com' # redis-cli -c -h 10.42.0.247 -p 6379 get name # redis-cli -c -h 10.42.0.21 -p 6379 get name # redis-cli -c -h 10.42.0.132 -p 6379 get name # redis-cli -c -h 10.42.0.200 -p 6379 get name # redis-cli -c -h 10.42.0.197 -p 6379 get name # redis-cli -c -h 10.42.0.34 -p 6379 get name

요점은 Redis 클러스터가 자동 샤딩, 복제 및 고가용성을 얻는 선호되는 방법입니다. 나머지 /etc/redis.conf 파일에는 다른 많은 문서화 된 구성 매개 변수가 있으며 공식 문서에서 자세한 정보를 찾을 수 있습니다. : Redis 클러스터 튜토리얼 및 Redis 클러스터 사양.
이로써 세 가지 부분으로 구성된 Redis 튜토리얼 시리즈를 마칩니다. 아래 피드백 양식을 사용하여 질문이나 의견을 게시 할 수 있습니다.
Source:
https://www.tecmint.com/setup-redis-cluster-in-centos-8/