?主機信息
? ? ? ? 主機配置4Core8GB硬盤大于80GB
主機名 | IP地址 | 角色 |
10-0-17-123 | 10.0.17.123 | es-node1 |
10-0-17-158 | 10.0.17.158 | es-node2 |
kibana-156 | 10.0.17.156 | kibana |
一、環境準備
1. 安裝 Docker
這里就不介紹如何安裝docker了,本文docker版本為20+
2. 主機名與網絡與內核配置
在三臺主機的 /etc/hosts
中添加:
10.0.17.123 10-0-17-123
10.0.17.158 10-0-17-158
10.0.17.156 kibana-156
在三臺主機的/etc/sysctl.conf 添加
net.ipv4.ip_forward = 1
vm.max_map_count=262144
在 /etc/security/limits.conf 添加
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
最后執行 sysctl -p?生效。
3.?目錄結構(在每臺 ES 主機上都創建)
useradd elasticsearch
mkdir -p /opt/es/{data,config,certs}
chown -R elasticsearch:elasticsearch /opt/es
在 Kibana 主機上創建:
mkdir -p /opt/kibana/{config,certs}
chown -R elasticsearch:elasticsearch /opt/kibana
二、生成 CA 和節點/Kibana 證書
推薦在一臺臨時主機(或任一 ES 節點)上統一生成并分發證書。
1.?生成 CA
docker run --rm -v /opt/es/certs:/certs \docker.elastic.co/elasticsearch/elasticsearch:8.18.2 \elasticsearch-certutil ca --pem --out /certs/elastic-stack-ca.zip
# 解壓
unzip /opt/es/certs/elastic-stack-ca.zip -d /opt/es/certs
2.?生成 ES 節點證書
在 /opt/es/certs/instances.yml
中寫入:
instances:- name: "10-0-17-123"ip: ["10.0.17.123"]dns: ["10-0-17-123"]- name: "10-0-17-158"ip: ["10.0.17.158"]dns: ["10-0-17-158"]
然后執行:
docker run --rm -v /opt/es/certs:/certs \docker.elastic.co/elasticsearch/elasticsearch:8.18.2 \elasticsearch-certutil cert --in /certs/instances.yml \--ca-cert /certs/ca/ca.crt --ca-key /certs/ca/ca.key \--pem --out /certs/es-nodes.zip
解壓:?
unzip /opt/es/certs/es-nodes.zip -d /opt/es/certs
3.?生成 Kibana 客戶端證書
mkdir /opt/kibana/chown -R elasticsearch:elasticsearch /opt/kibana/docker run --rm -v /opt/kibana/certs:/certs -v /opt/es/certs/ca:/ca \docker.elastic.co/elasticsearch/elasticsearch:8.18.2 \elasticsearch-certutil cert --name kibana --dns kibana-node --ip 10.0.0.156 \--ca-cert /ca/ca.crt --ca-key /ca/ca.key \--pem --out /certs/kibana.zip
# 解壓
unzip /opt/kibana/certs/kibana.zip -d /opt/kibana/certs
說明:生成后,將
/opt/es/certs
下所有文件(ca.crt
、ca.key
、各節點證書和私鑰)分發到兩臺 ES 主機的/opt/es/certs
;將 Kibana 證書和 CA 證書拷貝到 Kibana 主機的/opt/kibana/certs
。
三、配置 Elasticsearch
1.?編輯 /opt/es/config/elasticsearch.yml
在兩臺 ES 主機(10.0.0.123、10.0.0.158)上,編輯 /opt/es/config/elasticsearch.yml
:
[root@10-0-17-123 ~]# cat /opt/es/config/elasticsearch.yml
cluster.name: es-cluster
node.name: ${HOSTNAME}
network.host: 0.0.0.0node.roles: [ "master", "data", "ingest" ]discovery.seed_hosts:- "10.0.17.123"- "10.0.17.158"
cluster.initial_master_nodes:- "10-0-17-123"- "10-0-17-158"xpack.security.enabled: truexpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.key: certs/10-0-17-123/10-0-17-123.key
xpack.security.transport.ssl.certificate: certs/10-0-17-123/10-0-17-123.crt
xpack.security.transport.ssl.certificate_authorities: [ "certs/ca/ca.crt" ]xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.key: certs/10-0-17-123/10-0-17-123.key
xpack.security.http.ssl.certificate: certs/10-0-17-123/10-0-17-123.crt
xpack.security.http.ssl.certificate_authorities: [ "certs/ca/ca.crt" ]
?在158機器也就是另外一臺ES機器上面只需要將certs的主機名和文件的123替換為158即可,注意,這一步不能出錯。
2.?ES服務的目錄結構?
這是我自己ES服務的目錄結構?
[root@10-0-17-123 ~]# tree /opt/es/
/opt/es/
├── certs
│?? ├── 10-0-17-123
│?? │?? ├── 10-0-17-123.crt
│?? │?? └── 10-0-17-123.key
│?? ├── 10-0-17-158
│?? │?? ├── 10-0-17-158.crt
│?? │?? └── 10-0-17-158.key
│?? ├── ca
│?? │?? ├── ca.crt
│?? │?? └── ca.key
│?? └── instances.yml
├── config
│?? └── elasticsearch.yml
?四、使用 Docker CLI 啟動 ES 容器
docker run -d \--name es-158 \--network host \-e ES_JAVA_OPTS="-Xms6g -Xmx6g" \-e ELASTIC_PASSWORD="Novacao666" \-v /opt/es/data:/usr/share/elasticsearch/data \-v /opt/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro \-v /opt/es/certs:/usr/share/elasticsearch/config/certs:ro \elasticsearch:8.18.2
在另外一臺ES服務啟動命令是一樣的,唯一變化的地方是容器的name。可以自定義,但最好兩個ES服務name不要一樣。
提示:
ELASTIC_PASSWORD
:設置內置elastic
用戶密碼,用于 Kibana 認證。確保宿主機有足夠的內存,并按需調整
ES_JAVA_OPTS
。?最好不要低于1GB,如有報錯那最好就是2GB以上。
五、配置與啟動 Kibana
在 10.0.17.156 主機上,編輯 /opt/kibana/config/kibana.yml
:?
[root@kibana-156 ~]# cat /opt/kibana/config/kibana.yml
server.name: kibana-node
server.host: "0.0.0.0"elasticsearch.hosts:- "https://10.0.17.123:9200"- "https://10.0.17.158:9200"# TLS 證書驗證配置
elasticsearch.ssl.certificateAuthorities:- "/usr/share/kibana/config/certs/ca.crt"elasticsearch.ssl.certificate: "/usr/share/kibana/config/certs/kibana.crt"
elasticsearch.ssl.key: "/usr/share/kibana/config/certs/kibana.key"# 校驗證書和主機名
elasticsearch.ssl.verificationMode: full
這里直接使用ES生成的CA證書認證,所有就不用使用ES的用戶和密碼認證啦~
1. kibana的目錄結構
[root@kibana-156 ~]# tree /opt/kibana/
/opt/kibana/
├── certs
│?? ├── ca.crt
│?? ├── kibana.crt
│?? └── kibana.key
└── config└── kibana.yml2 directories, 4 files
?2. 啟動kibana
docker run -d \--name kibana \--network host \-v /opt/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml:rw \-v /opt/kibana/certs:/usr/share/kibana/config/certs:ro \kibana:8.18.2
六、驗證與后續
1. 驗證集群健康
[root@10-0-17-123 config]# curl -k -u elastic:string@1307 https://10.0.17.123:9200/_cat/nodes
10.0.17.158 19 61 4 0.35 0.39 0.20 dim * 10-0-17-158
10.0.17.123 15 75 8 0.84 0.57 0.42 dim - 10-0-17-123
[root@10-0-17-123 config]# curl -k https://10.0.17.123:9200/_cluster/health?pretty -u elastic:string@1307
{"cluster_name" : "es-cluster","status" : "green","timed_out" : false,"number_of_nodes" : 2,"number_of_data_nodes" : 2,"active_primary_shards" : 3,"active_shards" : 6,"relocating_shards" : 0,"initializing_shards" : 0,"unassigned_shards" : 0,"unassigned_primary_shards" : 0,"delayed_unassigned_shards" : 0,"number_of_pending_tasks" : 0,"number_of_in_flight_fetch" : 0,"task_max_waiting_in_queue_millis" : 0,"active_shards_percent_as_number" : 100.0
}
2. 訪問kibana
瀏覽器打開 https://10.0.17.156:5601
,使用 elastic
或 kibana_system
用戶登錄。?
3.?持久化與備份
-
定期備份
/opt/es/data
-
監控節點資源(CPU、內存、磁盤 I/O)
至此,您已完成基于 Docker CLI 的 Elasticsearch 雙節點集群與 Kibana 的 TLS 安全部署。如有自定義需求(如 X-Pack 高級功能、快照、監控等),可在此基礎上繼續擴展。祝部署順利!