[ Redis 레프리카 서버 만들기 ]
이용하고 있던 Redis EC2의 이미지를 복제하여 새로운 인스턴스를 생성해주었다.
복제한 레디스의 정보를 확인해보자.
redis-cli info
Role설정이 master로 되어있는 것을 확인할 수 있다. 이를 replica로 설정해주자.
replicaof (사설 IP) (포트번호)
Ex ) replicaof 172.1.1.1 6379
다시 info를 입력하여 확인해보면 slave로 바뀐 것을 확인할 수 있다. 하지만 master_link_status: down임을 확인할 수 있다.
/var/log/redis/redis-server.log의 기록을 살펴보면 다음과 같이 Connection refused가 발생하고 있음을 알 수 있다.
3291:S 11 Nov 2023 16:26:32.165 * Connecting to MASTER 172.31.43.174:6379
3291:S 11 Nov 2023 16:26:32.165 * MASTER <-> REPLICA sync started
3291:S 11 Nov 2023 16:26:32.165 # Error condition on socket for SYNC: Connection refused
이를 해결하기 위해 메인 서버의 /etc/redis/redis.conf 파일을 수정해주어야 한다.
// redis.conf의 bind 코드를 수정한다.
bind 127.0.0.1 (사설 IP 주소)
service redis restart // 실행하고 레프리카 서버의 로그를 확인해보자
[ 힘들었던 점 ]
사설 IP, 공인IP를 bind에 적음에도 불구하고 메인/레프리카 서버 연결이 안되었다. bind 0.0.0.0으로 설정하면 해결되었지만 보안에 문제가 생기기 때문에 적절한 해결책이 아니었다. 뭐가 문제인지 파악하기 위해 예상되는 문제점을 모두 검증해보았다.
1. 방화벽 설정 유/무 - 방화벽 설정이 되어있는지 확인해보니 inactive로 설정되어 있었다. 문제의 원인이 아니었다.
2. ec2의 inbound 설정 - 디버깅을 위해 모든 TCP, 모든 IP에 대해서 설정해놓고 연결을 확인해보았다. 여전히 문제가 발생했다.
3. bind의 의미를 잘 못 알고 있는지 확인했다. 처음에는 요청한 IP주소를 허락해준다는 의미로 사용했는데 알고보니 이 주소로 들어온 요청은 처리한다는 의미였다.... 그것도 모르고 나는 계속 레프리카 서버의 사설 IP주소를 메인 서버의 redis.conf에 설정해주고 있었다.