FresherKỹ thuậtElasticsearch
Làm sao chạy Elasticsearch local bằng Docker và gửi request đầu tiên?
Thử trả lời trước
Đáp án mẫu
Chạy một container single-node bằng image chính thức, rồi gọi nó qua HTTPS.
docker run -d --name es01 -p 127.0.0.1:9200:9200 \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms1g -Xmx1g" -m 2GB \
docker.elastic.co/elasticsearch/elasticsearch:9.0.0
docker cp es01:/usr/share/elasticsearch/config/certs/http_ca.crt .
curl --cacert http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200
Những điểm cần biết:
- Lần khởi động đầu, Elasticsearch 8 trở lên bật security: TLS cho HTTP và mật khẩu được sinh cho user
elastic, in trong log của container. Reset bằngdocker exec -it es01 bin/elasticsearch-reset-password -u elastic. discovery.type=single-nodebỏ qua các bootstrap check của cluster mà một môi trường dev một node không thể đáp ứng.- Đặt JVM heap bằng nửa bộ nhớ của container, và trên host Linux hãy nâng
vm.max_map_countlên 262144. - Không có volume (
-v esdata:/usr/share/elasticsearch/data) thì dữ liệu mất khi container bị xóa. - Một lần gọi thành công trả về JSON với tên cluster, version và tagline
You Know, for Search.
Bind vào localhost, giữ security bật, và mount volume nếu dữ liệu quan trọng.
Ý chính
- Dùng single-node discovery cho dev local
- Security và TLS bật mặc định từ phiên bản 8
- Heap bằng nửa bộ nhớ container, nâng vm.max_map_count
- Volume giữ dữ liệu sau khi container bị xóa
Câu hỏi nối tiếp thường gặp
- Làm sao thêm Kibana vào setup này?
- Tại sao cluster một node là yellow với index có replica?
Lỗi thường gặp
- Tắt security và mở port 9200 trên mọi interface
- Quên giới hạn bộ nhớ và bị OOM kill