반응형
Redis를 활용한 Tomcat session clustering 구성 가이드.
1. 환경정보
- Tomcat9
- JDK8
2. 참고사항
- Tomcat session clustering용도의 redis연동 공식 library는 없음
- redis에서 제공해주는 jedis library를 사용해 개발이 필요
- 이번 가이드에서는 tomcat-cluster-redis-session-manager.jar 를 활용
3. library download
https://github.com/ran-jit/tomcat-cluster-redis-session-manager
4. 환경설정
- redis-data-cache.properties(conf아래 위치)
#-- Redis data-cache configuration
# - ${ENV_VARIABLE_NAME}
#- redis hosts. ex: 127.0.0.1:6379, 127.0.0.2:6379, 127.0.0.2:6380, ....
redis.hosts=${redis_ip}:${redis_port}
#- redis password.
redis.password=${redis_password}
#- set true to enable redis cluster mode. (default value: false)
redis.cluster.enabled=true
#- set true to enable redis sentinel mode. (default value: false)
redis.sentinel.enabled=false
# redis sentinel master name. (default value: mymaster)
redis.sentinel.master=mymaster
#- redis database. (default value: 0)
#redis.database=0
#- redis connection timeout. (default value: 2000 ms)
#redis.timeout=2000
#- enable redis and standard session mode. (default value: false)
# If enabled,
# 1. Must be enabled sticky session in your load balancer configuration. Else this manager may not return the updated session values.
# 2. Session values are stored in local jvm and redis.
# 3. If redis is down/not responding, requests uses jvm stored session values to process user requests. Redis comes back the values will be synced.
lb.sticky-session.enabled=false
#- session persistent policies. (default value: DEFAULT) ex: DEFAULT, SAVE_ON_CHANGE
# policies - DEFAULT, SAVE_ON_CHANGE, ALWAYS_SAVE_AFTER_REQUEST
# 1. SAVE_ON_CHANGE: every time session.setAttribute() or session.removeAttribute() is called the session will be saved.
# 2. ALWAYS_SAVE_AFTER_REQUEST: force saving after every request, regardless of whether or not the manager has detected changes to the session.
session.persistent.policies=DEFAULT
- 필수항목으로 redis.hosts, redis.password 입력이 필요
- 위의 예시와 같이 변수사용을 위해서는 tomcat-cluster-redis-session-manager.jar v3.0.4이상을 사용
- redis의 구성에 따라 cluster, sentinel등의 내용을 설정
- context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Valve className="tomcat.request.session.redis.SessionHandlerValve" />
<Manager className="tomcat.request.session.redis.SessionManager" />
...
</Context>
- session manager 를 tomcat.request.session.redis.SessionManager로 설정
- JVM_OPTS
-Dredis_ip=redis_address
-Dredis_port=6379
-Dredis_password=redis_password
- redis-data-cache.properties에 변수를 선언했다면 JVM_OPTS에 -D로 해당 변수들의 value값들을 설정
5. 테스트
여러개 인스턴스를 띄워둔 뒤 RR방식으로 요청을 전달했을 때 session값이 유지되는 것을 확인할 수 있다.
- 호출1 : IP 끝자리 20, SessionID : 0FE16~~~4C
- 호출2 : IP 끝자리 31, SessionID: 0FE16~~4C
- 호출3 : IP 끝자리 37, SessionID: 0FE16~~4C
Tomcat을 Container로 띄우게 될 경우 session 유지의 한가지 방안으로 Redis를 생각해 볼 수 있다.
단 공식적인 library는 없기 때문에 이부분에 대한 고려는 필요하다.
반응형
'미들웨어 > Apache,Tomcat' 카테고리의 다른 글
Tomcat default error page (0) | 2023.06.28 |
---|---|
Apache method 제한하기(AllowMethods) (0) | 2023.06.24 |
Tomcat jmx-proxy를 활용한 모니터링 (1) | 2023.03.12 |
Tomcat Connector Threads 설정 정리 (0) | 2023.03.08 |
Tomcat Session Clustering 설정 (0) | 2023.03.05 |