์ํฉ: ๊ณผ์ ํ ๋ ์ฐ๋ AWS ElasticSearch Service ๊ฐ ์๊ธ์ด ๋ง์ด ๋์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐฑ์ ํ๊ณ ์ ํ๋ค. ๊ทธ๋ฐ๋ฐ ํน์ ๋์ค์ ์ฝ๋๋ฅผ ๋๋ ค์ผํ ์ ์์ผ๋ ์ฐ๊ตฌ์ค์ ๋ ธ๋ ์ปดํจํฐ์ ES ๋ฅผ ๊น์์ ์ฎ๊ธฐ๊ณ ์ถ๋ค. ๋ธ๋ก๊ทธ ํฌ์คํ ๋ค์ด ๋ง์๋ฐ ์๊ทผํ ์ต๊ทผ ๋ฌธ์๊ฐ ์์ผ๋ ๋ด๊ฐ ํ ๋ฒ ์ ์ด๋ณด์.
๊ณต์ ์ฌ์ดํธ์ ์น์ ํ๊ฒ ์์ํ ๋์ปค ์ด๋ฏธ์ง์ ์ค๋ช ์ด ๋์์๋ค. ์ฌ๊ธฐ์ ํ์์ ๋ฐ๋ผ ๋ช ์ค์ ๋ฐ๊พผ๋ค. ๋ฐ๊พผ ์ฌํญ์
ES_JAVA_OPTS
๋ mem_limit
์ ์์ version: '2'
services:
elasticsearch1:
image: docker.elastic.co/elasticsearch/elasticsearch:5.6.1
container_name: elasticsearch1
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms1g -Xmx1g"
ulimits:
memlock:
soft: -1
hard: -1
mem_limit: 2g
volumes:
- esdata1:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- esnet
elasticsearch2:
image: docker.elastic.co/elasticsearch/elasticsearch:5.6.1
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms1g -Xmx1g"
- "discovery.zen.ping.unicast.hosts=elasticsearch1"
ulimits:
memlock:
soft: -1
hard: -1
mem_limit: 2g
volumes:
- esdata2:/usr/share/elasticsearch/data
networks:
- esnet
kibana:
image: docker.elastic.co/kibana/kibana:5.6.1
depends_on: ['elasticsearch1']
environment:
SERVER_NAME: lab-kibana
ELASTICSEARCH_URL: "http://elasticsearch1:9200"
ports:
- 5601:5601
networks:
- esnet
volumes:
esdata1:
driver_opts:
type: none
device: /hdd/lg_elasticsearch/volumes/esdata1
o: bind
esdata2:
driver_opts:
type: none
device: /hdd/lg_elasticsearch/volumes/esdata2
o: bind
networks:
esnet:
์ด๋ฌ๊ณ docker-compose up
์ ์น๊ณ 5601
ํฌํธ๋ก ํค๋ฐ๋๋ฅผ ๋ค์ด๊ฐ๋ฉด ๋น์ฐํ ์ ๋๋ค. ํค๋ฐ๋์ ๋ค์ด๊ฐ๋ณด๋ AWS ์์ ์ ๊ณตํ๋ ES ๋ณด๋ค ์ฝ๊ฐ ๊ธฐ๋ฅ์ด ๋ ๋ง์๋ค(์ด๋ฅผํ
๋ฉด ๋ชจ๋ํฐ๋ง?). TaskRabbit ์์ ๋ง๋ elasticsearch-dump๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ค์ ์ง์ด๋ฃ๋๋ค.
์ฐ์ฐํ๋๊น ์๋ AWS ์ ๋ค์ด์๋ 12 ๋ง๊ฐ ์ง๋ฆฌ ์ธ๋ฑ์ค๋ง ๊ฐ๋จํ ๋ฃ์ด๋ณด์๋ค. (๋ค๋ฅธ ํ ๊ฐ๋ 4700 ๋ง๊ฐ๋ผ์ ์๊ฐ์ด ์ค๋๊ฑธ๋ฆผโฆ)
Status: Yellow
๊ฐ ๋ณด๊ธฐ ์ซ์ด์?
๊ฒฐ๊ตญ ๋ก์ปฌ ์ปดํจํฐ์ ๋์ปค ๋ณผ๋ฅจ์ ๋ฐฑ์
์ฅ์๋ก ์ผ๊ธฐ์๋ ์ฐ์ฐํ๋ค. ํ๋๋์คํฌ๋ ์ ๋ชป ๋ฏฟ๊ฒ ๊ณ .๋ฐ์ดํฐ๋ ๋ค gzipped json ์ผ๋ก dump ๋ฅผ ๋ ์ s3 ์ ์ฌ๋ ค๋์์ ์ต์ ์ ์ํฉ์ ๋๋นํ๊ณ (70 ๊ธฐ๊ฐ๊ฐ 16 ๊ธฐ๊ฐ๋ก ์ค์๋ค), ์ฐ๊ตฌ์ค ์ปดํจํฐ์ ES ์๋ ์ธ๋ฑ์ฑ์ ๋ค์ ํด๋์์ ์ธ ์ ์๊ฒ ํด๋์๋ค.
AWS ์์ ์ ๊ณตํ๋ ES ๋ฅผ ์ธ ์ ์๋ ํ๋ฌ๊ทธ์ธ์ ๋ชป ๊น์์ ํํ์ ๋ถ์๊ธฐ๋ฅผ ๋ชป ๋ถํ๋๋ฐ ์ ์ง ์ด๋ฒ์๋ ํ ์ ์์ ๊ฒ ๊ฐ๋ค. ๋ธ๋ก๊ทธ์์ ํํ ๋ฆฌ์ผ๋ ๋ง์ด ๋ณธ ๊ฒ ๊ฐ์ผ๋ ๊ณ ๊ณ .
(์ฝ์ง์ฃผ์) ์ผ๋จ ์ปจํ ์ด๋๋ก ๋ค์ด๊ฐ์ ํ๋ฌ๊ทธ์ธ์ ๊น์์ค๋ค.
docker exec -it <์ปจํ
์ด๋ ์ด๋ฆ> /bin/bash
๋ณด๋๊น ์์ ํ๋ข ์ด๋ ๋ฌผ๊ฑด์ ๋ง์ด ์ฐ๋ ๊ฒ ๊ฐ๋ค. ์ค๋ช ์ ์ฐธ์กฐํด์ ์ฌ์ฉ ์ค์ธ ES ๋ฒ์ ๊ณผ ํ์ํ ๋ถ์๊ธฐ ๋ฒ์ ์ ๋ง๊ฒ ์คํฌ๋ฆฝํธ๋ฅผ ๋๋ ค์ค๋ค.
bash <(curl -s https://bitbucket.org/eunjeon/seunjeon/raw/master/elasticsearch/scripts/downloader.sh) -e 5.6.1 -p 5.4.1.0
์คํฌ๋ฆฝํธ๊ฐ ๋๋ค๊ฐ ์ค๊ฐ์ ์ปจํ
์ด๋์ zip ์ด ์ ๊น๋ ค์๋ค๊ณ ์๋ฌ๊ฐ ๋๋ค. ๊ทธ๋ฅ ๋ฉํ์์ ๋ช
๋ น์ด๋ฅผ ์คํํ๊ณ ์์ถํ์ผ์ ์น์ ์ฌ๋ฆฌ๋๊ฒ ํธํ ๊ฒ ๊ฐ๋ค.
ํ์ฌํผ ์์ฑ๋ elasticsearch-analysis-seunjeon-5.4.1.0.zip
ํ์ผ์ ์ปจํ
์ด๋์ ๋ฃ์์ผ๋ฉด
./bin/elasticsearch-plugin install file://`pwd`/elasticsearch-analysis-seunjeon-5.4.1.0.zip
ํ๊ณ ์์ ๋๋ก ์ธ๋ฑ์ค๋ฅผ ๋ง๋๋ ค๋๋ฐ tokenizer ๊ฐ ์ธ์์ด ๋์ง ์๋๋ค. ์๋ฌด๋๋ ์ฌ์์์ ํด์ผํ๋ ๊ฒ ๊ฐ์๋ฐ, ๋์ด ๋์ปค์์ ์คํ๋๊ณ ์๋ ES ๋ฅผ ์ด๋ป๊ฒ ๋ค์ ํค์ง?
์๊ฐํด๋ณด๋ ์ด๋ ๊ฒ ์ปจํ ์ด๋ ํ๋๋ง๋ค ๋ค์ด๊ฐ์ ๊น๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์๋๊ณ , ํ๋ฌ๊ทธ์ธ์ ์ค์นํ๊ณ ๋ค์ ์ผ๋๋ ๊ทธ๋ฅ ์ค์น๋ฅผ ํ ๋ค์์ ์ผ๋๊ฒ ๋์ ๊ฒ ๊ฐ์์ ๊ฐ๋จํ ํํ์ ๋ถ์๊ธฐ๊ฐ ์ด๋ฏธ ๊น๋ ค์๋ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด์ ๊ทธ๊ฑธ ๊ฐ์ง๊ณ ์ปจํ ์ด๋๋ฅผ ๋์ฐ๊ธฐ๋ก ํ๋ค.
FROM docker.elastic.co/elasticsearch/elasticsearch:5.6.1
RUN wget https://www.dropbox.com/s/n59vve9sfguztjg/elasticsearch-analysis-seunjeon-5.4.1.0.zip
RUN ./bin/elasticsearch-plugin install file://`pwd`/elasticsearch-analysis-seunjeon-5.4.1.0.zip
Dockerfile ์ ๋ง๋ค๊ณ compose ์ ์ ๋ ฅํ๋ฉด (์ด๋ ๊ฒ ํ๋ฉด ์ด๋ฏธ์ง๊ฐ ๋ ธ๋ ๊ฐฏ์๋งํผ ๋ง๋ค์ด์ ธ์ ๋ญ๋น๊ฐ ์ฌํ๊ณ ๋จผ์ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ณ ๊ทธ๊ฑธ reference ํ๋๊ฒ ์ข์๋ฏํ๋ค)
build: . #์ด๋ฏธ์ง ๋์
์ ๋์์ง๊ณ , tokenizer ๋ ์ ์ธ์๋๋ค.
mapping ์์ analyzer ๋ฅผ ์ธํ ์ํ๊ณ ๋ฐ์ดํฐ์์ โ์ฅ์ฌ๊พผโ์ ๊ฒ์ํ๋ฉด 8 ๊ฑด์ด ๊ฒ์๋๋ ๊ฒ์ด ์ค์ ์ ํด์ฃผ๊ณ ๋๋ฉด (ํ๋์ ๊ฑธ์ด๋ ๋๊ณ ๋งตํ์ ๊ฑธ์ด๋ ๋๊ณ ๋ฑ๋ฑ ๋ฐฉ๋ฒ์ด ๋ค์ํจ ๋งํฌ) ์กฐ๊ธ ๋ ๋์จ๋ค.