'Setup'에 해당되는 글 12건

  1. 2015/05/12 용비 08. Breaking changes
  2. 2015/05/12 용비 07. Upgrading - 02
  3. 2015/05/12 용비 07. Upgrading - 01
  4. 2015/05/11 용비 06. Repositories
  5. 2015/05/11 용비 05. Directory Layout

섹션에서는 application elasticsearch 다른 버전으로 migration 필요가 있을 , 변경사항에 대해서 논의한다.


일반적으로 다음 Rule 따른다.

  • Major version 다른 제품으로 migration - 예를 들어 1.x에서 2.x - 전체 cluster 재시작 필요 (restart upgrade)
  • Minor version 다른 제품으로 migration - 예를 들어 1.x에서 1.y - 한번에 하나의 node upgrade 수행 (rolling upgrade)

자세한 내용은 07. Upgrading 섹션을 참고하라.

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/716

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 설정 파일들이 덮어써지지는 않았는지 반드시 확인하는 테스트가 수행되어야 한다.

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/715

Elasticsearch 단계적인 규칙으로 이루어진 upgrade process 이용하여 서비스 중단 없이 upgrade 있다 섹션에서는 어떻게 단계적으로 upgrade 수행하거나 재시작할 있는지를 살펴본다. Rolling upgrade 설치하고자 하는 elasticsearch release에서 지원하는지 아닌지 알기 위해서 다음 표를 활용하라.


Upgrade From

Upgrade To

Supported Upgrade Type

0.90.x

1.x

Restart Upgrade

< 0.90.7

0.90.x

Restart Upgrade

>= 0.90.7

0.90.x

Rolling Upgrade

1.x

1.x

Rolling Upgrade


[TIP]

Elasticsearch upgrade하기 전에 breaking changes (http://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes.html) docs 통해 컨설팅을 받아보는 것도 좋은 생각이다.


Backup Your Data!


Upgarde 수행하기 전에 system data backup 하는 것이 좋다. Upgrade과정 중에 오류가 발생해서 원래 상태로 roll back하는데 필요하다. Upgrade 때로 Elasticsearch index file 접근하는데 필요한 Lucene libraries upgrade하기도 한다. 그리고 한번 Lucene 새로운 버전으로 upgrade되고 나면, 이전 버전의 elasticsearch release에서는 현재 Lucene 버전으로 접근할 없다.


0.90.x 이전 버전


0.90.x system 백업하고, index flushing 하지 않도록 한다. 백업 과정에서 index disk flush하지 않도록 방지한다.


$ curl -XPUT 'http://localhost:9200/_all/_settings' -d '{
   "index": {
      "translog.disable_flush": "true"
   }
}'


그리고 재할당을 하지 않도록 한다. 백업 과정 중에 하나의 노드로부터 다른 노드로 data 옮기는 것을 방지한다.


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


재할당과 index flush 하지 않도록 설정한 다음에, 선호하는 백업 방식(tar, storage array snapshot, backup software)으로 Elasticsearch Data 백업한다. 백업이 완료되고 이상 Elasticsearch data path에서 읽을 데이터가 없으면 재할당과 index flush 가능하도록 설정한다.


$ curl -XPUT 'http://localhost:9200/_all/_settings' -d '{
   "index": {
      "translog.disable_flush": "false"
   }
}'

$ curl -XPUT 'http://localhost:9200/_cluster/settings' -d '{
   "transient" : {
      "cluster.routing.allocation.disable_allocation": "false"
   }
}'


1.0 이후 버전


1.0 이후 버전을 백업하기 위해서는 snapshot 기능을 사용하여 간단하게 있다. 자세한 방법은 backup and restore with snapshots (http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-snapshots.html) 통해서 있다.

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/714

06. Repositories

Elastic Search/02. Setup 2015/05/11 19:09 용비

APT YUM 기반 배포판을 이용할 있도록 Repositories 제공하고 있다. Source 아니라 Elasticsearch 빌드한 Binary package만을 제공한다. Major 버전을 통한 우발적인 upgrade 피하기 위해서 major 버전별로 url 나누었다. 0.90.x 버전은 전부 0.90으로, 1.0.x 1.0으로, 1.1.x 1.1 같은 숫자로 표시한다.


Elasticsearch 서명 키로는 PGP key D88E42B4 사용한다.

Fingerprint 다음과 같다.

4609 5ACC 8548 582C 1A26 99A9 D27D 666C D88E 42B4

http://pgp.mit.edu 에서 사용할 있다.


APT

Public Singing Key 다운로드 하고 설치한다.


wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -


/etc/apt/source.list 파일에 repositories 정의를 추가한다.


echo "deb http://packages.elastic.co/elasticsearch/1.5/debian stable main" | sudo tee -a /etc/apt/sources.list


[WARINIG]

Elasticsearch repositories 추구하기 위해서 echo method 사용하라. Source 제공하지 않기 때문에 Add-apt-repository deb-src 사용하지 말라. Deb-src entry 추가했다면, 다음과 같은 error 발생할 것이다.

 

Unable to find expected entry 'main/source/Sources' in Release file (Wrong sources.list entry or malformed file)

Just delete the deb-src entry from the /etc/apt/sources.list file and the installation should work as expected.


Repository 준비되었다면 apt-get update 실행하라. 다음과 같이 설치할 있다.

sudo apt-get update && sudo apt-get install elasticsearch


부팅할 자동으로 Elasticsearch 실행하도록 설정하려면 다음과 같이 하면 된다.

sudo update-rc.d elasticsearch defaults 95 10


YUM


public Signing Key
다운로드 받아서 설치한다.


rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch


/etc/yum.repos.d/ 디렉토리에 .repo 확장자를 가진 파일을 추가하라. 예를 들어 elasticsearch.repo 파일을 만든다.


[elasticsearch-1.5]
name
=Elasticsearch repository for 1.5.x packages
baseurl
=http://packages.elastic.co/elasticsearch/1.5/centos
gpgcheck
=1
gpgkey
=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled
=1


그러면 repository 사용할 준비가 것이다. 이제 설치할 있다.


yum install elasticsearch


부팅 시에 elasticsearch 자동으로 시작하도록 설정해 보자. SysV init 사용한 배포판이라면 다음과 같이 실행할 있다.


chkconfig --add elasticsearch


[WARNING]

CentOS5 같은 RPM v3 사용한 예전 rpm 기반 배포판이라면 repositories 동작하지 않는다.


아니면 systemd 사용하여 설치할 있다.


sudo /bin/systemctl daemon-reload
sudo
/bin/systemctl enable elasticsearch.service

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/712

설치된 이후 폴더 구조는 다음과 같다.


Type

Description

Default Location

Setting

home

Elasicsearch 설치


path.home

bin

Elasticsearch 노드를 시작할 있는 binary script 있는 폴더

{path.home}/bin


conf

Elasticsearch.yml 포함한 설정 파일이 있는 폴더

{path.home}/config

path.conf

data

노드에 할당된 index/shard 데이터 파일이 있는 폴더.

여러 위치에 있을 있음

{path.home}/data

path.data

logs

로그 파일이 있는 폴더

{path.home}/logs

path.logs

plugins

Plugin 파일이 위치한 폴더. 플러그인은 subdirectory 갖고 있음.

{path.home}/plugins

path.plugins


Multiple data location stripe를 허용한다. Striping 간단하게 하나의 location 모든 파일을 위치시킬 수도 있고, index.store.distributor 값에 근거해서 파일 위치를 결정할 수도 있다.

  • least_used (default) : 항상 가장 적합한 space directory 선택한다.
  • random : 랜덤하게 directory 선택한다. 특정 디렉토리가 선택될 가능성은 디렉토리에서 이용할 있는 space 비례한다. , 이용가능한 space 많을수록 선택될 가능성이 높아진다.

동일한 데이터를 여러 복사하는 것이 아니라, RAID 0 같음에 유의하라. 간단하지만, RAID 사용하여 복잡하게 구성하고 싶지 않은 사람들에게 좋은 솔루션이 있다. 다음과 같이 설정하면 된다.


path.data: /mnt/first, /mnt/second


혹은 다음과 같이 array 형태로 설정할 수도 있다.


path.data: ["/mnt/first", "/mnt/second"]


Default Paths

아래 값들은 특별히 수정하지 않았다면, elasticsearch 사용하는 default path들이다.


deb and rpm

Type

Description

Location Debian/Ubuntu

Location RHEL/CentOS

home

Elasticsearch 설치

/usr/share/elasticsearch

/usr/share/elasticsearch

bin

노드를 실행할 있는 elasticsearch 포함한

binary script 있는 폴더

/usr/share/elasticsearch/bin

/usr/share/elasticsearch/bin

conf

Elasticsearch.yml/logging.yml 설정 파일이 있는 폴더

/etc/elasticsearch

/etc/elasticsearch

conf

Heap size, file descriptor 포함한 환경 변수 설정 파일이 있는 폴더

/etc/default/elasticsearch

/etc/sysconfig/elasticsearch

data

노드에 할당된 index/shard data 파일이 위치한 폴더

/var/lib/elasticsearch/data

/var/lib/elasticsearch

logs

로그 파일 위치

/var/log/elasticsearch

/var/log/elasticsearch

plugins

플러그인 파일 위치. 플러그인은 하위에 폴더를 포함하고 있다.

/usr/share/elasticsearch/plugins

/usr/share/elasticsearch/plugins


zip and tar.gz

Type

Description

Location

home

Elasticsearch 설치

{extract.path}

bin

노드를 실행할 있는 elasticsearch 포함한

binary script 있는 폴더

{extract.path}/bin

conf

Elasticsearch.yml/logging.yml 설정 파일이 있는 폴더

{extract.path}/config

conf

Heap size, file descriptor 포함한 환경 변수 설정 파일이 있는 폴더

{extract.path}/config

data

노드에 할당된 index/shard data 파일이 위치한 폴더

{extract.path}/data

logs

로그 파일 위치

{extract.path}/logs

plugins

플러그인 파일 위치. 플러그인은 하위에 폴더를 포함하고 있다.

{extract.path}/plugins

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/711