搭建容器es集群
可参考的官网配置:
version: '2.2' services: es01: image: docker.elastic.co/elasticsearch/elasticsearch:7.2.1 container_name: es01 environment: - node.name=es01 - discovery.seed_hosts=es02 - cluster.initial_master_nodes=es01,es02 - cluster.name=docker-cluster - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - esdata01:/usr/share/elasticsearch/data ports: - 9200:9200 networks: - esnet es02: image: docker.elastic.co/elasticsearch/elasticsearch:7.2.1 container_name: es02 environment: - node.name=es02 - discovery.seed_hosts=es01 - cluster.initial_master_nodes=es01,es02 - cluster.name=docker-cluster - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - esdata02:/usr/share/elasticsearch/data networks: - esnet volumes: esdata01: driver: local esdata02: driver: local networks: esnet:
集群节点发现配置
7.x以后使用参数
discovery.seed_hosts:
- hostname1
- hostname2
这个参数如果是使用docker容器的话,就配置成容器名,或者docker-compose的服务名。
参数表示能够被找到的可以配置成master的节点。
使用docker-compose配置es集群的时候,注意区分compose 文件中的service name 和 container name,这两个参数也要和es配置中的 node.name区别。
如果一个es节点中配置了密码参数如下:
xpack.security.enable: true
xpack.security.transport.ssl.enable: true
就会导致集群发现不了另一个节点。
集群用户密码配置
启用了x-pack模块,那么集群中的各节点之间通讯就必须安全认证。为了解决节点间通讯的认证问,我们需要制作证书。
不然直接生成密码的话, 会报Cause: Cluster state has not been recovered yet, cannot write to the [null]index
elasticsearch-certutil cert
用于生成elastic-certificates.p12 文件,
ps: 也有博客说要先生成证书elasticsearch-certutil ca , 我这边只生成elastic-certificates.p12。
elastic-certificates.p12文件放到config下面,同时传输到集群各节点config下面。
2、elasticsearch.yml设置
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
重启ES
Elasticsearch 有两个级别的通信,传输通信和 http 通信。 传输协议用于 Elasticsearch 节点之间的内部通信,http 协议用于客户端到 Elasticsearch 集群的通信。
个人认为上面只设置了内部传输协议直接的证书,所以只用cert生成 ,没有ca生成。
elasticsearch.yml设置里面也只设置了 xpack.security.transport.ssl, 没有设置xpack.security.http.ssl...
3,开始设置密码:
进入一个节点中,使用 elasticsearch-setup-passwords 或或者 elasticsearch-users 创建密码。
再加入elasticsearch.yml设置
xpack.security.enabled: true
再把密码配置到kibana 中,注意使用权限足够的账户和密码