엘라스틱 서치를 Mac 에 설치하기.
1. brew인스톨 하기.
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2. elasticsearch 설치하기.
brew install homebrew/versions/elasticsearch14
3. elasticsearch 실행하기.
elasticsearch --config=/usr/local/opt/elasticsearch14/config/elasticsearch.yml
4. Shards 와 replicas 조정하기
curl -X PUT "localhost:9200/news" -d '{"setting":{"index":{"number_of_shards":2, "number_of_replicas":1}}}'
{"acknowledged":true}
- 쓰기 속도 향상
- 인덱스 throughtout이 향상됨
B. Replicas개수를 늘이면 :
- 인덱스의 영속성이 증가됨 (즉, 저장 안정성이 올라감)
- 읽기 throughtout이 향상됨
- 그러나 디스크 스페이스는 많이 필요로함.
5. 설정파일 분석
##################### Elasticsearch Configuration Example #####################
# This file contains an overview of various configuration settings,
# targeted at operations staff. Application developers should
# consult the guide at <http://elasticsearch.org/guide>.
# 이 파일은 다양한 설정 전체를 포함하고 있다.
# 어플리케이션 개발자는 <http://elasticsearch.org/guide>를 참고하기 바란다.
#
# The installation procedure is covered at
# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/setup.html>.
# 인스톨 과정은 아래 경로에서 확인해보자.
# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/setup.html>.
# Elasticsearch comes with reasonable defaults for most settings,
# so you can try it out without bothering with configuration.
# Elasticsearch 는 대부분의 의미있는 기본 설정을 지정한다.
# 그러므로 설정을 어렵지 않게 조정할 수 있다.
#
# Most of the time, these defaults are just fine for running a production
# cluster. If you're fine-tuning your cluster, or wondering about the
# effect of certain configuration option, please _do ask_ on the
# mailing list or IRC channel [http://elasticsearch.org/community].
# 대부분 이런 기본 설정들로 실제 사용할 클러스터들에 적용할 수 있다.
# 만약 클러스터 튜닝을 좀더 잘 하고자 하거나, 특정 설정 옵션의 기능에 대해서 알고자 한다면 메일링 리스트
# [http://elasticsearch.org/community] 로 혹은 IRC채널로 문의 바란다.
# Any element in the configuration can be replaced with environment variables
# by placing them in ${...} notation. For example:
#node.rack: ${RACK_ENV_VAR}
#
# 설정에 존재하는 엘리먼트는 환경 변수로 대체할 수 있다. ${...} 표기법을 이용하면 되며 다음 예와 같이 적용할 수 있다.
#node.rack: ${RACK_ENV_VAR}
# For information on supported formats and syntax for the config file, see
# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/setup-configuration.html>
# 지원되는 포맷과 문법에 대해서 정보를 얻고자 한다면 다음 경로에서 찾아보자.
# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/setup-configuration.html>
################################### Cluster [클러스터 설정] ###################################
# Cluster name identifies your cluster for auto-discovery. If you're running
# multiple clusters on the same network, make sure you're using unique names.
#
# 클러스터 이름은 자동으로 검색이될 클러스터의 이름을 지정하는 곳이다.
# 만약 복수개의 클러스터를 동일한 네트워크에서 사용한다면 유니크한 이름을 사용하는 것이 좋다.
cluster.name: elasticsearch_KIDO
#################################### Node #####################################
# Node names are generated dynamically on startup, so you're relieved
# from configuring them manually. You can tie this node to a specific name:
#
# Node 이름들은 실행될때 동적으로 생성된다. 그러므로 수동으로 직접 설정하지 않아도 된다.
# 이 노드 이름을 직접 아래와 같이 지정해도 된다.
#node.name: "Franz Kafka"
# Every node can be configured to allow or deny being eligible as the master,
# and to allow or deny to store the data.
# 각 노드는 allow혹은 deny로 설정이 가능하다. 이것은 마스터의 자격을 가질지 지정하는 것이다.
# 그리고 데이터를 저장할지 여부도 결정할 수 있다.
# Allow this node to be eligible as a master node (enabled by default):
# 아래는 노드를 마스터로 지정될 수 있도록 설정하고 있다. (enabled가 기본값이다.)
#node.master: true
#
# Allow this node to store data (enabled by default):
# 아래는 데이터를 저장할지 여부를 지정한다. (enabled가 기본값이다.)
#node.data: true
# You can exploit these settings to design advanced cluster topologies.
# 아래 설정은 향상된 클러스터 토폴로지 설계를 위해 이용하는 것이다.
# 1. You want this node to never become a master node, only to hold data.
# This will be the "workhorse" of your cluster.
# 1. 만약 이 노드를 절대 마스터 노드로 지정하고 싶지 않고, 데이터만 저장하는 것으로 지정하는 경우라면 다음과 같다.
# 이는 "workhorse" 로 만드는 것이다.
#
#node.master: false
#node.data: true
#
# 2. You want this node to only serve as a master: to not store any data and
# to have free resources. This will be the "coordinator" of your cluster.
# 2. 이 노드를 오직 마스터 서버로만 사용하고자 할때 적용할 수 있다. 데이터를 저장하지 않고, free리소스를 가지는 경우 설정이다.
# 이것은 "coordinator" 로 만든다.
#node.master: true
#node.data: false
#
# 3. You want this node to be neither master nor data node, but
# to act as a "search load balancer" (fetching data from nodes,
# aggregating results, etc.)
# 3. 만약 마스터 노드도 아니고 데이터 노드도 아니게 만들수 있다. 그러나 "search load balancer"로 지정할 수 있다.
# 노드에서 데이터를 패치하고 결과를 집계하는 용도로 사용할 수 있다.
#node.master: false
#node.data: false
# Use the Cluster Health API [http://localhost:9200/_cluster/health], the
# Node Info API [http://localhost:9200/_nodes] or GUI tools
# such as <http://www.elasticsearch.org/overview/marvel/>,
# <http://github.com/karmi/elasticsearch-paramedic>,
# <http://github.com/lukas-vlcek/bigdesk> and
# <http://mobz.github.com/elasticsearch-head> to inspect the cluster state.
# Cluster Health API를 이용하는 것 [http://localhost:9200/_cluster/health],
# 노드 정보 API [http://localhost:9200/_nodes] 혹은
# GUI 툴 <http://www.elasticsearch.org/overview/marvel/>,
# <http://github.com/karmi/elasticsearch-paramedic>,
# <http://github.com/lukas-vlcek/bigdesk> and
# <http://mobz.github.com/elasticsearch-head> 는 클러스터의 상태를 인스펙트 할 수 있다.
# A node can have generic attributes associated with it, which can later be used
# for customized shard allocation filtering, or allocation awareness. An attribute
# is a simple key value pair, similar to node.key: value, here is an example:
# 노드는 generic어트리뷰트를 가지고 연계할 수 있다. 이것은 나중에 샤드 할당 필터링으로 이용할 수 있거나
# 혹은 allocation 인식등에 이용된다.
# attribute는 단순한 key, value쌍으로 구성한다. 이는 node.key: value형태와 유사하다.
#node.rack: rack314
# By default, multiple nodes are allowed to start from the same installation location
# to disable it, set the following:
# 기본적으로 복수 노드들은 동일한 설이 위치부터, disable 가 되는 것까지 다음처럼 설정할 수 있따.
#node.max_local_storage_nodes: 1
#################################### Index 인덱스 ####################################
# You can set a number of options (such as shard/replica options, mapping
# or analyzer definitions, translog settings, ...) for indices globally,
# in this file.
# 다음 몇가지 옵션들을 설정할 수 있다. (shart/replica옵션과 같이, 매핑 혹은 분석 정의를 할 수 있다. 또는 설정 변환등..)
# 글로벌 인덱스 설정은 이 파일에서 지정이 가능하다.
#
# Note, that it makes more sense to configure index settings specifically for
# a certain index, either when creating it or by using the index templates API.
# 노트, 하나의 인덱스를 특별한 인덱스로 설정할 수 있게 만들수 있다. 인덱스를 생성하거나, 인덱스 템플릿 API를 생성하는 것도 가능하다.
#
# See <http://elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules.html> and
# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/indices-create-index.html>
# for more information.
# Set the number of shards (splits) of an index (5 by default):
# 인덱스의 shart의 개수를 지정한다. 5가 기본값이다.
#index.number_of_shards: 5
# Set the number of replicas (additional copies) of an index (1 by default):
# 인덱스의 복제 계수를 지정한다. 1이 기본값이다.
#index.number_of_replicas: 1
# Note, that for development on a local machine, with small indices, it usually
# makes sense to "disable" the distributed features:
# 노트, 로컬 머신에서 개발을 할때에는 작은 인덱스를 지정하고, 보통 분산 기능을 "disable"로 지정한다.
#index.number_of_shards: 1
#index.number_of_replicas: 0
# These settings directly affect the performance of index and search operations
# in your cluster. Assuming you have enough machines to hold shards and
# replicas, the rule of thumb is:
# 이 세팅들은 인덱스와 검색 오퍼레이션의 성능에 직접적인 영향을 주는 것이다.
# 샤드를 홀딩하고 복제를 위한 충분한 머신이 있다고 가정하면 이러한 룰을 적용할 수 있다.
#
# 1. Having more *shards* enhances the _indexing_ performance and allows to
# _distribute_ a big index across machines.
# 1. *shards* 를 많이 가지면 _indexing_ 성능을 향상하고, 큰 인덱스들을 머신에걸쳐 분산할 수 있다.
# 2. Having more *replicas* enhances the _search_ performance and improves the
# cluster _availability_.
# 2. 더 많은 *replicas*를 가지면 _search_성능을 향상하고, 클러스터의 가용성을 더 올릴수 있다.
#
# The "number_of_shards" is a one-time setting for an index.
# "number_of_shards"는 하나의 인덱스에 대한 한번의 세팅이다.
#
# The "number_of_replicas" can be increased or decreased anytime,
# by using the Index Update Settings API.
# "number_of_replicas"는 언제든지 증가되거나 감소될수 있다. 이것은 인덱스 업데이트 설정 API를 이용하면 된다.
# Elasticsearch takes care about load balancing, relocating, gathering the
# results from nodes, etc. Experiment with different settings to fine-tune
# your setup.
# Elasticsearch는 로드 밸런싱, 재할당, 노드 결과 수집 등등을 수행할 수 있다.
# 설정을 통해서 적합한 설정을 실험해 볼 수 있다.
# Use the Index Status API (<http://localhost:9200/A/_status>) to inspect
# the index status.
# Indes Status API를 (<http://localhost:9200/A/_status>) 이용하여 인덱스의 상태를 확인할 수 있다.
#################################### Paths ####################################
# Path to directory containing configuration (this file and logging.yml):
# Path는 설정이 있는 경로를 나타낸다. (이 파일과 logging.yml)이 그것이다.
#path.conf: /path/to/conf
# Path to directory where to store index data allocated for this node.
# Path 인덱스 데이터를 이 노드에 어디에 할당할지를 지정한다.
path.data: /usr/local/var/elasticsearch/
#
# Can optionally include more than one location, causing data to be striped across
# the locations (a la RAID 0) on a file level, favouring locations with most free
# space on creation. For example:
# 산텍적으로 하나 이상의 설정을 지정할 수 있다. 이것은 로케이션을 거쳐서 스트라이프 하도록 데이터를 지정할 수 있다. (RAID 0) 참조
# 대부분 빈 공간으로 설정되도록 하는 것이 좋다.
#
#path.data: /path/to/data1,/path/to/data2
# Path to temporary files:
# Path : 임시 파일
#path.work: /path/to/work
# Path to log files:
# Path : 로그 파일
path.logs: /usr/local/var/log/elasticsearch/
# Path to where plugins are installed:
# Path : 플러그인이 인스톨된 위치
path.plugins: /usr/local/var/lib/elasticsearch/plugins
#################################### Plugin ###################################
# If a plugin listed here is not installed for current node, the node will not start.
# 만약 나열된 플러그인이 현재 노드에 설치되어 있지 않은경우 노드는 시작하지 않는다.
#plugin.mandatory: mapper-attachments,lang-groovy
################################### Memory ####################################
# Elasticsearch performs poorly when JVM starts swapping: you should ensure that
# it _never_ swaps.
# Elasticsearch는 JVM swapping이 시작되면 성능이 형편없이 떨어진다. 그러므로 반드시 _never_ swaps로 지정해야한다.
#
# Set this property to true to lock the memory:
# 이 프로퍼티는 메모리 락을 true로 설정하는 것이다.
#bootstrap.mlockall: true
# Make sure that the ES_MIN_MEM and ES_MAX_MEM environment variables are set
# to the same value, and that the machine has enough memory to allocate
# for Elasticsearch, leaving enough memory for the operating system itself.
# ES_MIN_MEM과 WS_MAX_MEM 환경 변수가 동일한 값으로 설정되어 있는지 확인한다. 그리고 장비가 elasticsearch를 위해
# 메모리를 충분히 할당하였는지 운영체제 자체를 위해 충분한 메모리를 남겨 두었는지 확인하자.
# You should also make sure that the Elasticsearch process is allowed to lock
# the memory, eg. by using `ulimit -l unlimited`.
# 또한 elasticsearch가 메모리 락을 걸수 있도록 설정되어 있는지 확인하자.
# `ulimit -l unlimited`를 이용한다.
############################## Network And HTTP ###############################
# Elasticsearch, by default, binds itself to the 0.0.0.0 address, and listens
# on port [9200-9300] for HTTP traffic and on port [9300-9400] for node-to-node
# communication. (the range means that if the port is busy, it will automatically
# try the next port).
# Elasticsearch는 기본적으로 0.0.0.0 주소로 바인딩 된다. 그리고 포트번호 9200-9300는 HTTP트래픽을 을 리슨한다.
# 9300-9400은 node-to-node커뮤니케이션 용으로 사용된다. (range는 포트가 바쁜경우 자동적으로 다음 포트로 할당되도록 한다.)
# Set the bind address specifically (IPv4 or IPv6):
# 바인드 주소를 지정할 수 있다. (IPv4, IPv6)
#network.bind_host: 192.168.0.1
# Set the address other nodes will use to communicate with this node. If not
# set, it is automatically derived. It must point to an actual IP address.
# 노드와 커뮤니케이션 할 수 있도록 주소를 설정한다. 만약 설정하지 않는다면 자동으로 만들어 진다.
# 이는 반드시 유효한 IP주소에 할당 되어야 한다.
#network.publish_host: 192.168.0.1
# Set both 'bind_host' and 'publish_host':
# 'bind_host'와 'publish_host' 둘다 설정한다.
network.host: 127.0.0.1
# Set a custom port for the node to node communication (9300 by default):
# 커스텀 포트를 설정하여 node to node간 통신을 하도록 한다. (9300은 기본값임)
#transport.tcp.port: 9300
# Enable compression for all communication between nodes (disabled by default):
# 노드간 통신을 압축할지 지정한다. (disabled가 기본값이다.)
#transport.tcp.compress: true
# Set a custom port to listen for HTTP traffic:
# HTTP트래픽을 위한 커스텀 포트를 지정한다.
#http.port: 9200
# Set a custom allowed content length:
# 허용하는 컨텍스트의 크기를 지정한다.
#http.max_content_length: 100mb
# Disable HTTP completely:
# HTTP 를 완젼히 disable하게 만든다.
#http.enabled: false
################################### Gateway ###################################
# The gateway allows for persisting the cluster state between full cluster
# restarts. Every change to the state (such as adding an index) will be stored
# in the gateway, and when the cluster starts up for the first time,
# it will read its state from the gateway.
# gateway는 전체 클러스터들간의 상태를 저장하도록 허용한다. 각 변경은 gateway에 저장된다. (인덱스 포함)
# 그리고 클러스터는 첫번째에 시작되고 gateway로 부터 상태를 읽을 수 있게 된다.
# There are several types of gateway implementations. For more information, see
# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/modules-gateway.html>.
# gateway 구현에 대한 몇가지 타입에 대한 정보를 보고자 한다면 다음을 참조하자.
# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/modules-gateway.html>.
# The default gateway type is the "local" gateway (recommended):
# 기본 gateway는 "local" gateway이며 (추천한다)
#gateway.type: local
# Settings below control how and when to start the initial recovery process on
# a full cluster restart (to reuse as much local data as possible when using shared
# gateway).
# 아래 컨트롤을 어떻게 언제 전체 클러스터 재시작시 복구 프로세스를 시작할지 설정한다. (gateway를 공유할때 가능한한 로컬 데이터를 이용한다.)
# Allow recovery process after N nodes in a cluster are up:
# 복구 프로세스를 허용하여 N개 노드 클러스터가 업된 후에 처리된다.
#gateway.recover_after_nodes: 1
# Set the timeout to initiate the recovery process, once the N nodes
# from previous setting are up (accepts time value):
# 초기 복구 프로세스의 타임아웃을 설정한다. 이느 이전 설정이 올라가고부터 지정되는 값이다.
#gateway.recover_after_time: 5m
# Set how many nodes are expected in this cluster. Once these N nodes
# are up (and recover_after_nodes is met), begin recovery process immediately
# (without waiting for recover_after_time to expire):
# 얼마나 많은 노드가 이 클러스터를 기대하는지 설정한다. N노드들이 올라가고, 복구프로세스는 즉시 수행된다.
# (expire이후 recover를 기다리지 않고)
#gateway.expected_nodes: 2
############################# Recovery Throttling #############################
# These settings allow to control the process of shards allocation between
# nodes during initial recovery, replica allocation, rebalancing,
# or when adding and removing nodes.
# 이 설정들은 노드들이 초기화 복구를 수행, 복제 할당, 리밸런싱, 노드의 삭제, 추가등을 하는 동안에 샤드 할당 처리를 컨트롤 하도록 한다.
# Set the number of concurrent recoveries happening on a node:
# 노드에 동시 복구처리될 개수를 지정한다.
# 1. During the initial recovery
# 1. 초기복구 동안
#cluster.routing.allocation.node_initial_primaries_recoveries: 4
#
# 2. During adding/removing nodes, rebalancing, etc
# 2. 노드를 추가/제거하는 동안 리팰런싱 동안.
#
#cluster.routing.allocation.node_concurrent_recoveries: 2
# Set to throttle throughput when recovering (eg. 100mb, by default 20mb):
# 복구중에 throttle throughput설정 (예, 100mb, 기본은 20ms)
#indices.recovery.max_bytes_per_sec: 20mb
# Set to limit the number of open concurrent streams when
# recovering a shard from a peer:
# open concurrent stream의 수를 제한한다. 이때에는 각 피어로 부터 사드 복구가 수행될때
#indices.recovery.concurrent_streams: 5
################################## Discovery ##################################
# Discovery infrastructure ensures nodes can be found within a cluster
# and master node is elected. Multicast discovery is the default.
# Discovery는 노드들이 클러스터를 찾을 수 있게 한다. 기본 discovery는 기본이다.
# Set to ensure a node sees N other master eligible nodes to be considered
# operational within the cluster. This should be set to a quorum/majority of
# the master-eligible nodes in the cluster.
# 이 설정은 quorum/majority를 설정하는 것으로 마스터로 선출된 노드들을 설정한다.
#discovery.zen.minimum_master_nodes: 1
# Set the time to wait for ping responses from other nodes when discovering.
# Set this option to a higher value on a slow or congested network
# to minimize discovery failures:
# 다른 노드로 부터 ping응답을 기다리는 시간을 설정한다. 이 설정을 높에 갑으면
#discovery.zen.ping.timeout: 3s
# For more information, see
# 더 많은 정보를 보려면
# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/modules-discovery-zen.html>
# Unicast discovery allows to explicitly control which nodes will be used
# to discover the cluster. It can be used when multicast is not present,
# or to restrict the cluster communication-wise.
# Unicast는 노드가 클러스터 복구를 수행되어지는 경우 명시적이 컨트롤이 되도록 한다.
# 이것은 몰티케스트가 없을때 혹은 클러스터 커뮤니케이션 방법에 제약이 갈때 이용될 수 있다.
#
# 1. Disable multicast discovery (enabled by default):
# 1. 멀티캐스트 discovery를 disable한다. (기본값은 enabled이다. )
#discovery.zen.ping.multicast.enabled: false
#
# 2. Configure an initial list of master nodes in the cluster
# to perform discovery when new nodes (master or data) are started:
# 2. 마스터 노드의 초기화 리스트의 설정을 통해서 클러스터내에 새로운 노드라 시작된경우 발견하도록 한다.
#discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]
# EC2 discovery allows to use AWS EC2 API in order to perform discovery.
# EC2 발견은 AWS EC2 API를 사용하도록 한다. 이는 discovery를 위해 사용된다.
# You have to install the cloud-aws plugin for enabling the EC2 discovery.
# cloud-aws플러그인을 설치해야 EC2 discovery를 이용할 수 있다.
# For more information, see
# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/modules-discovery-ec2.html>
#
#
# See <http://elasticsearch.org/tutorials/elasticsearch-on-ec2/>
# for a step-by-step tutorial.
# GCE discovery allows to use Google Compute Engine API in order to perform discovery.
# GCE discovery는 Google Compute Engine API를 이용하도록 해주며, discouvery를 수행한다.
# You have to install the cloud-gce plugin for enabling the GCE discovery.
# cloud-gce플러그인을 설치해야 GCE discovery가 가능하다.
#
# For more information, see <https://github.com/elasticsearch/elasticsearch-cloud-gce>.
# Azure discovery allows to use Azure API in order to perform discovery.
# Azure discovery는 Azure API를 발견하도록 허용한다.
# You have to install the cloud-azure plugin for enabling the Azure discovery.
# cloud-azure플러그인이 설치되어야 Azure 발견이 가능하다.
# For more information, see <https://github.com/elasticsearch/elasticsearch-cloud-azure>.
################################## Slow Log ##################################
# Shard level query and fetch threshold logging.
# Shard 레벨 쿼리와 페치 스레쉬홀드 로깅
#index.search.slowlog.threshold.query.warn: 10s
#index.search.slowlog.threshold.query.info: 5s
#index.search.slowlog.threshold.query.debug: 2s
#index.search.slowlog.threshold.query.trace: 500ms
#index.search.slowlog.threshold.fetch.warn: 1s
#index.search.slowlog.threshold.fetch.info: 800ms
#index.search.slowlog.threshold.fetch.debug: 500ms
#index.search.slowlog.threshold.fetch.trace: 200ms
#index.indexing.slowlog.threshold.index.warn: 10s
#index.indexing.slowlog.threshold.index.info: 5s
#index.indexing.slowlog.threshold.index.debug: 2s
#index.indexing.slowlog.threshold.index.trace: 500ms
################################## GC Logging ################################
#monitor.jvm.gc.young.warn: 1000ms
#monitor.jvm.gc.young.info: 700ms
#monitor.jvm.gc.young.debug: 400ms
#monitor.jvm.gc.old.warn: 10s
#monitor.jvm.gc.old.info: 5s
#monitor.jvm.gc.old.debug: 2s
################################## Security ################################
# Uncomment if you want to enable JSONP as a valid return transport on the
# http server. With this enabled, it may pose a security risk, so disabling
# it unless you need it is recommended (it is disabled by default).
# JSONP를 원하는 경우 커멘트를 제거하여 http서버를 통해 수행할 수 있다.
# 이것을 활성화 하면 보안 리스크가 올 수 있다. 그리고 필요하지 않은경우 disabling으로 설정하기를 추천한다.
#http.jsonp.enable: true