728x90
반응형
Sentinel 의 CPU 사용률이 비정상적으로 튀는현상이 발생했다.
Sentinel Log 를 확인해보니 아래와 같다.
1:X 15 Nov 2024 06:47:20.330 # +tilt #tilt mode entered
1:X 15 Nov 2024 06:47:20.330 # waitpid() returned a pid (924) we can't find in our scripts execution queue!
1:X 15 Nov 2024 06:47:50.401 # -tilt #tilt mode exited
1:X 15 Nov 2024 06:50:12.123 # +tilt #tilt mode entered
1:X 15 Nov 2024 06:50:12.123 # waitpid() returned a pid (1385) we can't find in our scripts execution queue!
1:X 15 Nov 2024 06:50:42.152 # -tilt #tilt mode exited
1:X 15 Nov 2024 06:55:06.731 # +tilt #tilt mode entered
1:X 15 Nov 2024 06:55:06.732 # waitpid() returned a pid (2181) we can't find in our scripts execution queue!
1:X 15 Nov 2024 06:55:36.740 # -tilt #tilt mode exited
1:X 15 Nov 2024 06:57:56.515 # +tilt #tilt mode entered
1:X 15 Nov 2024 06:57:56.515 # waitpid() returned a pid (2640) we can't find in our scripts execution queue!
1:X 15 Nov 2024 06:58:26.583 # -tilt #tilt mode exited
1:X 15 Nov 2024 06:59:09.203 # +tilt #tilt mode entered
1:X 15 Nov 2024 06:59:09.203 # waitpid() returned a pid (2842) we can't find in our scripts execution queue!
1:X 15 Nov 2024 06:59:39.223 # -tilt #tilt mode exited
1:X 15 Nov 2024 06:59:54.228 # +tilt #tilt mode entered
1:X 15 Nov 2024 06:59:54.228 # waitpid() returned a pid (2965) we can't find in our scripts execution queue!
1:X 15 Nov 2024 07:00:24.277 # -tilt #tilt mode exited
1:X 15 Nov 2024 07:01:11.484 # +tilt #tilt mode entered
1:X 15 Nov 2024 07:01:11.484 # waitpid() returned a pid (3168) we can't find in our scripts execution queue!
1:X 15 Nov 2024 07:01:41.538 # -tilt #tilt mode exited
1:X 15 Nov 2024 07:02:32.211 # +tilt #tilt mode entered
1:X 15 Nov 2024 07:02:32.211 # waitpid() returned a pid (3384) we can't find in our scripts execution queue!
1:X 15 Nov 2024 07:02:42.275 # +tilt #tilt mode entered
1:X 15 Nov 2024 07:02:42.276 # waitpid() returned a pid (3411) we can't find in our scripts execution queue!
1:X 15 Nov 2024 07:03:11.999 # +tilt #tilt mode entered
1:X 15 Nov 2024 07:03:11.999 # waitpid() returned a pid (3492) we can't find in our scripts execution queue!
1:X 15 Nov 2024 07:03:42.035 # -tilt #tilt mode exited
아래와 같은 메세지가 반복적으로 발생한다.
이 에러는 Sentinel이 tilt 모드에 들어갔다가 다시 정상 모드로 복귀하는 과정을 반복하고 있다는 에러이다.
+tilt #tilt mode entered
-tilt #tilt mode exited
tilt 모드란?
tilt 모드는 Redis Sentinel에서 특정 비정상 상태를 감지했을 때 Failover 같은 중요한 작업을 잠시 중단하도록 설계된 안전장치이다.
일반적으로 다음과 같은 상황에서 발생한다.
- Sentinel이 재시작된 직후
- Sentinel이 재시작되면 최근 데이터를 기반으로 시스템을 안정화하려고 tilt 모드에 들어간다.
- 시스템 클럭 문제
- 클럭 드리프트(시간 동기화 문제) 또는 클럭 조작이 감지되면 tilt 모드에 진입한다.
- 네트워크 불안정
- 네트워크 연결이 불안정하거나 Redis 마스터/슬레이브 노드와의 통신이 불완전할 때 발생할 수 있다.
tilt 모드가 실행되는 동안
- Sentinel은 Failover 같은 작업을 일시적으로 멈추고 안정성을 확보한다.
- 일정 시간이 지나면 tilt 모드에서 벗어난다.
원인 분석
tilt 모드 반복 진입/해제
- Sentinel이 주기적으로 tilt 모드에 들어갔다가 빠져나오고 있다.
- 이는 시스템 환경의 불안정, Sentinel 재시작, 또는 클러스터 노드와의 통신 문제를 나타낸다.
waitpid() 에러
- Sentinel이 Failover 시 실행한 스크립트 프로세스를 추적하지 못했다는 뜻이다.
- 이는 Sentinel에서 스크립트를 실행하는 환경의 문제(스크립트 경로, 권한, 리소스 부족 등)를 나타낼 수 있다.
해결 방안
myValues.yaml 파일에 useHostnames 옵션을 비활성화 했다. ( )
useHostnames의 역할
useHostnames: true
Redis Sentinel은 노드 간 통신 시 호스트네임을 사용합니다.예: soobin-redis-node-2.soobin-redis-headless.soobin.svc.cluster.local이 설정은 클러스터 노드가 호스트네임 기반 DNS를 통해 서로를 찾도록 유도합니다.
useHostnames: false
Redis Sentinel은 노드 간 통신 시 IP 주소를 사용합니다.예: 192.168.1.100이는 DNS를 우회하고 직접 IP를 사용하여 통신하도록 합니다.
장단점
1. useHostnames: true
장점: DNS를 사용하므로, 환경 변화(예: IP 변경)에 대응하기 쉽습니다.특히 Kubernetes 환경에서 서비스 디스커버리를 활용할 때 유리합니다.
단점:
DNS가 제대로 설정되지 않거나 작동하지 않으면 연결 문제가 발생할 수 있습니다.Sentinel이 마스터 또는 슬레이
브를 감지하지 못하거나 tilt 모드로 진입할 가능성이 높아집니다.
2. useHostnames: false
장점:
DNS를 우회하고 IP 주소로 직접 통신하므로, DNS 관련 문제를 완전히 배제할 수 있습니다.단순한 네트워크 환경에서는 더 안정적으로 동작합니다.
단점:
IP 주소가 변경되면 통신 문제가 발생할 수 있습니다.Kubernetes와 같은 동적 환경에서는 적합하지 않을 수 있습니다(클러스터 노드가 재배치되면 IP가 변경될 가능성이 있음).
useHostnames: false
하지만 useHostnames 옵션을 false 로 하니 DNS 를 사용하지 않기 때문에 Redis 를 참조하는 Application 에서 에러가 나기 시작했다.
useHostnames: true
다시 true 로 변경 후 재기동하니 같은 에러는 없어졌다..
추후에 모니터링 해본 후 같은 에러가 나면 이어서 작성하겠다.
728x90
반응형
'개발중 > Redis' 카테고리의 다른 글
[Redis] Sentinel tilt mod Error 해결 : 버전문제 (0) | 2024.12.20 |
---|---|
Redis Pub/Sub 에 대해서 알아보기. (0) | 2024.09.24 |
[트러블 슈팅] Headless Service 에 대한 오해 (1) (0) | 2023.09.18 |
고성능을 위한 Redis (High Availability, HA)와 Kubernetes 구축 마스터 가이드 (Spring Session storage 설정까지) (1) | 2023.09.18 |
[트러블슈팅] Could not connect to Redis at 127.0.0.1:6379: Connection refused (0) | 2023.09.12 |