Redis

NOWNIZ·2023년 1월 26일
0

Blah Blah

목록 보기
7/9
post-thumbnail
  • 세션 클러스터링은 왜 필요할까?
    • 클러스터링 (Clustering) 이란 여러 대의 서버가 한 가지의 일을 동시에 수행하도록 하는 것
    • 여러 대의 WAS가 병렬로 구성되어 있을 때, 일반적으로는 사용자가 접속했던 WAS로 연결시켜 주지만, 허용된 동접수를 초과하는 등 다른 쪽으로의 접속이 필요할 때가 있다.
    • 그럴 경우, 세션 처리의 불일치를 방지하기 위하여 세션 클러스터링을 통해 세션을 하나로 관리한다.
    • 여러 방법 중, 별도의 세션 서버 Redis를 활용하는 방법이 있다.

진행사항

  1. AWS ElastiCache Redis를 구축

    • elc-sample-hjw0426
    • 엔드포인트의 default 포트번호는 6379
  2. 기존에 구축된 Tomcat에서 관련 설정 변경

    • cd $JAVA_HOME/jre/lib/security/java.security 의 설정 변경
      a. networkaddress.cache.ttl=60
      b. 위의 default 값은 -1 인데 JVM의 기본 동작은 영구적 캐시 사용(-1) 이기 때문이다.
      c. 따라서 60으로 설정 (AWS는 60을 사용한다) 하여 재시도가 발생하도록 ttl 시간제한을 명시적으로 설정한다.

    tomcat 내 conf에서 redisson.conf 파일을 새로 생성

    여기서 Connection 관련 설정들과 redis 연결 주소, redisson codec 등을 설정한다.

    context.xml 에서 위에 설정된 redisson.conf 파일을 적용한다.

web.xml 에서 session과 cookie 관련 설정을 수정한다.

세션 ID가 일정한지 확인할 수 있는 session.jsp 를 따로 만들어 둔다.

위 jsp는 1번 tomcat 서버이며, 2번 tomcat은 body에 tomcat-2로 명시

진행 중 참고사항

tomcat 바이너리를 startup 시킬 때, su 상태에서 시작하는 것과 일반 상태에서 시작하는 것이 그 날짜의 log 파일 소유자가 다르다.. (ec2-user 또는 root)

이것 때문에 tomcat 기동 시, log 파일을 못 불러와 (Permission denied) 시작이 안되는 경우가 간혹 발생한다…

tomcat 바이너리를 startup 시킬 때, 정상적으로 웹 페이지가 출력됐으나 다음과 같은 에러로그가 출력된 것이 있었다. (1번 문제를 해결하다가 발견..)

이것은 conf 내 server.xml 파일에서

  1. <Connector port=”8009” protocol=”AJP/1.3” secretRequired=”false” redirectPort=”8443”/>
  2. secretRequired=”false” 부분을 추가해줬더니 해결됐다.

- 레퍼런스 상으로는 secretRequired가 true일 경우, secret이 지정되어야만 AJP connector가 시작될 수 있다고 한다.
- tomcat 취약점 업데이트 때 생긴 파라미터로 보이며, SSL을 사용하지 않는 경우 2-a와 같은 문제가 계속 발생하기 때문에, 추가시켜주자. (이전에는 requiredSecret 옵션이었고 지금은 사용하지 않는다.)
- 관련 글 : https://eastpost95.blogspot.com/2020/03/apache-tomcat-ajp-cve-2020-1938-apache.html
profile
DevOps & Cloud Engineering

0개의 댓글