[Rails] seesaw 사용해서 서비스를 우아하게 재시작하기

seesaw 는 ?

mongrel은  rails를 위한 서버로 가장 많이 사용되는 서버일 것이다. 보통 mongrel을 여러개 실행시키고 apache나 nginx를 reverse proxy server 로 사용할텐데, mongrel 프로세스들을 관리하기 위해 mongrel_cluster를 사용한다. mongrel_cluster를 사용하면 여러개의 mongrel들을 손쉽게 실행시키고 중지시킬 수 있다.

mongrel_cluster가 편하기는 하지만 실제 서비스를 할 때는 걱정거리가 있는데, 그것은 서비스를 재시작할 때다. 서비스의 기능이 개선되어 소스를 update하고 싶을 때, 서비스의 중단없이 이것이 가능할까? seesaw를 사용하면 가능하다.

 

시나리오

mongrel_rails seesaw:bounce 를 실행하면 다음과 같은 일들이 벌어진다.

  1. webserver의 설정이 앞의 절반의 mongrel을 사용하도록 변경된다.
  2. webserver가 우아하게 재시작된다.
  3. 뒤의 절반의 mongrel들이 재시작된다.
  4. webserver의 설정이 뒤의 절반의 mongrel들을 사용하도록 변경된다.
  5. webserver가 우아하게 재시작된다.
  6. 앞의 절반의 mongrel들이 재시작된다.
  7. webserver의 설정이 모든 mongrel들을 사용하도록 변경된다.
  8. webserver가 우아하게 재시작된다.

 

가정

mongrel과 mongrel_cluster를 사용한다.

 

설치

  1. gem install seesaw

 

환경 설정

  1. mongrel_rails seesaw::configure

위명령은 config/seesaw.yml과 config/http_cluster 디렉토리에 cluster_all.conf, cluster_1.conf, cluster_2.conf, cluster.conf를 생성시킨다.

 

config/http_cluster 디렉토리를 server의 적당한 곳에 이동시키자.

capistrano를 사용한다면 shared 에 놓는 것도 좋을듯 싶다.

 

config/seesaw.yml 를 편집하자.

  1. restart_cmd: sudo apache2ctl graceful
    config_symlink: cluster.conf
    mongrel_config_path: config/mongrel_cluster.yml
    config_path: /PATH/TO/HTTP_CLUSTER/http_cluster
    config_files:
      all: cluster_all.conf
      1: cluster_1.conf
      2: cluster_2.conf
    symlink_cmd: sudo ln -sf

 

Apache2 설정

Apache 설정 중 Proxy balancer 대신 다음을 추가하자. apache의 설정은 [Rails] Windeow에서 apache + proxy_balancer 사용하기 를 참조

  1. Include "/home/APP_NAME/shared/http_cluster/cluster.conf"

 

cluster_all.conf, cluster_1.conf, cluster_2 를 열어서

proxy_balancer 이름을 수정해 주자.

  1. <Proxy balancer://MY_APP_mongrel_packs>

 

실행

실행은 간단하다.

  1. mongrel_rails seesaw:bounce

 

capistrano를 이용해서 배포를 하고 있다면 [Rails] Capistrano와 seesaw를 이용해서 배포하기 를 참조한다.