Elasticsearch Cluster 구성하기 (shards, replicas)
Elastic/Elasticsearch 2012. 11. 22. 17:34많이 부족하지만 일단 스스로 정리하기 위해서.. 올립니다. ^^;
[Reference]
http://www.elasticsearch.org
http://www.elasticsearchtutorial.com/elasticsearch-in-5-minutes.html
[URI Command]
http://10.101.254.223:9200/_status
http://10.101.254.223:9200/_cluster/state?pretty=true
http://10.101.254.223:9200/_cluster/nodes?pretty=true
http://10.101.254.223:9200/_cluster/health?pretty=true
[색인파일 setting 확인]
http://10.101.254.223:9200/depth1_1/_settings?pretty=true
[색인파일 mapping 확인]
http://10.101.254.223:9200/depth1_1/_mapping?pretty=true
[색인파일의 URI Step 정의]
/depth1/
index 명 (각 서비스 단위의 색인명 or vertical service 명)
예)
/blog
/cafe
/depth1/depth2/
index type 명
예)
/blog/user
/blog/post
/cafe/user
/cafe/post
/depth1/depth2/depth3
색인된 document unique key (id)
[색인파일의 생성, shard, replica 설정]
http://www.elasticsearch.org/guide/reference/api/admin-indices-create-index.html
- case 1
curl -XPUT 'http://10.101.254.221:9200/depth1/'
- case 2
curl -XPUT 'http://10.101.254.221:9200/depth1_2/' -d '
index :
number_of_shards : 3
number_of_replicas : 2
'
- case 3 : recommended
curl -XPUT 'http://10.101.254.223:9200/depth1_1/' -d '{
"settings" : {
"index" : {
"number_of_shards" : 3,
"number_of_replicas" : 2
}
}
}'
- case 4
curl -XPUT 'http://10.101.254.223:9200/depth1_1/' -d '{
"settings" : {
"number_of_shards" : 3,
"number_of_replicas" : 2
}
}'
[색인파일 mapping 설정]
http://www.elasticsearch.org/guide/reference/mapping/
http://www.elasticsearch.org/guide/reference/mapping/core-types.html
※ 이 영역에서 색인 또는 검색 시 사용할 analyzer 나 tokenizer 를 지정 한다.
※ solr 의 경우 schema.xml 에서 정의 하는 설정을 여기서 수행 함.
curl -XPUT 'http://10.101.254.223:9200/depth1_1/depth2_1/_mapping' -d '
{
"depth2_1" : {
"properties" : {
"FIELD명" : {"type" : "string", "store" : "yes"}
}
}
}'
[데이터 색인]
http://www.elasticsearch.org/guide/reference/api/index_.html
curl -XPUT 'http://10.101.254.223:9200/blog/user/dilbert' -d '{ "name" : "Dilbert Brown" }'
curl -XPUT 'http://10.101.254.223:9200/blog/post/1' -d '
{
"user": "dilbert",
"postDate": "2011-12-15",
"body": "Search is hard. Search should be easy." ,
"title": "On search"
}'
curl -XPUT 'http://10.101.254.223:9200/blog/post/2' -d '
{
"user": "dilbert",
"postDate": "2011-12-12",
"body": "Distribution is hard. Distribution should be easy." ,
"title": "On distributed search"
}'
curl -XPUT 'http://10.101.254.223:9200/blog/post/3' -d '
{
"user": "dilbert",
"postDate": "2011-12-10",
"body": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat" ,
"title": "Lorem ipsum"
}'
curl -XPUT 'http://10.101.254.223:9200/blog/post/4' -d '
{
"user": "dilbert",
"postDate": "2011-12-11",
"body": "한글 형태소 분석기 테스트와 shard 그리고 replica 테스트" ,
"title": "elastic search 분산설정"
}'
curl -XGET 'http://10.101.254.223:9200/blog/user/dilbert?pretty=true'
curl -XGET 'http://10.101.254.221:9200/blog/post/1?pretty=true'
curl -XGET 'http://10.101.254.223:9200/blog/post/2?pretty=true'
curl -XGET 'http://10.101.254.221:9200/blog/post/3?pretty=true'
[검색테스트]
http://www.elasticsearch.org/guide/reference/api/search/uri-request.html
- user에 dilbert 가 포함되어 있는 것
curl 'http://10.101.254.221:9200/blog/post/_search?q=user:dilbert&pretty=true'
http://10.101.254.223:9200/blog/post/_search?q=user:dilbert&pretty=true
- title 에 search 가 포함 안된 것
curl 'http://10.101.254.223:9200/blog/post/_search?q=-title:search&pretty=true'
http://10.101.254.223:9200/blog/post/_search?q=-title:search&pretty=true
- title 에 search 는 있고 distributed 는 없는 것
curl 'http://10.101.254.223:9200/blog/post/_search?q=+title:search%20-title:distributed&pretty=true&fields=title'
http://10.101.254.223:9200/blog/post/_search?q=+title:search%20-title:distributed&pretty=true&fields=title
- range 검색
curl -XGET 'http://10.101.254.223:9200/blog/_search?pretty=true' -d '
{
"query" : {
"range" : {
"postDate" : { "from" : "2011-12-10", "to" : "2011-12-12" }
}
}
}'
- blog 라는 색인 파일 전체 검색
http://10.101.254.223:9200/blog/_search?q=user:dilbert&pretty=true
http://10.101.254.223:9200/blog/_search?q=name:dilbert&pretty=true
- routing 검색 (정확한 의미 파악이 어려움)
http://10.101.254.223:9200/blog/_search?routing=dilbert?prettry=true
[Clustering 설정 정보]
※ 서버1
cluster.name: cluster_es1
node.name: node_es1
node.master: true
node.data: true
node.rack: rack_es1
index.number_of_shards: 3
index.number_of_replicas: 2
network.host: 10.101.254.223
transport.tcp.port: 9300
http.port: 9200
gateway.type: local
gateway.recover_after_nodes: 1
gateway.recover_after_time: 5m
gateway.expected_nodes: 2
cluster.routing.allocation.node_initial_primaries_recoveries: 4
cluster.routing.allocation.node_concurrent_recoveries: 2
indices.recovery.max_size_per_sec: 0
indices.recovery.concurrent_streams: 5
discovery.zen.minimum_master_nodes: 1
discovery.zen.ping.timeout: 3s
discovery.zen.ping.unicast.hosts: ["10.101.254.223:9300", "10.101.254.221:9300"]
cluster.routing.allocation.allow_rebalance: "indices_all_active"
indices.recovery.concurrent_streams: 3
action.auto_create_index: true
index.mapper.dynamic: true
※ 서버2
cluster.name: cluster_es1
node.name: node_es2
node.master: true
node.data: true
node.rack: rack_es1
index.number_of_shards: 3
index.number_of_replicas: 2
network.host: 10.101.254.221
transport.tcp.port: 9300
http.port: 9200
gateway.type: local
gateway.recover_after_nodes: 1
gateway.recover_after_time: 5m
gateway.expected_nodes: 2
cluster.routing.allocation.node_initial_primaries_recoveries: 4
cluster.routing.allocation.node_concurrent_recoveries: 2
indices.recovery.max_size_per_sec: 0
indices.recovery.concurrent_streams: 5
discovery.zen.minimum_master_nodes: 1
discovery.zen.ping.timeout: 3s
discovery.zen.ping.unicast.hosts: ["10.101.254.223:9300", "10.101.254.221:9300"]
cluster.routing.allocation.allow_rebalance: "indices_all_active"
indices.recovery.concurrent_streams: 3
action.auto_create_index: true
index.mapper.dynamic: true
[설정파일의미]
※ 클러스터링할 그룹명 (묶고자 하는 서버들에 elasticsearch.yml 파일에서 이름을 동일하게 주면 클러스터링 됨)
cluster.name: group1
※ 검색 및 색인 서버로 사용하고자 할 경우 설정
node.master: true
node.data : true
※ 검색 전용 서버로 사용하고자 할 경우 설정 (검색 로드발라서)
node.master: false
node.data : false
※ 색인 전용 서버로 사용하고자 할 경우 설정
node.master: false
node.data : true
※ 이건 용도를 잘 모르겠음
node.master: true
node.data : false
※ 색인 파일(데이터) 사이즈가 작을 경우 수치를 작게 (1), 사이즈가 클 경우 수치를 크게 (기본 5)
※ 하나의 색인 파일을 몇 개로 나눠서 저장할 것인지 정의
index.number_of_shards: 5
※ 색인 파일에 대한 복사본 생성 수치 (기본 1)
index.number_of_replicas: 1
※ 설정 후 서버간 클러스터링 되는 과정을 파악하기 어려움
두 대의 서버에 cluster.name 을 같게 해서 실행 시켜면 자동으로 clustering 됨
※ 서버 한대에서 여러개의 elasticsearch instacne 실행 방법
./elasticsearch -p pidfile1 -Des.config=elasticsearch/config/elasticsearch1.yml
./elasticsearch -p pidfile2 -Des.config=elasticsearch/config/elasticsearch2.yml
※ 기타 옵션
-Xmx1g -Xms1g -Des.max-open-files=true
※ node 의 의미
elasticsearch 에서 node == index 에 의미를 가짐