一般来说,学习ES都是自己先搭建几台虚拟机,然后在虚拟机里部署ES集群,这样做资源消耗比较大,一般的电脑都没有这么高的配置,我们可以使用Docker来快速部署一套Elasticsearch集群,这里以3节点集群为例:
准备Docker网络
集群节点之间是通过ip进行交互的,所以需要固定一下ip,固定ip之前需要先创建一个Docker私有网络,并固定网段(网段不要和你的内网冲突)
1
| docker network create --subnet=172.16.0.0/24 elasticsearch-br0
|
准备配置文件
elasticsearch1.yml
1 2 3 4 5 6 7 8 9 10
| 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"]
xpack.security.enabled: true http.cors.enabled: true http.cors.allow-origin: "*"
|
elasticsearch2.yml
1 2 3 4 5 6 7 8 9 10
| 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"]
xpack.security.enabled: true http.cors.enabled: true http.cors.allow-origin: "*"
|
elasticsearch3.yml
1 2 3 4 5 6 7 8 9 10
| 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"]
xpack.security.enabled: true http.cors.enabled: true http.cors.allow-origin: "*"
|
指定IP运行容器
我这里将数据持久化到了docker卷中,通过docker volume ls
可以查看。
elasticsearch1
1 2 3 4 5 6 7 8 9
| 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
1 2 3 4 5 6 7 8 9
| 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
1 2 3 4 5 6 7 8 9
| 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
|
初始化密码
1 2
| docker exec elasticsearch1 bash -c "echo y | /usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto"
|
部署kibana
准备 kibana.yml
1 2 3 4 5 6 7 8
| 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
1 2 3 4 5
| 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
|