Redis에서 2개의 EC2 서버로 Replication을 진행하려고 했는데
서비스가 떠있음에도 불구하고 통신이 안되는 문제점이 있었다
상황
1. AWS EC2 2개의 인스턴스를 사용하고 각각 인스턴스에 Redis 설치 후 Replication 을 사용하려고 했음
2. 같은 보안그룹 설정하고 6379 port를 열였는데 EC2 <-> EC2 끼리 통신이 안되는 현상 -> Replication 실패
점검
첫번째 EC2 와 두번째 EC2는 같은 보안그룹을 사용하고 아래와 같이 6379 포트를 허용해줬다
첫번째 EC2 인스턴스(my-first-redis)에서
ps -ef | grep 6379
명령어로 redis 프로그램 실행 확인
두번째 EC2 인스턴스(my-second-redis)에서
ps -ef | grep 6379
명령어로 redis 프로그램 실행 확인
my-first-redis, my-second-redis에 redis가 둘 다 프로세스가 떠 있지만
telnet 을 사용해 확인해보니 my-first-redis -> my-second-redis 로 6379 통신이 실패한 것을 알 수 있다.
해결
원인은 redis 자체의 bind 된 IP 때문
vi /etc/redis/redis.conf
를 실행하여 redis config 파일을 열어준다
<before>
<after>
bind 부분을 찾아 127.0.0.1 -> 0.0.0.0 으로 위의 이미지 처럼 수정한다
- 127.0.0.1 : 자기 자신(my-second-redis)
- 0.0.0.0 : 모든 IPv4 주소 의미
0.0.0.0으로 바꾸는 이유는 다른 서버와 통신하기 위해서!
위의 과정을 첫번째 EC2, 두번째 EC2 모두 적용 후 재시작을 한다
service redis restart
다시 첫번째 EC2 -> 두번째 EC2 로 telnet 을 시도한다
telnet 172.31.39.103 6379
위의 이미지처럼 정상 통신되는 것을 확인할 수 있다
첫번째 EC2(my-first-redis)가 master, 두번째 EC2(my-second-redis) 가 slave 역할이기 때문에 두번째 EC2(my-second-redis) 에서 replication 을 설정한다
redis-cli
를 입력 후
replicaof 172.31.47.242 6379
-> replicaof master private IP 6379
처럼 정상으로 설정된 것을 확인할 수 있다.
'Database > Redis' 카테고리의 다른 글
[Redis] Redis의 구조 (0) | 2023.05.30 |
---|---|
[Redis] Redis란? Redis의 기본 개념 (0) | 2023.05.30 |