기술지원 문의

세션 클러스터링 관련 장애 발생
김경태 / 2004-11-25 21:50

리진 라이센스 3카피를 구매한 아레오커뮤니케이션즈입니다.
금일 8시경 세션 클러스터링으로 묶인 웹서버 3대의 Resin이 동시에 아래와 같은 에러를 반복적으로 내면서 Hang(프로세스는 살았으나 응답이 없음)이 걸렸습니다.
11월 24일부터 세션클러스터링 구성 후 가동하였으며 금일 처음 이런 문제가 발생하였습니다.

리진 버젼은 Resin 2.1.14 (built Thu Jul  1 18:39:55 PDT 2004) 입니다. 로그파일 전체를 파일로 첨부 하였습니다.

-----------------------------------------------------------------------------------------
java.net.SocketTimeoutException: Read timed out
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at com.caucho.vfs.TcpStream.read(TcpStream.java:126)
        at com.caucho.vfs.ReadStream.readBuffer(ReadStream.java:790)
        at com.caucho.vfs.ReadStream.read(ReadStream.java:271)
        at com.caucho.http.distribution.RingStore.invalidate(RingStore.java:596)
        at com.caucho.http.distribution.RingStore.invalidateServer(RingStore.java:568)
        at com.caucho.http.distribution.RingStore.remove(RingStore.java:548)
        at com.caucho.http.session.SessionImpl.invalidateImpl(SessionImpl.java:557)
        at com.caucho.http.session.SessionImpl.invalidate(SessionImpl.java:539)
        at com.caucho.http.session.SessionManager.timeout(SessionManager.java:1025)
        at com.caucho.server.http.Application.timeout(Application.java:3667)
        at com.caucho.server.http.VirtualHost.timeout(VirtualHost.java:1323)
        at com.caucho.server.http.ServletServer.timeout(ServletServer.java:1798)
        at com.caucho.server.http.ServletServer.handleAlarm(ServletServer.java:1754)
        at com.caucho.util.Alarm$AlarmThread.evaluateAlarm(Alarm.java:319)
        at com.caucho.util.Alarm$AlarmThread.run(Alarm.java:279)

java.net.SocketTimeoutException: Read timed out
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at com.caucho.vfs.TcpStream.read(TcpStream.java:126)
        at com.caucho.vfs.ReadStream.readBuffer(ReadStream.java:790)
        at com.caucho.vfs.ReadStream.read(ReadStream.java:271)
        at com.caucho.http.distribution.RingStore.saveObject(RingStore.java:496)
        at com.caucho.http.distribution.RingStore.saveServer(RingStore.java:468)
        at com.caucho.http.distribution.RingStore.store(RingStore.java:401)
        at com.caucho.http.session.SessionImpl.finish(SessionImpl.java:787)
        at com.caucho.server.http.Request.finish(Request.java:502)
        at com.caucho.server.http.Response.finish(Response.java:1760)
        at com.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:365)
        at com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:274)
        at com.caucho.server.TcpConnection.run(TcpConnection.java:139)
        at java.lang.Thread.run(Thread.java:534)

-----------------------------------------------------------------------------------------
다음은 resin.conf 설정 내용입니다. 
3대 모두 동일하며 start, stop은 -server 옵션과 host id를 이용해서 합니다.





  doc
  
  
  
  
  
  
  2
  false
  true
  512
  
  
  
  
  false
  
  index.jsp, index.html

  
              format=%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-Agent}i\"/>
    

    

    
      
        
      

      /home/www/www-v51/src/webapp/
                       source=WEB-INF/src
                 compile=false/>
    
  



-----------------------------------------------------------------------------------------

로그로 보아서는 네트워크, 리진 자체, 설정의 문제 중 하나인 것으로 추정이 됩니다.
그런데 해당 시점에 네트워크는 아무이상이 없었으며 IDC의 여러서버중 해당 웹서버에서만 장애가 발생하였습니다. 설정 또한 리진 레퍼런스의 내용을 그대로 따랐으며 2일간 정상작동했던 것으로 보아 문제가 없어보입니다.

현재 위 장애의 원인이 규명되지 않아 세션클러스터링 설정을 해제하고 한대의 서버로 서비스를 운영 중입니다. 이 장애에 대한 원인 및 해결방안을 제시해 주시기 바랍니다. 답변하시면 아래의 연락처로 연락 바랍니다.
감사합니다.

----------------------------------------
(주) 아레오커뮤니케이션즈
개발기획팀 대리 김경태
 
대표전화 : 02-6202-5800
직통전화 : 02-6202-5861
이동전화 : 010-9983-3089
이 메 일  : twe@arreo.com 
웹사이트 : http://arreo.com
메 신 저  : twenim@hotmail.com (MSN)
주      소 : 서울시 강남구 삼성동 (우 : 135-973)
               159-9 도심공항타워 21층
----------------------------------------

[Re]세션 클러스터링 관련 장애 발생
관리자 / 2004-11-26 05:30

안녕하세요
올려주신 컨피규레이션은 일단 문제가 없어보입니다.

다만 운영하시는 구성을 짐작하기가 좀 곤란하네요.
resin.conf파일에서 보이는 내용은 개별 하드웨어마다
각각의 Resin 인스턴스를 1개씩 운영하는 것으로 파악됩니다.

메세지 자체는 인스턴스간 소켓통신에 문제가 발생한 것인데
당연히 이러한 상황에서는 서비스에 문제가 발생할 것을 보입니다.

만약 아파치웹서버와 연동하여 운영하신다면
http id=???? 쪽의 구성은 의미가 없는 것이구요.
혹 지금 구성처럼 하드웨어에 한개의 Resin인스턴스 운영이
문제라면(전체적인 시스템 부하와 같은) 시스템별 Resin 멀티인스턴스를
고려해볼 필요도 있을 것 같네요.

TCP Ring으로 Session Clustering을 구성했을 경우는
본래의 인스턴스와 백업인스턴스가 동시에 문제가 발생하였을 경우에
Session의 유실이 있을 수 있습니다(대략 50%가능성)

Session 클러스터링은 사이트의 어플리케이션에 따라 여러가지 변수가 있지만
완벽한 구성은 JDBC를 이용하는 것이구요(이것은 부하에 대한 고려가 필요함)

어플리케이션에 따라 아주 많은 차이를 보이겠지만,
가장 간단한 구성은 각각의 하드웨어 시스템별로 멀티인스턴스를 구성하고
개별 하드웨어의 Resin 인스턴스간의 file-store로 세션클러스터링을 구성하는 것이
안정한 방법으로 생각됩니다.
이렇게 한다면 전체의 시스템과의 연계성이 줄어 들어 서버별로 서비스를 개별화할 수 있는 
장점이 있습니다.
즉, resin.conf에서 기술하는 srun인스턴스를 개별하드웨어로 한정하는 것입니다.
다만 이런 경우는 프론트단의 L4에서 Sticky Enable되어야 효율적이겠지요.

결론적으로 보내주신 로그는 Resin 인스턴스간의 통신에 문제가 발생하였다는 것이고
이것의 원인은 짐작하기 어렵습니다.

다만 올려주진 구성파일이
하나의 하드웨어에 하나의 Resin인스턴스로 구성되어 있다면
하나의 하드웨어에 2개 혹은 이상의 인스턴스로 구성하고
개별하드웨어내에서의 세션클러스터링으로 묶는 것이 서버별 독립성과
로드발란싱 및 Fail Over에 더 나은 구성이라고 생각합니다.

이것은 Session Clustering구성에서의 문제발생이라는 측면보다는
전체적인 서버의 부하와 시스템 구성과도 관계가 상당히 있어보입니다.