栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

docker-compose搭建elastsearch 7.6.2集群

docker-compose搭建elastsearch 7.6.2集群

docker-compose 搭建集群

docker-compose.yml

version: '2.2'
services:
  prod01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2
    container_name: prod01
    hostname: prod01
    restart: always
    environment:
      - node.name=prod01
      - network.host=0.0.0.0
      - network.publish_host=ip1
      - cluster.name=prod-es-cluster
      - discovery.seed_hosts=[ip1,ip2,ip3]
      - cluster.initial_master_nodes=[ip1,ip2,ip3]
      - bootstrap.memory_lock=true
      - http.cors.enabled=true
      - http.cors.allow-origin="*"
      - cluster.initial_master_nodes:prod-gateway
      - action.destructive_requires_name=true
     # - path.logs=/opt/dockers/elasticsearch/elastic-es-7.6/logs
     # - xpack.security.enabled=true
     # - xpack.security.transport.ssl.enabled=true
     # - xpack.security.transport.ssl.verification_mode=certificate
     # - xpack.security.transport.ssl.keystore.path=elastic-certificates.p12
     # - xpack.security.transport.ssl.truststore.path=elastic-certificates.p12
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    extra_hosts:
      - "prod-gateway:ip2"
      - "prod01:ip1"
      - "prod02:ip3"
    ulimits:
      memlock:
        soft: -1
        hard: -1
   # 先注释 后面 解开
   # volumes:
    #  - /opt/dockers/elasticsearch/elastic-es/data:/usr/share/elasticsearch/data
    #  - /opt/dockers/elasticsearch/elastic-es/logs:/usr/share/elasticsearch/logs
    #  - /opt/dockers/elasticsearch/elastic-es/config:/usr/share/elasticsearch/config
    ports:
      - 9200:9200
      - 9300:9300
   # logging:
   #   driver: fluentd
   #   options:
   #     fluentd-address: "localhost:24224"
   #     fluentd-retry-wait: '1s'
   #     fluentd-max-retries: '60'
   #     fluentd-async-connect: 'true'
   #     tag: "{{.DaemonName}}.{{.Name}}"
    networks:
      - elastic-prod
networks:
  elastic-prod:
    driver: bridge
volumes:
  data:
    driver: local

先把 volumes 以及内容注释了

 docker-compose  up -d

查看日志

docker logs -f prod01


应该是说明节点间还没互相发现 没有一个master的节点 三个节点都配置好了就不会出这个错误了

docker cp prod01:/usr/share/elasticsearch/config .
docker cp prod01:/usr/share/elasticsearch/data .
docker cp prod01:/usr/share/elasticsearch/logs .

将容器中的cp到 本地
本地文件没有的话会报错
讲这些映射到本地可以方便修改配置
而且在一定程度上能保证重启docker后数据不丢失
也能方便后面做日志的配置

停止

docker-compose down

解开docker-compose.yml的注释

  volumes:
      - /opt/dockers/elasticsearch/elastic-es/data:/usr/share/elasticsearch/data
      - /opt/dockers/elasticsearch/elastic-es/logs:/usr/share/elasticsearch/logs
      - /opt/dockers/elasticsearch/elastic-es/config:/usr/share/elasticsearch/config

重新执行

docker-compose up -d

其它节点依次执行相应的操作

集群搭建完毕
输入

curl -L http://localhost:9200/_cat/nodes 

查看集群信息

elasticsearch 配置xpack

使用

sudo docker exec -it prod01 /bin/bash

进入容器内部 可以看到红色的改变

生成证书文件

./bin/elasticsearch-certutil ca

这里直接回车 生成到当前目录下

输入密码 为了好记 把所有的密码都输入成一个即可

生成了elastic-stack-ca.p12 的文件

生成密钥文件

./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

输入密码

让输入路径 回车即可


最后输入密码

cp elastic-certificates.p12 config/

复制到 config目录下

cd config/
vi elasticsearch.yml


加入配置

i 进入编辑模式
ESC 后 : wq 保存退出
vi命令 不会的自己百度了

cluster.name: "docker-cluster"
network.host: 0.0.0.0
path.logs: /usr/share/elasticsearch/logs
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: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

修改完后 exit 退出容器

cd 到本地的config下面 看到了密钥文件
这个文件每个集群共用 只需要一台主机生成


将这些密钥文件同步到其它主机 需要输入other ip的密码

scp elastic-certificates.p12 other ip:/opt/dockers/elasticsearch/elastic-es/config/

转移到 other ip的主机下
因为容器内部和外部是映射(挂载)关系的,所以直接在
/opt/dockers/elasticsearch/elastic-es/config/ 中编辑 elasticsearch.yml

vi elasticsearch.yml 


分别在两台主机下 重启es

docker restart prod01
docker restart prod02
docker logs  -f prod01 

查看日志

启动失败了 好像是权限问题
进入 本机的config/ 下 赋权

chmod 777 elastic-certificates.p12

重启

docker restart prod01

还是不行

ElasticsearchSecurityException[failed to load SSL configuration [xpack.security.transport.ssl]]; nested: ElasticsearchException[failed to initialize SSL TrustManager]; nested: IOException[keystore password was incorrect]; nested: UnrecoverableKeyException[failed to decrypt safe contents entry: javax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.];
Likely root cause: java.security.UnrecoverableKeyException: failed to decrypt safe contents entry: javax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.
	at java.base/sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:2118)
	at java.base/sun.security.util.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:222)
	at java.base/java.security.KeyStore.load(KeyStore.java:1472)
	at org.elasticsearch.xpack.core.ssl.TrustConfig.getStore(TrustConfig.java:97)
	at org.elasticsearch.xpack.core.ssl.StoreTrustConfig.createTrustManager(StoreTrustConfig.java:65)
	at org.elasticsearch.xpack.core.ssl.SSLService.createSslContext(SSLService.java:427)
	at java.base/java.util.HashMap.computeIfAbsent(HashMap.java:1138)
	at org.elasticsearch.xpack.core.ssl.SSLService.loadConfiguration(SSLService.java:521)
	at org.elasticsearch.xpack.core.ssl.SSLService.loadSSLConfigurations(SSLService.java:501)
	at org.elasticsearch.xpack.core.ssl.SSLService.(SSLService.java:142)
	at org.elasticsearch.xpack.core.ssl.SSLService.(SSLService.java:130)
	at org.elasticsearch.xpack.core.XPackPlugin.createComponents(XPackPlugin.java:259)
	at org.elasticsearch.node.Node.lambda$new$9(Node.java:456)
	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:271)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1621)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
	at org.elasticsearch.node.Node.(Node.java:459)
	at org.elasticsearch.node.Node.(Node.java:257)
	at org.elasticsearch.bootstrap.Bootstrap$5.(Bootstrap.java:221)
	at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:221)
	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:349)
	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:170)
	at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:161)
	at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86)
	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:125)
	at org.elasticsearch.cli.Command.main(Command.java:90)
	<<>>
For complete error details, refer to the log at /usr/share/elasticsearch/logs/prod-es-cluster.log

好像是密码不对 忘了还没输入密码

不要着急
编辑本地目录下的elasticsearch.yml

cluster.name: "docker-cluster"
network.host: 0.0.0.0
path.logs: /usr/share/elasticsearch/logs
#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: elastic-certificates.p12
#xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

注释掉认证部分 然后重启 prod01

docker restart prod01 
sudo docker exec -it prod01 /bin/bash

配置密码

./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password

然后输入密码 建议跟上面一致

./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

继续输密码 一致即可

解开 配置文件的注释

等有时间了 更新 kibana和elasticsearch 的xpack认证

  • 还有java配置es集群

exit 退出docker容器后 docker restart prod01

其它节点都进行这个操作 等其它节点都重启完成后

进入 sudo docker exec -it prod01 /bin/bash 容器内部
设置密码

./bin/elasticsearch-setup-passwords  interactive

这个密码至关重要 一定记住

输入一系列的密码

随后进入退出容器 执行

curl -l http://localhost:9200

报错

{
	"error": {
		"root_cause": [{
			"type": "security_exception",
			"reason": "missing authentication credentials for REST request [/]",
			"header": {
				"WWW-Authenticate": "Basic realm="security" charset="UTF-8""
			}
		}],
		"type": "security_exception",
		"reason": "missing authentication credentials for REST request [/]",
		"header": {
			"WWW-Authenticate": "Basic realm="security" charset="UTF-8""
		}
	},
	"status": 401
}

在xpack认证后就要执行

curl -u elastic localhost:9200

输入密码后 能看到集群信息啦
输错密码会报错

{
	"error": {
		"root_cause": [{
			"type": "security_exception",
			"reason": "failed to authenticate user [elastic]",
			"header": {
				"WWW-Authenticate": "Basic realm="security" charset="UTF-8""
			}
		}],
		"type": "security_exception",
		"reason": "failed to authenticate user [elastic]",
		"header": {
			"WWW-Authenticate": "Basic realm="security" charset="UTF-8""
		}
	},
	"status": 401
}
kibana

kibana.yml

server.name: kibana
server.host: "0.0.0.0"
elasticsearch.hosts: [ "http://ip1:9200/","http://ip2:9200/","http://ip3:9200/" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
elasticsearch.username: "elastic"
elasticsearch.password: 密码

docker-compose.yml

version: "2.2"
services:
  kibana:
    image: kibana:7.6.2
    container_name: kibana
    hostname: kibana
    environment:
      SERVER_NAME: kibana
      server.host: "0.0.0.0"
      i18n.locale: zh-CN
    volumes:
      - /opt/dockers/elasticsearch/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml
    extra_hosts:
      - "prod-gateway:ip1"
      - "prod01:ip2"
      - "prod02:ip3"
    ports:
      - 5601:5601
    networks:
      - elastic-prod
networks:
  elastic-prod:
    driver: bridge

直接执行

docker-compose up -d 

完事

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/612528.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号