docker-compose部署es集群并设置密码

docker-compose部署es集群

部署环境为centos7

一、docker安装

参考地址:https://docs.docker.com/engine/install/centos/
# 1.卸载旧版本
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 

# 2.设置仓库
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 

# 3.安装 Docker Engine-Community
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

# 4.启动docker
sudo systemctl start docker  

# 5.测试
docker run hello-world

# 使用docker ps命令查看,如果没有,说明没启动成功。可能的原因是需要创建daemon.json以设置镜像加速器

二、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 

# 1.将可执行权限应用于二进制文件
sudo chmod +x /usr/local/bin/docker-compose  

# 2.创建软链
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose  

# 3.测试
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
      # 设置jvm堆内存参数。配置足够容量的堆大小以确保Elasticsearch功能和性能是必要的(Elasticsearch JVM使用堆内存最小和最大大小为2 GB(5.X版本以上))
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"   
      - #node  (这些配置可定义es节点的类型(功能))
      # 是否有资格成为主节点(默认为true)  
	  - node.master=true  
      # 是否是数据节点(默认为true)  
      - node.data=true  
	  # 节点摄入(默认为true)  
      - node.ingest=true   
	  # 角色(默认为true)  
	  - node.ml=true   
      # 支持远程集群访问(默认为true)  
	  - cluster.remote.connect=true 
	  
      #network  
	  # 该节点将绑定到此主机名或 IP 地址并将此主机发布(通告)到集群中的其他节点。(0.0.0.0是可接受的 IP 地址,将绑定到所有网络接口)  
	  - network.host=0.0.0.0  
	  # 指定节点应绑定到哪个网络接口以侦听传入请求。一个节点可以绑定到多个接口  
	  #- network.bind_host=127.0.0.1  
	  # 发布主机是节点向集群中的其他节点通告的单一接口,以便这些节点可以连接到它(发布只有一个)  	           
	  #- network.publish_host=127.0.0.1
      # 传入的 HTTP 请求绑定到的端口(默认为9200-9300)  
	  - http.port=9200  
      # 绑定节点之间通信的端口(默认为9300-9400)  
      - transport.port=9300  
  
      #discovery  
      # 此设置提供此节点将尝试联系的其他节点的初始列表  
	  - "discovery.zen.ping.unicast.hosts=elasticsearch,elasticsearch2"  
      # 形成集群的符合主节点条件的最小节点数。为避免脑裂,此设置应设置为符合 master 资格的节点数:(master_eligible_nodes / 2) + 1  
      - 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.yml,可使用
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  
# 配置传输层tls/ssl加密传输  
- 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  
# 配置http层tls/ssl加密传输  
# 这个配置可以用,但是配置后使用浏览器访问es集群是不安全的,可能是证书问题,所以最后没开启
#- xpack.security.http.ssl.enabled=true  
#- xpack.security.http.ssl.keystore.path=/usr/share/elasticsearch/config/certificates/elastic-certificates.p12  
#- xpack.security.http.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,密码为设置的密码。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值