베어_
TechBear
베어_
전체 방문자
오늘
어제
  • 분류 전체보기 (336)
    • Spring (33)
      • 개념 (13)
      • Security (5)
      • 실습 (1)
      • 토비 스프링 (11)
    • JPA (6)
    • 프로젝트 기록 (24)
    • DB (13)
    • JAVA (18)
    • 알고리즘 (50)
      • 유형정리 (8)
      • Baekjoon (21)
      • LeetCode (18)
    • 디자인패턴 (0)
    • 개발서적 (79)
      • Effective Java (78)
      • 객체지향의 사실과 오해 (1)
    • 독후감 (4)
    • 보안 (2)
    • 운영체제(OS) (53)
      • 공룡책 (53)
    • 컴퓨터 네트워크 (28)
      • 컴퓨터 네트워크 하향식 접근 (23)
    • 자료구조 (1)
    • DevOps (2)
    • 앱 개발 (20)
      • 안드로이드 스튜디오 (20)

블로그 메뉴

    공지사항

    인기 글

    태그

    • jpa
    • C++
    • 스프링시큐리티
    • BFS
    • java
    • 이펙티브자바
    • 스레드
    • 스프링
    • leetcode
    • 알고리즘
    • dfs
    • 코드업
    • 토비스프링
    • 자바8
    • 운영체제
    • 자바
    • 데이터베이스
    • Spring
    • 함수형인터페이스
    • 백준

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    베어_

    TechBear

    [프로젝트 기록] Redis 메인/레프리카 서버 만들기
    프로젝트 기록

    [프로젝트 기록] Redis 메인/레프리카 서버 만들기

    2023. 11. 12. 01:36

    [ Redis 레프리카 서버 만들기 ]

    이용하고 있던 Redis EC2의 이미지를 복제하여 새로운 인스턴스를 생성해주었다.

    두 개의 레디스를 생성한 모습

     

    복제한 레디스의 정보를 확인해보자.

    redis-cli info

    replica 서버의 info

     

    Role설정이 master로 되어있는 것을 확인할 수 있다. 이를 replica로 설정해주자.

    replicaof (사설 IP) (포트번호)
    Ex ) replicaof 172.1.1.1 6379

     

    다시 info를 입력하여 확인해보면 slave로 바뀐 것을 확인할 수 있다. 하지만 master_link_status: down임을 확인할 수 있다.

    Slave로 설정한 뒤 info

    /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에 설정해주고 있었다.

     

     

    저작자표시 비영리 변경금지 (새창열림)
      '프로젝트 기록' 카테고리의 다른 글
      • 2차 캐시를 이용한 최적화 기록
      • [프로젝트 기록] fetch-join을 이용해 쿼리 최적화하기
      • [프로젝트 기록] Redis와 직렬화/역직렬화
      • 인공지능 기반 웹 서비스 만들기
      베어_
      베어_
      Today I learned | 문제를 해결하는 개발자

      티스토리툴바