下载 Elastic Search 镜像
docker pull elasticsearch:8.2.0
集群部署结构
在一台服务器上,使用Docker部署三个ES容器组成的集群
准备虚拟网络和挂载目录
# 创建虚拟网络
docker network create es-net
# node1 的挂载目录
mkdir -p -m 777 /var/lib/es/node1/plugins
mkdir -p -m 777 /var/lib/es/node1/data
mkdir -p -m 777 /var/lib/es/node1/config
# node2 的挂载目录
mkdir -p -m 777 /var/lib/es/node2/plugins
mkdir -p -m 777 /var/lib/es/node2/data
mkdir -p -m 777 /var/lib/es/node2/config
# node3 的挂载目录
mkdir -p -m 777 /var/lib/es/node3/plugins
mkdir -p -m 777 /var/lib/es/node3/data
mkdir -p -m 777 /var/lib/es/node3/config
设置 max_map_count
必须修改系统参数 max_map_count,否则 Elasticsearch 无法启动:
在 /etc/sysctl.conf 文件中添加 vm.max_map_count=262144
echo 'vm.max_map_count=262144' >>/etc/sysctl.conf
# 立即生效
sysctl -p
启动 Elasticsearch 集群
node1:
docker run -d \
--name=node2 \
--restart=always \
--net es-net \
-p 9200:9200 \
-p 9300:9300 \
-v /var/lib/es/node1/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /var/lib/es/node1/plugins:/usr/share/elasticsearch/plugins \
-v /var/lib/es/node1/data:/usr/share/elasticsearch/data \
-e discovery.seed_hosts=node1,node2,node3 \
-e "ES_JAVA_OPTS=-Xms256m -Xmx256m" \
elasticsearch:8.2.0
node1/config/elasticsearch.yml
cluster.initial_master_nodes: ["node1"]
xpack.security.enabled: false
ingest.geoip.downloader.enabled: false
cluster.name: elastic-nodes
node.name: node1
http.host: 0.0.0.0 # 允许来自其他 IP 的连接
network.host: 0.0.0.0
#以下两项是外部访问http需要开启的项启用跨域资源共享
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.max-age: 1728000
node2:
docker run -d \
--name=node2 \
--restart=always \
--net es-net \
-p 9201:9200 \
-p 9301:9300 \
-v /var/lib/es/node2/plugins:/usr/share/elasticsearch/plugins \
-v /var/lib/es/node2/data:/usr/share/elasticsearch/data \
-e node.name=node2 \
-e node.master=true \
-e network.host=node2 \
-e discovery.seed_hosts=node1,node2,node3 \
-e cluster.initial_master_nodes=node1 \
-e cluster.name=es-cluster \
-e "ES_JAVA_OPTS=-Xms256m -Xmx256m" \
elasticsearch:8.3.3
node3:
docker run -d \
--name=node3 \
--restart=always \
--net es-net \
-p 9202:9200 \
-p 9302:9300 \
-v /var/lib/es/node3/plugins:/usr/share/elasticsearch/plugins \
-v /var/lib/es/node3/data:/usr/share/elasticsearch/data \
-e node.name=node3 \
-e node.master=true \
-e network.host=node3 \
-e discovery.seed_hosts=node1,node2,node3 \
-e cluster.initial_master_nodes=node1 \
-e cluster.name=es-cluster \
-e "ES_JAVA_OPTS=-Xms256m -Xmx256m" \
elasticsearch:8.3.3