使用Docker部署Elasticsearch集群

使用Docker来快速部署一套Elasticsearch集群,这里以3节点集群为例:

准备Docker网络

集群节点之间是通过ip进行交互的,所以需要固定一下ip,固定ip之前需要先创建一个Docker私有网络,并固定网段(网段不要和你的内网冲突)

docker network create --subnet=172.16.0.0/24 elasticsearch-br0

准备配置文件

elasticsearch1.yml

cluster.name: "es-cluster"
node.name: es-node-1
network.host: 172.16.0.11

discovery.seed_hosts: ["172.16.0.12", "172.16.0.13"]
cluster.initial_master_nodes: ["172.16.0.11", "172.16.0.12", "172.16.0.13"] # 法定master数量 / 2 + 1

xpack.security.enabled: true
http.cors.enabled: true
http.cors.allow-origin: "*"

elasticsearch2.yml

cluster.name: "es-cluster"
node.name: es-node-2
network.host: 172.16.0.12

discovery.seed_hosts: ["172.16.0.11", "172.16.0.13"]
cluster.initial_master_nodes: ["172.16.0.11", "172.16.0.12", "172.16.0.13"] # 法定master数量 / 2 + 1

xpack.security.enabled: true
http.cors.enabled: true
http.cors.allow-origin: "*"

elasticsearch3.yml

cluster.name: "es-cluster"
node.name: es-node-3
network.host: 172.16.0.13

discovery.seed_hosts: ["172.16.0.11", "172.16.0.12"]
cluster.initial_master_nodes: ["172.16.0.11", "172.16.0.12", "172.16.0.13"] # 法定master数量 / 2 + 1

xpack.security.enabled: true
http.cors.enabled: true
http.cors.allow-origin: "*"

指定IP运行容器

我这里将数据持久化到了docker卷中,通过docker volume ls可以查看。

elasticsearch1

docker run -d --name elasticsearch1 \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -v "$(pwd)"/elasticsearch1.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro \
    -v es-data1:/usr/share/elasticsearch/data:rw \
    -v es-logs1:/usr/share/elasticsearch/logs:rw \
    --network elasticsearch-br0 \
    --ip 172.16.0.11 \
    -p 9201:9200 -p 9301:9300 \
    elasticsearch:7.17.14

elasticsearch2

docker run -d --name elasticsearch2 \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -v "$(pwd)"/elasticsearch2.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro \
    -v es-data2:/usr/share/elasticsearch/data:rw \
    -v es-logs2:/usr/share/elasticsearch/logs:rw \
    --network elasticsearch-br0 \
    --ip 172.16.0.12 \
    -p 9202:9200 -p 9302:9300 \
    elasticsearch:7.17.14

elasticsearch3

docker run -d --name elasticsearch3 \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -v "$(pwd)"/elasticsearch3.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro \
    -v es-data3:/usr/share/elasticsearch/data:rw \
    -v es-logs3:/usr/share/elasticsearch/logs:rw \
    --network elasticsearch-br0 \
    --ip 172.16.0.13 \
    -p 9203:9200 -p 9303:9300 \
    elasticsearch:7.17.14

初始化密码

# 自动生成密码
docker exec elasticsearch1 bash -c "echo y | /usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto"

部署kibana

准备 kibana.yml

server.name: kibana
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.username: "elastic"
elasticsearch.password: "上面初始化生成的密码"

elasticsearch.hosts: ["http://elasticsearch1:9200", "http://elasticsearch2:9200", "http://elasticsearch3:9200"]
i18n.locale: "zh-CN"

准备kibana.sh

docker run -d --name kibana \
    --net elasticsearch-br0 \
    -p 5601:5601 \
    -v "$(pwd)"/kibana.yml:/usr/share/kibana/config/kibana.yml \
    kibana:7.17.14