Per creare Elasticsearch su un server Linux, preparare il sistema operativo, aggiungere il repository dei pacchetti Elastic, installare Elasticsearch 8.x, ottimizzare i limiti del kernel, configurare elasticsearch.yml (a nodo singolo o cluster), aprire le porte 9200/9300, abilitare e avviare il servizio, proteggere con HTTPS/password e verificare tramite API REST. Facoltativamente, installare Kibana per dashboard e managemento.
Se desideri creare Elasticsearch su un server Linux per la ricerca, l'analisi o la registrazione, questa guida ti guiderà attraverso una configurazione pulita e orientata alla produzione.
Parleremo di Ubuntu/Debian e delle distribuzioni basate su RHEL, delle impostazioni di sicurezza predefinite in Elasticsearch 8, dell'ottimizzazione delle prestazioni, dell'utilizzo di base delle API e di suggerimenti pratici derivanti da anni di esperienza nell'hosting di carichi di lavoro reali.
Cosa costruirai e a chi è rivolta questa guida?
Questo tutorial aiuta i principianti e gli amministratori di sistema a installare e configurare Elasticsearch 8 su un server Linux. Imposterai un'istanza sicura a nodo singolo o pronta per il cluster, imparerai le basi dell'ottimizzazione del kernel e della JVM ed eseguirai le tue prime query di indice e ricerca. I passaggi sono in linea con le best practice di Elastic e le moderne impostazioni di sicurezza predefinite.
Prerequisiti e requisiti di sistema
- Sistemi operativi supportati: Ubuntu 20.04/22.04/24.04, Debian 11/12, RHEL/CentOS/AlmaLinux/Rocky 8/9
- CPU/RAM: Minimo 2 VCPU e 4 GB RAM (8 GB o più consigliati)
- Memoria su disco: SSD consigliato; pianificare IOPS per carichi di lavoro ad alta indicizzazione
- Reti: Aprire le porte TCP 9200 (HTTP) e 9300 (trasporto/cluster)
- Accesso: Privilegi di root o sudo
- Sincronizzazione dell'orologio: Abilita chrony o systemd-timesyncd per timestamp coerenti
Nota: Elasticsearch 8 include un JDK compatibile. Non è necessario installare Java separatamente.
Comprendere le impostazioni di sicurezza predefinite di Elasticsearch 8
Elasticsearch 8 abilita la sicurezza per impostazione predefinita. HTTPS è attivo e utilizzerai utenti integrati (come elastic) con password. Per gli sviluppatori, è possibile eseguire un singolo nodo con una configurazione minima. Per la produzione, configurare TLS, utenti/ruoli e limitare l'esposizione della rete.
Installa Elasticsearch su Ubuntu/Debian
Questi passaggi aggiungono il repository APT di Elastic e installano l'ultima versione 8.x.
sudo apt update && sudo apt install -y curl gnupg apt-transport-https
# Import Elastic GPG key
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic.gpg
# Add APT repository
echo "deb [signed-by=/usr/share/keyrings/elastic.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | \
sudo tee /etc/apt/sources.list.d/elastic-8.x.list
sudo apt update
sudo apt install -y elasticsearch
L'installatore può stampare una password temporanea per l' elastic Posizioni dei file utente e certificato. Salvarli in modo sicuro.
Installa Elasticsearch su RHEL/CentOS/AlmaLinux/Rocky
sudo dnf install -y curl gnupg
# Create YUM repo
cat <<'EOF' | sudo tee /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-8.x]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
sudo dnf clean all
sudo dnf install -y elasticsearch
Ottimizzazione del kernel e del sistema operativo (obbligatoria)
Elasticsearch si basa su mappature della memoria virtuale e file aperti. Impostali prima del primo avvio.
# Virtual memory mappings
echo "vm.max_map_count=262144" | sudo tee /etc/sysctl.d/99-elasticsearch.conf
sudo sysctl --system
# File descriptors and processes for the elasticsearch user
echo -e "elasticsearch soft nofile 65536\nelasticsearch hard nofile 65536\nelasticsearch soft nproc 4096\nelasticsearch hard nproc 4096" | \
sudo tee /etc/security/limits.d/90-elasticsearch.conf
# Optional: reduce swap aggressiveness
echo "vm.swappiness=1" | sudo tee /etc/sysctl.d/98-swappiness.conf
sudo sysctl --system
Per bloccare la memoria (aiutando a evitare lo swapping), abilitare il blocco della memoria e regolare i limiti di systemd.
# In elasticsearch.yml
# bootstrap.memory_lock: true
# Create systemd override to allow memlock
sudo systemctl edit elasticsearch
# Then add:
# [Service]
# LimitMEMLOCK=infinity
sudo systemctl daemon-reload
Configura elasticsearch.yml
Modificare il file di configurazione principale per impostare l'identità del nodo, il binding di rete e la modalità cluster.
sudo nano /etc/elasticsearch/elasticsearch.yml
Per un singolo nodo sicuro (sviluppo/test):
cluster.name: my-es-cluster
node.name: node-1
network.host: 0.0.0.0 # or a private IP; avoid exposing to the internet
discovery.type: single-node
xpack.security.enabled: true # On by default in 8.x
Per un cluster multi-nodo pronto per la produzione (esempio):
cluster.name: prod-es
node.name: es-1
network.host: 10.0.1.10
discovery.seed_hosts: ["10.0.1.10", "10.0.1.11", "10.0.1.12"]
cluster.initial_master_nodes: ["es-1", "es-2", "es-3"]
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.http.ssl.enabled: true
Per TLS, utilizzare lo strumento di certificazione integrato o la PKI. Elasticsearch 8 genera certificati di servizio durante l'installazione; è possibile rigenerarli con elasticsearch-certutil strumento.
Avviare, abilitare e verificare il servizio
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
sudo systemctl status elasticsearch
# Logs
sudo journalctl -u elasticsearch -f
Se necessario, ottenere o reimpostare la password del superutente integrata:
# If shown at install, use that. Otherwise:
sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
Verifica tramite HTTPS (il certificato può essere autofirmato):
curl -u elastic https://localhost:9200 -k
# Expect cluster info JSON
Aprire le porte del firewall (se necessario)
Per lo sviluppo a nodo singolo, potrebbe essere necessario solo 9200. Per i cluster, aprire 9300 solo su reti private.
# UFW (Ubuntu)
sudo ufw allow 9200/tcp
sudo ufw allow 9300/tcp
sudo ufw reload
# firewalld (RHEL-based)
sudo firewall-cmd --permanent --add-port=9200/tcp
sudo firewall-cmd --permanent --add-port=9300/tcp
sudo firewall-cmd --reload
Utilizzo base di Elasticsearch: creazione di indice, indicizzazione dei documenti, ricerca
Utilizzare l'API REST per convalidare la funzionalità. Sostituire la password di conseguenza.
# Create an index with 1 shard and 1 replica (adjust for your cluster)
curl -k -u elastic:YOUR_PASSWORD -X PUT "https://localhost:9200/blog?pretty" \
-H 'Content-Type: application/json' \
-d '{ "settings": { "number_of_shards": 1, "number_of_replicas": 1 } }'
# Index a document (auto-generate ID)
curl -k -u elastic:YOUR_PASSWORD -X POST "https://localhost:9200/blog/_doc?pretty" \
-H 'Content-Type: application/json' \
-d '{ "title": "Hello Elasticsearch", "tags": ["linux","search"], "published": true }'
# Search
curl -k -u elastic:YOUR_PASSWORD "https://localhost:9200/blog/_search?q=title:hello&pretty"
Facoltativo: installa Kibana
Kibana fornisce una GUI per managemento, dashboard e strumenti di sviluppo.
# Ubuntu/Debian
sudo apt install -y kibana
# RHEL-based
sudo dnf install -y kibana
Associa Kibana a un'interfaccia sicura e registralo con Elasticsearch 8:
# /etc/kibana/kibana.yml
server.host: "0.0.0.0" # or private IP
elasticsearch.hosts: ["https://localhost:9200"]
# Enrollment (generates a token from ES)
sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
sudo /usr/share/kibana/bin/kibana-setup --enrollment-token <TOKEN>
sudo systemctl enable --now kibana
Elementi essenziali per l'ottimizzazione delle prestazioni
- Dimensione heap: Imposta circa il 50% di RAM (max ~31 GB) per un'efficienza OOPs compressa.
- Memoria su disco: Preferire NVMe/SSD. Evitare l'archiviazione remota o in rete per i dati più importanti.
- Frammenti: Non sovrasuddividere. Inizia con 1-2 shard primari per indice; regola in base al volume di dati e allo SLA.
- Aggiornamenti e repliche: Ridurre il numero di repliche per aumentare la velocità di acquisizione; aumentarlo per aumentare la disponibilità.
- Pipeline di acquisizione: Utilizzare i nodi di ingestione Elasticsearch o Logstash per un'analisi approfondita.
Imposta heap tramite l'override di jvm.options.d:
echo "-Xms4g" | sudo tee /etc/elasticsearch/jvm.options.d/heap.options
echo "-Xmx4g" | sudo tee -a /etc/elasticsearch/jvm.options.d/heap.options
sudo systemctl restart elasticsearch
Lista di controllo per il rafforzamento della sicurezza
- Non esporre mai 9200/9300 alla rete Internet pubblica. Utilizza reti private, VPN o proxy inversi con TLS.
- Utilizza password complesse o SSO (SAML/OIDC). Crea ruoli con ambito limitato per le app.
- Ruotare i certificati, disabilitare i cifrari deboli e associarli a TLS 1.2+.
- Abilitare la registrazione degli audit per esigenze di conformità.
- Eseguire regolarmente il backup con snapshot (compatibili con S3 o NFS).
# Create a repository for snapshots (example: S3)
PUT _snapshot/my_s3_repo
{
"type": "s3",
"settings": {
"bucket": "my-es-backups",
"region": "us-east-1"
}
}
# Trigger a snapshot
PUT _snapshot/my_s3_repo/snap-001?wait_for_completion=true
Aggiornamenti e riavvii continui
- Istantanea prima degli aggiornamenti.
- Controlla la compatibilità dei plugin e gli avvisi di deprecazione in
_cluster/settingse registri. - Nei cluster, eseguire riavvii progressivi: arrestare un nodo, eseguire l'aggiornamento, avviare, attendere il verde, ripetere.
- Mantenere le versioni secondarie allineate tra i nodi per evitare incompatibilità.
Risoluzione dei problemi comuni
- Il servizio non si avvia: Vedi
journalctl -u elasticsearch -eper errori di autorizzazione o di blocco della memoria. max virtual memory areas vm.max_map_count: Riapplicare sysctl e riavviare se necessario.- Grappolo rosso/giallo: Ispezione
/_cluster/healthe/_cat/shards; risolvere problemi di allocazione o limiti di archiviazione. - Errori di autorizzazione: Reimposta il
elasticpassword utente e verifica certificati. - Utilizzo elevato dell'heap: Aumentare l'heap con cautela, ridurre il numero di frammenti o ottimizzare query/mapping.
Suggerimento per un hosting conveniente (dalle trincee)
Elasticsearch prospera su un'elevata velocità CPU, RAMe SSD, ma i costi possono aumentare. Se inizi in piccolo o stai migrando da ambienti condivisi, YouStableI server VPS e cloud con SSD di offrono un rapporto prezzo/prestazioni bilanciato per Elasticsearch. Richiedi al supporto immagini ottimizzate con i limiti del kernel e le impostazioni predefinite della JVM preconfigurate per ridurre il time-to-value.
Riepilogo delle migliori pratiche
- Installa Elasticsearch 8 dai repository ufficiali per ottenere impostazioni di sicurezza predefinite e aggiornamenti.
- Applica limiti al kernel (vm.max_map_count, nofile, nproc) e abilita il blocco della memoria.
- Collegati agli IP privati e proteggi le porte con un firewall o gruppi di sicurezza.
- Heap di dimensioni corrette (≈50%) RAM), evitate l'oversharding e utilizzate gli SSD.
- Automatizzare gli snapshot e testare i ripristini regolarmente.
Domande Frequenti
Devo installare Java per eseguire Elasticsearch 8 su Linux?
Di solito no. Elasticsearch 8 include un JDK compatibile di default. Installa una versione Java personalizzata solo se hai esigenze specifiche e assicurati che le versioni corrispondano alla matrice di compatibilità di Elastic.
Quali porte devono essere aperte per Elasticsearch?
Porta 9200 (API HTTPS/HTTP) e 9300 (trasporto per clustering). Mantenere la porta 9300 privata. Evitare di esporre la porta 9200 alla rete Internet pubblica; limitare l'accesso tramite regole firewall, VPN o un proxy inverso autenticato.
Quali sono le impostazioni heap e hardware consigliate?
Assegnare circa il 50% delle risorse disponibili RAM all'heap Java (fino a ~31 GB). Utilizzare storage SSD o NVMe e garantire IOPS adeguati. Iniziare con 2 vCPU/ 4 GB RAM minimo; 8–16 GB RAM è comodo per carichi di lavoro moderati.
Come faccio a reimpostare la password utente elastica?
Esegui: sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elasticConservare le password in un archivio sicuro e aggiornare tutte le applicazioni che eseguono l'autenticazione nel cluster.
Come posso eseguire il backup e il ripristino dei dati Elasticsearch?
Utilizza snapshot e ripristino. Registra un repository (S3, GCS, Azure o file system condiviso), quindi attiva gli snapshot. Per ripristinare, crea una richiesta di ripristino dell'indice dal repository degli snapshot. Testa sempre prima i ripristini su ambienti non di produzione.