Redis 500 No route to host 에러 - 2편

2025. 7. 28. 02:56·Cloud/AWS

이전 글

https://ctrl-shit-esc.tistory.com/198

 

Redis 500 No route to host 에러 - 1편

최근 스노로즈 서버의 프리 티어가 만료되어 새로운 AWS 계정으로 이전하는 작업을 진행했다.그런데 그 뒤로 자꾸 로그인 시 500 에러가 발생했다.ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() fo

ctrl-shit-esc.tistory.com

해당 글의 3번 방법으로 아예 연결되지 않던 문제는 해결했으나, 일부 시점마다 Redis에서 500 에러가 발생했다.

임시 조치로

ps -ef | grep java
kill <PID>
. /home/ubuntu/app/scripts/start.sh

 

를 통해 재부팅을 실행했다.

 

문제 해결 과정

백엔드에서 main에 머지되어 DEV 서버에 배포될 때마다 로그인 문제가 발생하는 것으로 추정되었다.

따라서 문제가 발생했을 때 printenv 명령어나 jinfo 명령어로 정보를 출력해 보았다.

해당 로그에 애플리케이션에 대한 정보가 적혀 있어 전문을 올리지는 못하겠지만 REDIS_HOST 값을 찾아볼 수 없었다.

현재 애플리케이션은 Parameter Store에 저장된 REDIS_HOST 값을 받아와 해당 값을 바탕으로 연결하므로 문제 발생 원인을 애플리케이션이 처음 실행될 때 REDIS_HOST 값을 받아오지 않아서라고 생각했다.

 

그래서 해당 내용을 바탕으로 패치했음에도 동일한 문제가 발생했다.

그래서 다시 ps -ef | grep java 명령어로 확인해 보았다.

이전 PR에서 -Dspring.redis.host="${REDIS_HOST}”를 추가해서 이번부터는 redis.host의 값도 확인할 수 있었다.

root@ip-10-0-13-22:~# ps -ef | grep java
ubuntu    155219       1 21 08:32 ?        00:01:04 java -Dnetworkaddress.cache.ttl=0 -Dnetworkaddress.cache.negative.ttl=0 -Dspring.datasource.url=jdbc:mysql://snorose-dev.c3e4em0egivo.ap-northeast-2.rds.amazonaws.com/snorose_prod?rewriteBatchedStatements=true -Dspring.datasource.username=admin -Dspring.datasource.password=snorosePWD0409!RDS -Dspring.redis.host=master.for-redis-use.rrdvw9.apn2.cache.amazonaws.com -Duser.timezone=Asia/Seoul -jar server-0.0.1-SNAPSHOT.jar
root      155770  155736  0 08:37 pts/0    00:00:00 grep --color=auto java

 

java가 -Dspring.redis.host=master.for-redis-use.rrdvw9.apn2.cache.amazonaws.com을 받아오고 있다는 사실을 확인할 수 있었다. 여기서 경악을 금치 못했다. 왜냐하면...

 

REDIS_HOST의 첫 번째 버전의 값이었기 때문이다!

 

이를 확인하기 위해 codedeploy-agent.log를 S3로 내보내서 확인해 보았다.

2025-07-26T08:31:56 WARN  [codedeploy-agent(665)]: InstanceAgent::Plugins::CodeDeployPlugin::HookExecutor: Script at specified location: scripts/start.sh is not executable.  Trying to make it executable.

 

start.sh의 실행 권한이 없다는 것을 확인할 수 있었다.

따라서 해당 내용을 반영해 다시 PR을 올려 패치했으나 500 에러는 해결되지 않았다.

 

그래서 이번에는 전체 권한을 살펴보았다.

root@ip-10-0-13-22:/home/ubuntu/app/scripts# ls -al
total 28
drwxr-xr-x 2 ubuntu ubuntu 4096 Jul 26 12:37 .
drwxr-xr-x 6 ubuntu ubuntu 4096 Jul 26 12:37 ..
-rwxr-xr-x 1 ubuntu ubuntu  128 Jul 26 12:36 after-install.sh
-rwxr-xr-x 1 ubuntu ubuntu 2316 Jul 26 12:36 ssm.sh
-rwxr-xr-x 1 ubuntu ubuntu 1066 Jul 26 12:36 start.sh
-rwxr-xr-x 1 ubuntu ubuntu  547 Jul 26 12:36 stop.sh
-rwxr-xr-x 1 root   root    557 Jul 19 15:02 test_env.sh

 

스크립트 파일과 관련된 권한은 문제가 없는 것을 확인했다.

 

root@ip-10-0-13-22:/home/ubuntu/app/scripts# namei -l /home/ubuntu/app/scripts/ssm.sh
f: /home/ubuntu/app/scripts/ssm.sh
drwxr-xr-x root   root   /
drwxr-xr-x root   root   home
drwxr-x--- ubuntu ubuntu ubuntu
drwxr-xr-x ubuntu ubuntu app
drwxr-xr-x ubuntu ubuntu scripts
-rwxr-xr-x ubuntu ubuntu ssm.sh

 

하지만 ubuntu 폴더에 others 실행 권한이 없는 것을 확인할 수 있었다.

chmod o+x /home/ubuntu 명령어로 ubuntu 폴더에 실행 권한을 추가하여 문제를 해결했다!

 

그럼 실행은 어떻게 된 거에요?

사실 처음에는 좀비 프로세스인 줄 알았다. 첫 배포부터 나와 함께한...

 

하지만 deploy.log를 살펴봤을 때

Sat Jul 26 08:32:26 2025 > /home/ubuntu/app/server-0.0.1-SNAPSHOT.jar 파일 복사
Sat Jul 26 08:32:26 2025 > /home/ubuntu/app/server-0.0.1-SNAPSHOT.jar 파일 실행
Sat Jul 26 08:32:26 2025 > 실행된 프로세스 아이디 155219 입니다.

 

마지막으로 확인했던 이전 Redis 주소를 가져온 Java 프로세스(PID: 155219)가 다시 시작된 지 얼마 안 되었다는 점에서 좀비 프로세스는 아닌 것 같았다.

 

root@ip-10-0-13-22:# grep -r 'master.for-redis-use.rrdvw9.apn2.cache.amazonaws.com' /home/ubuntu/
/home/ubuntu/.bashrc:export REDIS_HOST=master.for-redis-use.rrdvw9.apn2.cache.amazonaws.com

 

이전에 export REDIS_HOST=master.for-redis-use.rrdvw9.apn2.cache.amazonaws.com 를 추가한 것이 /home/ubuntu/.bashrc에 남아 문제를 발생시킨 것 같았다.

.bashrc는 bash 환경파일로, ubuntu 사용자로 로그인하거나 셸이 실행될 때마다 자동으로 실행된다.

 

정리해보자면 다음과 같다.

  1. 과거의 내가 export REDIS_HOST=master.for-redis-use.rrdvw9.apn2.cache.amazonaws.com 추가
  2. CodeDeploy가 runas: ubuntu로 start.sh를 실행하기 위해 ubuntu 사용자의 셸을 연다.
  3. 이 셸이 열리는 순간, 시스템은 /home/ubuntu/.bashrc를 먼저 읽어 과거의 REDIS_HOST 값을 환경 변수로 설정한다.
  4. start.sh가 실행되고, 그 안의 . ssm.sh 명령이 실행된다.
  5. 하지만 권한 문제로 ssm.sh는 실패하고, REDIS_HOST 값을 가져와 환경 변수를 덮어쓰지 못한다.
  6. java -jar 명령어는 셸에 남아있던 과거의 REDIS_HOST 값을 그대로 상속받아 실행된다.

결론

권한을 잘 보자... 특히 배포와 관련된 파일들은 others에서도 실행될 수 있도록 권한을 꼼꼼히 살펴보자.

그리고 export 같은 명령어는 함부로 사용하지 말자...

'Cloud/AWS' 카테고리의 다른 글
  • Redis 500 No route to host 에러 - 1편
  • AWS ELB 및 ASG 정리
  • 백엔드 코드는 어떻게 S3에 접근할 수 있을까?
  • AWS EC2 정리
단축키실행해보세요
단축키실행해보세요
공대생
  • 단축키실행해보세요
    Ctrl + Shift + ESC
    단축키실행해보세요
  • 전체
    오늘
    어제
    • 분류 전체보기 (170)
      • 외부 활동 (4)
      • BOJ (36)
        • Python (24)
        • C++ (12)
        • Java (0)
      • Hacking (91)
        • Crypto (4)
        • Forensics (2)
        • Mobile Hacking (5)
        • Reversing (21)
        • System (21)
        • Web Hacking (38)
      • Cloud (14)
        • Serverless (1)
        • AWS (8)
      • ML (4)
      • Data Structure (16)
      • Git (0)
      • DevOps (0)
        • Terraform (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ML
    System
    XPath
    c
    AI
    acc
    SISS
    Redis
    자료구조
    백준
    AWS
    유석종교수님
    Reflected
    부하테스트
    Reversing
    basicrce3
    beebox
    bWAPP
    pwnable
    cloud
    Dreamhack
    backjoon
    datastructure
    python
    htmlinjection
    Systemhacking
    SAA
    CodeEngn
    S3
    EC2
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
단축키실행해보세요
Redis 500 No route to host 에러 - 2편
상단으로

티스토리툴바