在 Mapping 里面,将 dynamic 参数设置成 strict 可以拒绝索引包含未知字段的文档。 此条 Tips 由 medcl 贡献。

有了这两个小脚本,不需要再傻乎乎地手动安装 Elasticsearch了

Elasticsearch | 作者 spoofer | 发布于2022年03月11日 | | 阅读数:2480

在学习 ES 前一般都需要安装 ES,虽然 ES 可以开箱即用,但如果要学习分布式特性的时候,需要安装多个节点,这个时候还是有点工作量的。下面提供两个小脚本,一个是在 Ubuntu 中安装 3 节点的 ES 伪集群,一个是在 docker 中安装3节点 ES 集群。除了安装 ES 外,脚本还提供了对应版本的 Kibana、Cerebro 0.9.4 的安装。

1、在 Ubuntu 中安装 ES 7.13

这里我们采取下载 ES 安装包并且解压安装的方式,并没有走 Ubuntu apt 的方式。ES 的安装非常简单,这里先献上安装脚本

下面介绍比较重要的配置项:

  • discovery.seed_hosts 在开箱即用的情境下(本机环境)无需配置,ES 会自动扫描本机的 9300 到 9305 端口。一旦进行了网络环境配置,这个自动扫描操作就不会执行。discovery.seed_hosts 配置为 master 候选者节点即可。如果需要指定端口的话,其值可以为:["localhost:9300", "localhost:9301"]

  • cluster.initial_master_nodes 指定新集群 master 候选者列表,其值为节点的名字列表。如果配置了 node.name: my_node_1,所以其值为 ["my_node_1"],而不是 ip 列表 !

  • network.host 和 http.port 是 ES 提供服务的监听地址和端口,线上一定不能配置 ip 为 0.0.0.0,这是非常危险的行为!!!

怎么样来理解这个 discovery.seed_hosts 和 cluster.initial_master_nodes 呢?

cluster.initial_master_nodes 是候选者列表,一般我们线上环境候选者的数量比较少,毕竟是用来做备用的。而且这个配置只跟选举 master 有关,也就是跟其他类型的节点没有关系。就算你有100个数据节点,然后经常增加或者剔除都不需要动这个列表。

discovery.seed_hosts 这个可以理解为是做服务或者节点发现的,其他节点必须知道他们才能进入集群~ 一般配置为集群的master 候选者的列表。

但是这些 master 候选者(组织联系人)可能经常变化,那怎么办呢?这个配置项除了支持 ip 外还支持域名 ~所以可以用域名来解决这个问题,其他节点的配置上写的是域名,域名解析到对应的 ip,如果机器挂了,新的节点 ip 换了,就把域名解析到新的ip即可,这样其他节点的配就不用修改了。所以非 master 候选节点要配 discovery.seed_hosts (组织联系人)

除了修改 ES 服务配置外,还需要配置 JVM 的配置,我们主要配置服务占用的堆内存的大小。JVM 配置需要以下几点:

  • 这两个 jvm 的配置必须配置一样的数值。启动时就分配好内存空间,避免运行时申请分配内存造成系统抖动。
  • Xmx不要超过机器内存的 50%,留下些内存供 JVM 堆外内存使用
  • 并且Xmx不要超过 32G。建议最大配置为 30G。接近 32G,JVM 会启用压缩对象指针的功能,导致性能下降。具体可以参考:a-heap-of-trouble

安装成功后,可以访问: ES:localhost:9211

Kibana: localhost:5601

cerebro: localhost:9800

2、在docker 中安装 ES 7.13

在做一切工作之前,我们必须安装 docker。如果你已经安装好了 docker、docker-compose,可以访问我为你准备的 docker-compose.yaml 文件。

如果你没有安装 docker,完整的教程可以参考在 docker 中安装 ES 文档

下载此文件,将文件保存为 docker-compose.yaml 后,进入这个文件的目录,执行以下指令即可:

docker-compose up

如果你没有下载镜像文件,docker-compose 会自动帮你下载镜像,并且启动容器。

如果 docker-compose 启动失败,说是无权限链接 docker 的话,其报错如下:

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: 

Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.project%3Ddocker_es%22%3Atrue%7D%7D&limit=0": 

dial unix /var/run/docker.sock: connect: permission denied

可以运行以下指令临时修改:

sudo chmod 666 /var/run/docker.sock

其原因是因为你的 docker 用了 root 启动了。

最后可以访问:

cerebro:ip:9000

Kibana:ip:5601

Elasticsearch: ip:9200,ip:9202,ip:9203

其他学习资料

创建自己的 ES Docker Image

在 docker image 中安装 Elasticsearch 插件

一个开源的 ELK docker-compose 配置

docker 中安装 ES 7.13

docker 中安装 Kibana 7.13

最后附上我写的小册,欢迎刚入门的朋友来订阅~

WX20220224-174733.png


[尊重社区原创,转载请保留或注明出处]
本文地址:http://elasticsearch.cn/article/14531


0 个评论

要回复文章请先登录注册