docker-compose部署es集群
部署环境为centos7
一、docker安装
参考地址:https://docs.docker.com/engine/install/centos/
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
yum list docker-ce --showduplicates | sort –r
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
sudo systemctl start docker
docker run hello-world
二、docker-compose安装
参考地址:https://docs.docker.com/compose/install/
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version
三、ES集群配置
在同一台服务器上模拟ES集群,这里由于一些原因,我选择的是6.8版本的。
1、创建目录
# 数据目录(由于模拟,所以需要创建三个)
mkdir -p /home/es/data/data1
mkdir -p /home/es/data/data2
mkdir -p /home/es/data/data3
# 配置文件目录(由于模拟,所以需要创建三个)
mkdir -p /home/es/config/config1
mkdir -p /home/es/config/config2
mkdir -p /home/es/config/config3
# 其他目录可根据条件自行创建
# ...
2、设置目录权限
chmod 777 /home/es/data/data1
3、docker-compose配置文件
为了便利,我将所有配置放在一个文件中。(如果只是想简单搭建一个es集群可以参考官网https://www.elastic.co/guide/en/elasticsearch/reference/6.8/docker.html)
version: '2.2'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.8.17
container_name: elasticsearch
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
-
- node.master=true
- node.data=true
- node.ingest=true
- node.ml=true
- cluster.remote.connect=true
- network.host=0.0.0.0
- http.port=9200
- transport.port=9300
- "discovery.zen.ping.unicast.hosts=elasticsearch,elasticsearch2"
- discovery.zen.minimum_master_nodes=2
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- /home/es/data/data1:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- esnet
networks:
esnet:
4、启动
docker-compose up -d
docker-compose -f 文件名 up -d
启动后可查看日志
docker logs -f elasticsearch
四、开启安全模式
据了解,es6.8内置了xpack,xpack用于安全权限控制等。但是xpack只提供部分功能。 也可以使用其他方案,nginx或者search guade(开源)。 在这里我使用的是xpack
1.进入es容器,并创建证书
docker ps
docker exec -it 容器ID或名称 /bin/bash
bin/elasticsearch-certutil ca
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
exit
docker cp 容器ID/容器名:/usr/share/elasticsearch/elastic-certificates.p12 宿主机路径
docker cp 容器ID/容器名:/usr/share/elasticsearch/elastic-stack-ca.p12 宿主机路径
- 注意:在创建证书颁发机构和生成证书和私钥的时候,需要输入密码,然后将密码添加进keystore里。但是在实际操作中,我设置密码并将密码添加至keystore后,启动es集群,从节点会报错。所以在创建和生成时,我一路enter。
2.添加配置
environment:
- http.cors.enabled=true
- http.cors.allow-origin=*
- http.cors.allow-headers=Authorization,X-Requested-With,Content-Length,Content-Type
- xpack.security.enabled=true
- xpack.security.authc.accept_default_password=true
- xpack.security.transport.ssl.enabled=true
- xpack.security.transport.ssl.verification_mode=certificate
- xpack.security.transport.ssl.keystore.path=/usr/share/elasticsearch/config/certificates/elastic-certificates.p12
- xpack.security.transport.ssl.truststore.path=/usr/share/elasticsearch/config/certificates/elastic-certificates.p12
volumes:
- 证书路径:/usr/share/elasticsearch/config/certificates
3.设置密码
再次执行docker-compose up启动集群,再打开一个terminal,进入任意一个容器,执行
./bin/elasticsearch-setup-passwords interactive
设置完成后,再访问Elasticsearch集群时,就需要提供用户名和密码才能访问。账号为elastic,密码为设置的密码。
|