搭建 es 集群
- 创建一个es容器和网络
docker create network es_cluster docker run --name es01 --net es_cluster -p 9200:9200 -d -m 512m --privileged docker.elastic.co/elasticsearch/elasticsearch:8.13.4
- 修改es的 elastic 用户密码
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic -i
- 复制容器中的 ssl 证书, 并访问(elk2024自行替换成自己设置的密码)
docker cp es01:/usr/share/elasticsearch/config/certs/http_ca.crt . curl --cacert http_ca.crt -u elastic:elk2024 https://localhost:9200
- 生成加入集群的 token
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node
- 添加更多节点,
${token}
自行替换docker run \ -e ENROLLMENT_TOKEN=${token} \ --name es02 \ --net es_cluster \ -p 9201:9200 \ --privileged \ -m 512M \ -d docker.elastic.co/elasticsearch/elasticsearch:8.13.4
- 查看集群节点
curl --cacert http_ca.crt -u elastic:elk2024 https://localhost:9200/_cat/nodes
- 生成kibana所需要的 token
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
- 创建kibana容器
docker run --name kibana01 --net es_cluster -p 5601:5601 -d docker.elastic.co/kibana/kibana:8.13.4 # 中文版 docker run --name kibana01 --net es_cluster -p 5601:5601 -e I18N_LOCALE=zh-CN -d docker.elastic.co/kibana/kibana:8.13.4
- 查看日志并访问
http://192.168.211.128:5601/?code=836807
, 并输入kibana所需要的 token(记得关闭防火墙)
挂掉主节点, 重新加入集群
需要修改原来主节点的配置文件
docker stop es01
docker cp es01:/usr/share/elasticsearch/config/elasticsearch.yml .
# 修改文件开始
vim elasticsearch.yml
# 删除该配置
# cluster.initial_master_nodes: ["es-01"]
# 添加该配置, ip 配置信息可以查看其它 es 容器中的配置文件
discovery.seed_hosts: ["192.168.160.2:9300"]
# 修改文件结束
docker cp elasticsearch.yml es01:/usr/share/elasticsearch/config/elasticsearch.yml
docker start es01
快速添加新节点进集群脚本
- 创建脚本
es_cluster.sh
#!/bin/bash es_net_name="es_cluster" es_container_name=$1 es_container_port=$2 es_image="docker.elastic.co/elasticsearch/elasticsearch:8.13.4" echo "1. Generate Token ..." token=$(docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node) len=$((${#token}-1)) echo "2. Remove Docker Container If Exist ..." if docker ps -a | grep "${es_container_name}"; then docker stop "${es_container_name}" docker rm -f "${es_container_name}" echo "Remove Docker Container: ${es_container_name}" fi echo "3. Run Docker Container ..." docker run \ -e ENROLLMENT_TOKEN="${token:0:${len}}" \ --name "${es_container_name}" \ --net ${es_net_name} \ -p "${es_container_port}":9200 \ --privileged \ -m 512M \ -d ${es_image} echo "All Finish!"
- 使用
# sh ./es_cluster.sh <container_name> <container_port> sh ./es_cluster.sh es02 9202