07. Upgrading - 02 :: 2015/05/12 19:22

Rolling upgrade process


Rolling upgrade ES cluster에서 한번에 하나의 노드만 upgrade되게 한다. 따라서 end user 다운타임을 느낄 없다. 동일 cluster에서 upgrade 지원하는 기간을 넘어서 이상 지원하지 않는 여러 버전의 elasticsearch 실행하는 , 특히 최근 버전으로 이전 버전에 대한 shard replication 구성하는 것은 동작하지 않는다.


1.0 release 이후 minor or maintenance release에서, rolling upgrade 지원된다. Rolling upgrade 수행하기 위해서는,

  • Disable Shard reallocation(optional). Cluster shutdown 이후 작업이 빠르게 수행하게 한다. 단계를 수행하지 않으면, 노드들은 startup 시점에 각각 shard 즉시 복제하려고 것이다. 그리고 그것은 IO 많은 시간을 써버린다. Shard reallocation disable하면 노드들은 rebalance 시도하지 않고, 각각의 index만을 그대로 가지고 cluster 참여한다. Startup 완료되면 백그라운드에서 reallocation 일어난다.

Elasticsearch 1.0 이후 버전에서 다음과 같이 실행한다.


curl -XPUT localhost:9200/_cluster/settings -d '{
               "transient" : {
                  "cluster.routing.allocation.enable" : "none"
               }
       }'


  • Cluster내에서 하나의 노드를 shutdown한다.

curl -XPOST 'http://localhost:9200/_cluster/nodes/_local/_shutdown'


  • 남아 있는 실행 중인 노드들에서 모든 shard들이 완전히 reallocate되었는지 확인한다.
  • 정지된 노드의 upgrade 실행한다. Elastic.co로부터 zip 파일이나 tarball 사용하여 upgrade 수행한다.
    • 새로운 디렉토리에 zip이나 tarball 압축해제한다. 일반적으로 현재 설치된 elasticsearch 동일한 volume 위치시킨다. 현재 설치된 폴더를 덮어쓰면 된다. 왜냐하면 다운로드 받은 압축파일에는 default elasticsearch.yml 파일을 포함하고 있어서 현재 설정을 덮어쓰기 때문이다.
    • 이전 Elasticsearch 설치 폴더에서 설정 파일을 복사하여 새로운 Elasticsearch config directory 넣는다. 필요하면 이전 Elasticsearch 설치 버전의 data directory 다른 곳으로 옮긴다. 만약 tarball 압축해제 폴더 내에 data file 없으면 다른 곳으로 옮길 필요 없다.
    • 하나의 버전에서 다른 버전으로 옮기는 가장 간단한 해결책은 현재 실행중인 버전을 나타내는 elasticsearch sympolic link 가지고 하는 것이다. link 쉽게 가장 최근 버전을 나타내도록 update 있고, 안정적으로 접근할 있게 한다. 만약 link 사용하고 있다면 link update하라.
  • .deb .rpm package 사용하여 upgrade하기 위해서는
    • 새로운 패키지를 설치하기 위해 rpm이나 dpkg 이용하라. 모든 파일들은 적합한 location 위치하게 되고, config 파일은 덮어쓰면 안된다.
  • Upgrade 노드를 시작하라. Cluster 참여하는지 확인한다.
  • Shard reallocation 재활성화한다. (re-enable)

curl -XPUT localhost:9200/_cluster/settings -d '{
               "transient" : {
                  "cluster.routing.allocation.enable" : "all"
               }
       }'


  • 모든 노드에 모든 shard 적장하게 할당되었는지 확인한다. Balancing 약간의 시간이 걸린다.
  • 모든 남아 있는 노드들에 대해서 과정을 반복한다.

[IMPORTANT]

Rolling upgrade 하는 동안, 높은 버전의 노드에 할당된 primary shard 절대로 하위 버전의 노드에 replicas 할당하지 않는다. 왜냐하면 새로운 버전은 이전 버전에서 이해할 없는 다른 데이터 형태를 갖고 있기 때문이다.


상위 버전의 노드에서 다른 노드로 replica ㄹ할당하는 것이 가능하지 않다면, 예를 들어 cluster내에 하위 버전의 노드가 하나밖에 없을 경우, replica shard 할당되지 않고 남아 있게 된다. 따라서 cluster health yellow 상태이다. Cluster내에 다른 상위 버전의 노드가 참여하는 즉시 replica 할당되고 cluster 상태는 green으로 변경될 것이다.


서비스가 실행되고 있는 동안에 새로운 소프트웨어가 설치되어 upgrade 수행하는 것도 가능하다. 이것은 upgrade 노드에서 service 정지하자마자 새로운 버전을 실행하여 downtime 감소시킨다. 이것은 새로운 버전을 별도의 디렉토리에 설치하고, symbolic link method 이용하면 가능하다. 과정을 테스트 하기 위해서는 먼저 site-specific 설정 데이터와 production index들을 upgrade 과정 중에 덮어쓰지 않아야 한다.


Cluster restart upgrade process


Elasticsearch 1.0버전 이전과 이후는 서로 호환되지 않는다. 따라서 rolling upgrade 불가능하다. 1.0 이전 버전 시스템에서 1.0 이후버전 시스템으로 upgrade하기 위해서는 cluster 전체를 stop하고 start하는 것이 필요하다. 이러한 upgrade 수행하기 위해서는


  • Disable Shard reallocation (optional). Cluster shutdown이후 빠르게 시작할 있다. 작업을 수행하지 않으면, 노드들은 시작시점에 즉시 서로 shard 복제하려고 시작할 것이다. 그리고 과정에서 낭비되는 IO 많은 시간을 보낸다. Shard reallocation disable되면, 노드들은 자신의 index들만 가지고 cluster 참여하고 rebalance 시도하지 않는다. Startup 완료되면, reallocation 백그라운드에서 실행될 것이다.

1.0 이전 버전에서 syntax 다음과 같다.


curl -XPUT localhost:9200/_cluster/settings -d '{
               "persistent" : {
              "cluster.routing.allocation.disable_allocation" : true
               }
       }'



  • Upgrade 첫번째 노드에 압축 파일을 해제하고 Rolling Upgrade Section에서 설명한 대로 새로운 package 설치한다. 모든 노드에 대해서 반복한다.
  • 모든 노드에 elasticsearch upgrade 완료되면 노드를 개별적으로 실행하여 cluster 시작한다.
    • Master 자격이 있는 노드를 먼저 시작한다. Quorum 기반 master 선출되었는지 확인하라.
    • Data 노드를 실행하고, client 노드들을 시작하라. Cluster 성공적으로 참여했는지 확인하라.
  • Cluster 실행되고, yellow 상태에 이르면 shard reallocation 있다.

1.0 이후 버전에서는 다음 syntax 실행할 있다.


curl -XPUT localhost:9200/_cluster/settings -d '{
               "persistent" : {
              "cluster.routing.allocation.disable_allocation": false,
              "cluster.routing.allocation.enable" : "all"
               }
       }'


cluster upgrade cluster 서비스를 종료하기 전에 새로운 소프트웨어를 설치하여 간단하게 수행할 있다. 작업이 완료되면 restart 시작하기 전에 production data 설정 파일들이 덮어써지지는 않았는지 반드시 확인하는 테스트가 수행되어야 한다.

2015/05/12 19:22 2015/05/12 19:22
Trackback Address :: http://www.yongbi.net/trackback/715
[로그인][오픈아이디란?]
오픈아이디로만 댓글을 남길 수 있습니다
Name
Password
Homepage

Secret
< PREV |  1  |  ...  88  |  89  |  90  |  91  |  92  |  93  |  94  |  95  |  96  |  ...  566  |  NEXT >