Skip to content

Quick Start BlackHole Core ​

Phần này hướng dẫn cài đặt BlackHole Single Node

Tài liệu hướng dẫn cho bản cài Tarball.

1. Yêu cầu tối thiểu ​

Yêu cầu mỗi VM tối thiểu 2GB RAM, 50 GB Disk.

Danh sách các port bao gồm:

PortThành phần
9200BlackHole REST API
9300Giao tiếp giữa các node (internal), cross cluster search
9600Performance Analyzer

2. Cài đặt BlackHole Core (Ubuntu 24.04) ​

Bước 1: Tải và giải nén BlackHole Core ​

Sử dụng câu lệnh sau để tải xuống file cài đặt:

bash
sudo wget https://docs-blackhole.glabs.one/downloads/blackhole-core/blackhole-core-linux.tar.gz -o /opt/blackhole.tar.gz

Giải nén:

bash
sudo cd /opt
sudo tar -xvf blackhole.tar.gz
sudo mv blackhole-3.1.0 blackhole

Bước 2: Cấu hình thiết lập hệ thống ​

Trên tất cả các VM thực hiện:

  1. Tắt swap để cải thiện hiệu suất:
bash
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab
  1. Tăng số lượng memory maps cho BlackHole:
bash
sudo echo "vm.max_map_count=262144" >> /etc/sysctl.conf

Reload và xác minh:

bash
# Reload cấu hình
sudo sysctl -p

# Xác minh thay đổi
cat /proc/sys/vm/max_map_count
  1. Cấu hình JVM heap (nên set RAM bằng 1/2 RAM của VM):
bash
sed -i 's/^-Xms1g/-Xms2g/' /opt/blackhole/config/jvm.options
sed -i 's/^-Xmx1g/-Xmx2g/' /opt/blackhole/config/jvm.options

Bước 3: Gen Cert ​

Script sau sẽ sinh cert

bash
#!/bin/bash
set -e

BASE_DIR="$(pwd)/certs"
DAYS=3650

NODES=(
  "blackhole-aio"
)

mkdir -p ${BASE_DIR}/{ca,admin,nodes}

echo "[1/6] Create Root CA..."
openssl genrsa -out ${BASE_DIR}/ca/root-ca-key.pem 4096
openssl req -x509 -new -nodes \
  -key ${BASE_DIR}/ca/root-ca-key.pem \
  -sha256 -days ${DAYS} \
  -out ${BASE_DIR}/ca/root-ca.pem \
  -subj "/C=VN/O=BlackHole/OU=PKI/CN=BlackHole-Root-CA"

echo "[2/6] Create Admin certificate..."
openssl genrsa -out ${BASE_DIR}/admin/admin-key.pem 4096
openssl req -new \
  -key ${BASE_DIR}/admin/admin-key.pem \
  -out ${BASE_DIR}/admin/admin.csr \
  -subj "/C=VN/O=BlackHole/OU=Security/CN=admin"

openssl x509 -req \
  -in ${BASE_DIR}/admin/admin.csr \
  -CA ${BASE_DIR}/ca/root-ca.pem \
  -CAkey ${BASE_DIR}/ca/root-ca-key.pem \
  -CAcreateserial \
  -out ${BASE_DIR}/admin/admin.pem \
  -days ${DAYS} -sha256

rm -f ${BASE_DIR}/admin/admin.csr

echo "[3/6] Create Node certificates (DNS-only SAN)..."
for NODE in "${NODES[@]}"; do
  echo "  → ${NODE}"

  cat > ${BASE_DIR}/nodes/${NODE}-ext.cnf <<EOF
subjectAltName = @alt_names
extendedKeyUsage = serverAuth, clientAuth

[alt_names]
DNS.1 = ${NODE}
DNS.2 = ${NODE}.blackhole.local
EOF

  openssl genrsa -out ${BASE_DIR}/nodes/${NODE}-key.pem 4096

  openssl req -new \
    -key ${BASE_DIR}/nodes/${NODE}-key.pem \
    -out ${BASE_DIR}/nodes/${NODE}.csr \
    -subj "/C=VN/O=BlackHole/OU=Infrastructure/CN=${NODE}"

  openssl x509 -req \
    -in ${BASE_DIR}/nodes/${NODE}.csr \
    -CA ${BASE_DIR}/ca/root-ca.pem \
    -CAkey ${BASE_DIR}/ca/root-ca-key.pem \
    -CAcreateserial \
    -out ${BASE_DIR}/nodes/${NODE}.pem \
    -days ${DAYS} -sha256 \
    -extfile ${BASE_DIR}/nodes/${NODE}-ext.cnf

  rm -f ${BASE_DIR}/nodes/${NODE}.csr ${BASE_DIR}/nodes/${NODE}-ext.cnf
done

echo "[6/6] DONE – Certificates ready at: ${BASE_DIR}"

Script sẽ sinh ra các cert như kết quả bên dưới:

bash
gcsc@gcsc:/opt/blackhole/config$ bash gen.sh
[1/6] Create Root CA...
[2/6] Create Admin certificate...
Certificate request self-signature ok
subject=C = VN, O = BlackHole, OU = Security, CN = admin
[3/6] Create Node certificates (DNS-only SAN)...
  → blackhole-aio
Certificate request self-signature ok
subject=C = VN, O = BlackHole, OU = Infrastructure, CN = blackhole-aio
[6/6] DONE – Certificates ready at: /opt/blackhole/config/certs
gcsc@gcsc:/opt/blackhole/config$ ls -la certs/nodes/
total 16
drwxrwxr-x 2 gcsc gcsc 4096 Jan 21 06:57 .
drwxrwxr-x 5 gcsc gcsc 4096 Jan 21 06:57 ..
-rw------- 1 gcsc gcsc 3268 Jan 21 06:57 blackhole-aio-key.pem
-rw-rw-r-- 1 gcsc gcsc 2065 Jan 21 06:57 blackhole-aio.pem
gcsc@gcsc:/opt/blackhole/config$ ls -la certs/ca/
total 20
drwxrwxr-x 2 gcsc gcsc 4096 Jan 21 06:57 .
drwxrwxr-x 5 gcsc gcsc 4096 Jan 21 06:57 ..
-rw------- 1 gcsc gcsc 3272 Jan 21 06:57 root-ca-key.pem
-rw-rw-r-- 1 gcsc gcsc 1956 Jan 21 06:57 root-ca.pem
-rw-rw-r-- 1 gcsc gcsc   41 Jan 21 06:57 root-ca.srl
gcsc@gcsc:/opt/blackhole/config$ ls -la certs/admin
total 16
drwxrwxr-x 2 gcsc gcsc 4096 Jan 21 06:57 .
drwxrwxr-x 5 gcsc gcsc 4096 Jan 21 06:57 ..
-rw------- 1 gcsc gcsc 3272 Jan 21 06:57 admin-key.pem
-rw-rw-r-- 1 gcsc gcsc 1826 Jan 21 06:57 admin.pem

Phân lại quyền để đảm bảo bảo mật

bash
chmod 600 certs/ca/*
chmod 600 certs/admin/*
chmod 600 certs/nodes/*

Bước 4: Cài đặt BlackHole Core ​

  1. Khởi tạo các biến môi trường

    Cài đặt biến môi trường trỏ tới JDK

    bash
    sudo cat >> /etc/environment <<EOF
    BLACKHOLE_JAVA_HOME=/opt/blackhole/jdk
    EOF
    source /etc/environment

    Đặt mật khẩu admin khởi tạo

    bash
    export BLACKHOLE_INITIAL_ADMIN_PASSWORD=<custom-admin-password>
  2. Cấu hình file blackhole.yml như sau

    BlackHole Core:

    bash
    cat >> /opt/blackhole/config/blackhole.yml << EOF
    node.name: blackhole-aio
    discovery.type: single-node
    bootstrap.memory_lock: false
    
    network.host: 0.0.0.0
    plugins.security.disabled: false
    plugins.security.ssl.transport.pemcert_filepath: certs/nodes/blackhole-aio.pem
    plugins.security.ssl.transport.pemkey_filepath: certs/nodes/blackhole-aio-key.pem
    plugins.security.ssl.transport.pemtrustedcas_filepath: certs/ca/root-ca.pem
    plugins.security.ssl.transport.enforce_hostname_verification: false
    
    plugins.security.ssl.http.enabled: true
    plugins.security.ssl.http.pemcert_filepath: certs/nodes/blackhole-aio.pem
    plugins.security.ssl.http.pemkey_filepath: certs/nodes/blackhole-aio-key.pem
    plugins.security.ssl.http.pemtrustedcas_filepath: certs/ca/root-ca.pem
    
    plugins.security.allow_default_init_securityindex: true
    plugins.security.authcz.admin_dn:
      - "CN=admin,OU=Security,O=BlackHole,C=VN"
    
    plugins.security.audit.type: internal_blackhole
    
    plugins.security.enable_snapshot_restore_privilege: true
    plugins.security.check_snapshot_restore_write_privileges: true
    plugins.security.restapi.roles_enabled: [all_access, security_rest_api_access]
    plugins.security.system_indices.enabled: true
    EOF
  3. Khởi chạy BlackHole Core

    bash
    /opt/blackhole/bin/blackhole
  4. Trên một node kiểm tra trạng thái

    bash
    curl -XGET https://localhost:9200/_cat/nodes?v -u 'admin' --insecure

Bước 4 (Optional): Cài đặt BlackHole dưới dạng Service ​

  1. Tạo user blackhole
bash
sudo adduser --system  --shell /bin/bash --no-create-home  blackhole
  1. Thêm user hiện tại vào group blackhole
bash
sudo usermod -g blackhole blackhole
sudo usermod -aG blackhole $USER
  1. Gán quyền sở hữu thư mục cho user
bash
sudo chown -R blackhole:blackhole /opt/blackhole
  1. Tạo file systemd service trên tất cả các node
bash
sudo cat >> /etc/systemd/system/blackhole.service << EOF
[Unit]
Description=BlackHole Search Engine
Wants=network-online.target
After=network-online.target

[Service]
Type=forking
RuntimeDirectory=blackhole

WorkingDirectory=/opt/blackhole
ExecStart=/opt/blackhole/bin/blackhole -d

User=blackhole
Group=blackhole

StandardOutput=journal
StandardError=inherit

LimitNOFILE=65535
LimitNPROC=4096
LimitAS=infinity
LimitFSIZE=infinity

TimeoutStopSec=0
KillSignal=SIGTERM
KillMode=process
SendSIGKILL=no
SuccessExitStatus=143
TimeoutStartSec=75

[Install]
WantedBy=multi-user.target
EOF
  1. Khởi chạy BlackHole
bash
sudo systemctl daemon-reload
sudo systemctl enable blackhole.service
  1. Kiểm tra trạng thái
bash
sudo systemctl status blackhole
  1. Kiểm tra log
bash
journalctl -u blackhole -f

Released under the MIT License.