Cấu hình và Tối ưu hóa Hiệu năng Elasticsearch

Hệ thống cấu hình cốt lõi của Elasticsearch

Việc vận hành Elasticsearch một cách ổn định đòi hỏi sự hiểu biết sâu sắc về các tệp cấu hình nằm trong thư mục ES_HOME/config. Ba tệp tin quan trọng nhất bao gồm elasticsearch.yml (thiết lập hệ thống), jvm.options (quản lý bộ nhớ ảo Java) và log4j2.properties (quản lý nhật ký hệ thống).

1. Tệp cấu hình hệ thống: elasticsearch.yml

Đây là nơi định nghĩa định danh của cluster, vai trò của node và các giao thức kết nối mạng.

Định danh và Vai trò

# Tên cụm để các node nhận diện nhau
cluster.name: vn-tech-production

# Tên riêng biệt cho từng node
node.name: srv-node-alpha

# Phân định vai trò (Dành cho phiên bản 7.9 trở lên)
# Tách biệt master và data giúp cụm ổn định hơn khi tải cao
node.roles: [ master, data, ingest ]

Giao tiếp mạng và Khám phá node (Discovery)

# Địa chỉ IP để node lắng nghe yêu cầu
network.host: 10.0.0.5

# Cổng giao diện REST API
http.port: 9200

# Cổng giao tiếp nội bộ giữa các node
transport.port: 9300

# Danh sách các node mồi để thiết lập cụm
discovery.seed_hosts: ["10.0.0.5", "10.0.0.6"]

# Các node có quyền bầu chọn master khi khởi tạo lần đầu
cluster.initial_master_nodes: ["srv-node-alpha", "srv-node-beta"]

Lưu trữ và Bảo mật

# Đường dẫn lưu trữ dữ liệu (có thể dùng mảng nếu có nhiều ổ đĩa)
path.data: /mnt/data/es_storage
path.logs: /var/log/es_logs

# Khóa bộ nhớ để tránh swap ảnh hưởng hiệu năng
bootstrap.memory_lock: true

# Kích hoạt bảo mật X-Pack
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

2. Quản lý tài nguyên với jvm.options

Elasticsearch chạy trên nền tảng JVM, do đó việc cấu hình Heap Size và Garbage Collection (GC) là yếu tố quyết định đến tốc độ xử lý.

# Thiết lập bộ nhớ Heap (Xms và Xmx phải bằng nhau)
# Khuyến nghị: Không quá 50% RAM vật lý và không vượt quá 32GB
-Xms8g
-Xmx8g

# Tối ưu hóa Garbage Collector cho Java 8+
-XX:+UseG1GC
-XX:MaxGCPauseMillis=400

3. Kiểm soát nhật ký: log4j2.properties

Tệp này giúp kỹ sư hệ thống theo dõi trạng thái hoạt động và xử lý sự cố thông qua việc phân cấp độ log.

# Cấu hình log cho cluster
logger.cluster.name = org.elasticsearch.cluster
logger.cluster.level = warn

# Chiến lược xoay vòng file log để tránh đầy đĩa
appender.rolling.type = RollingFile
appender.rolling.filePattern = ${sys:es.logs.base_path}/cluster-%d{yyyy-MM-dd}-%i.log.gz
appender.rolling.policies.type = Policies
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size = 500MB

Tối ưu hóa tầng Hệ điều hành (OS)

Trước khi khởi chạy Elasticsearch trong môi trường production, các thông số kernel của Linux cần được điều chỉnh để chịu được số lượng kết nối và tệp tin lớn.

  • Tăng giới hạn file descriptors: Chỉnh sửa /etc/security/limits.conf, đặt giá trị ít nhất là 65535.
  • Tắt Swap: Sử dụng lệnh sudo swapoff -a để đảm bảo RAM không bị đẩy xuống ổ cứng.
  • Điều chỉnh Virtual Memory:
    sysctl -w vm.max_map_count=262144

Cấu hình động qua Cluster API

Một số tham số có thể thay đổi ngay lập tức mà không cần khởi động lại dịch vụ thông qua REST API:

PUT /_cluster/settings
{
  "persistent": {
    "indices.breaker.total.limit": "75%",
    "indices.recovery.max_bytes_per_sec": "100mb"
  }
}

Nguyên tắc vàng khi cấu hình

  • Đồng bộ Xms và Xmx: Giúp JVM không phải tốn tài nguyên cấp phát lại bộ nhớ liên tục.
  • Tránh network.host=0.0.0.0: Trong môi trường thực tế, chỉ nên bind vào IP nội bộ cụ thể để đảm bảo an ninh.
  • Sử dụng Unicast: Luôn chỉ định rõ discovery.seed_hosts thay vì dựa vào cơ chế multicast cũ.
  • Theo dõi Circuit Breaker: Luôn giới hạn ngưỡng bộ nhớ cho các truy vấn để tránh lỗi OutOfMemory (OOM).

Thẻ: Elasticsearch DevOps Database-Optimization backend-infrastructure linux-tuning

Đăng vào ngày 15 tháng 7 lúc 07:59