웹사이트 검색

CentOS 8에서 Redis 클러스터를 설정하는 방법 - 3부


Redis 클러스터는 이전에 Sentinels를 사용하여 구현되었던 자동 샤딩, 복제 및 고가용성을 지원하는 내장 Redis 기능입니다. 이는 두 가지 주요 목적으로 설계되었습니다. 하나는 데이터 세트를 여러 인스턴스로 자동 분할하고, 두 번째는 파티션 중에 어느 정도 가용성을 제공하고, 일부 인스턴스(특히 마스터)가 실패하거나 대부분의 인스턴스와 통신할 수 없는 경우 작업을 계속하는 것입니다. 클러스터의 노드.

그러나 대규모 장애가 발생하는 경우(예: 대부분의 마스터 인스턴스를 사용할 수 없는 경우) 클러스터 작동이 중지됩니다. 또한 마스터와 슬레이브가 동시에 실패하면 클러스터는 정상적인 작업을 계속할 수 없습니다(해결 방법은 더 많은 노드를 추가하거나 클러스터에 비대칭을 만들어 클러스터 레이아웃을 자동 변경하는 것임).

Redis 클러스터 문서에 따르면 예상대로 작동하는 '최소 클러스터'에는 마스터 노드가 3개 이상 포함되어야 합니다. 그러나 고가용성을 위한 가장 적합한 설정에는 3개의 마스터와 3개의 슬레이브가 있는 최소 6개의 노드가 있어야 하며 각 마스터에는 슬레이브가 있습니다.

중요: Redis 클러스터에는 NAT 연결 환경과 IP 주소 또는 TCP 포트가 다시 매핑되는 환경에 대한 지원이 부족한 몇 가지 제한 사항도 있습니다. Docker 아래의 인스턴스입니다. 또한 모든 클라이언트 라이브러리가 이를 지원하는 것은 아닙니다.

이 문서에서는 CentOS 8에서 Redis 클러스터(클러스터 모드 비활성화)를 설정하는 방법을 보여줍니다. 여기에는 Redis 설치, 클러스터 노드 구성, 클러스터 생성 및 클러스터 장애 조치 테스트 방법이 포함됩니다.

참고: 이 가이드에서는 새로운/빈 Redis 인스턴스를 사용하여 클러스터 모드를 실행합니다. 클러스터 모드는 Redis 시리즈의 처음 두 가이드에서 수행된 일부 구성에서는 작동하지 않으며, 특히 매개변수의 복제본이 사용될 때는 작동하지 않습니다.

전제 조건:

  1. CentOS 8이 설치된 서버

테스트 환경 설정

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개의 읽기 전용 복제본 노드가 있으며 각 마스터에는 하나의 복제본이 있으므로 3개의 샤드에는 각 노드의 모든 클러스터 데이터가 포함됩니다. 애플리케이션 API 또는 CLI 클라이언트는 마스터 노드에만 쓸 수 있지만 클러스터의 모든 노드에서 읽을 수 있습니다.

1단계: 모든 노드에 Redis 설치

1. SSH를 통해 모든 인스턴스에 로그인한 후 다음 명령을 실행하여 표시된 대로 DNF 패키지 관리자를 사용하여 Redis 모듈을 설치합니다.

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

그런 다음 보호 모드no로 설정하여 클러스터의 다른 인스턴스로부터의 연결을 허용합니다.

protected-mode no

포트 매개변수는 Redis 서버가 연결을 수신할 포트를 정의하며 기본값은 6379입니다. 클라이언트와 통신하기 위한 데이터 포트입니다.

port 6379

5. 다음 매개변수 세트는 클러스터 모드를 활성화하고 유용한 기능 중 일부를 설정합니다. cluster-enabled 매개변수를 yes로 설정하면 클러스터 모드가 활성화됩니다.

cluster-enabled yes

다음으로, cluster-config-file 매개변수는 클러스터 노드의 클러스터 구성 파일 이름을 설정합니다(예: nodes-6379.conf). 파일은 작업 디렉토리(기본값은 dir 매개변수를 사용하여 정의된 /var/lib/redis)에 생성되며 사용자가 편집할 수 없습니다.

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. 다음으로 모든 인스턴스에서 포트 639716379를 엽니다. 이후의 포트는 클러스터 버스(바이너리 프로토콜을 사용하는 노드 간 통신 채널)에 사용됩니다. 이는 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)로 간주되고 다음 3개 노드는 슬레이브 (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 클러스터 사양에서 확인할 수 있습니다.

이로써 3부로 구성된 Redis 튜토리얼 시리즈가 끝났습니다. 아래 피드백 양식을 사용하여 질문이나 의견을 게시할 수 있습니다.