2011-09-20 2 views
4

우리의 생산은 LB + TOMCAT에서 실행됩니다. 우리는 자체 제작 한 SAFE-DEPLOY 도구를 사용하여 변경 사항을 생산 환경에 배치합니다. 24/7 가용성을 제공하면 도구는 변경 사항을 다음과 같이 배치합니다.Tomcat에서 grace hot-deployment 수행 방법 (논스톱)

특정 서비스에 사용되는 총 서버는 그룹으로 나뉩니다. 우리는 그것이 2 개의 그룹으로 나누어지고 하나의 그룹을 멈추고 변화를 배치하고 그룹을 시작한다고 가정합시다. 첫 번째 그룹이 완료되면 다른 그룹에 변경 사항을 배포합니다. 대부분의 경우 문제없이 잘 작동합니다.

이 문제는 특수한 경우로 인해 발생합니다. 하나의 서비스는 클라이언트가 자격 증명으로 사용하는 토큰을 생성합니다. 이제는 토큰 형식을 변경했습니다. 동일한 배포 방법을 사용하면 몇 가지 잠재적 인 문제가 발생합니다 .ie.group1 새 코드를 중지하고 다시 시작한 다음 (다시 시작하면됩니다), group2 stop (새 코드 배포 준비) 이제 group2가 배포 될 때 오류가 발생할 수 있습니다. 그 시간 동안 group1은 group2에 의해 생성 된 이전 형식의 토큰을받을 수 있습니다 (1. group1이 배포 중일 때 group2가 이전 코드를 실행하고 2.group2가 중지됨 프로세스 요청), 클라이언트는 토큰이 잘못되었음을 나타내는 오류를 얻지 만 실제로 잘못된 토큰은 아닙니다.

나는 우리 코드가 새로운 형식 토큰과 이전 형식 토큰을 모두 처리 할 수 ​​있지만 새로운 형식 토큰 만 생성 할 수 있도록하고, 1 일 후에 새로운 형식 토큰 만 처리하는 배포를 할 수 있습니다. 나는 그것이 잘 작동한다고 생각하지만 은혜가 아닙니다.

제 질문은 서버가 생성 된 이전 형식의 토큰과 코드가 변경되지 않은 새 형식의 토큰을 모두 처리 할 수있는 유예 배포 방법이 있습니까?

BTW : 참조 번호가 best practice hot deploy on tomcat인데, 이는 tomcat 7에서만 작동하며, 우리 작업 tomcat은 6.0.26입니다.

답변

0

예, 두 번째 방법이있을 수 있습니다. 먼저 loadbalancern (Apache + mod_jk)에서 끈적 세션을 활성화합니다. 즉, 클라이언트는 항상 동일한 서버와 연결됩니다. 둘째, 작업자 (서버)를 사용 중지 (중지하지 않음)합니다. 기존 세션 만 제공되며 새 세션은 제공되지 않습니다. 근로자가 더 이상 열린 세션이 없으면 근로자를 중지시키고 근로자를 업데이트하고 근로자를 LB에서 활성화 할 수 있습니다. 그게 전부지만, 네 길을 제안 해.