Ela9x8hkstics18669144449earch

Elasticsearch是一个基于Apache Lucene并由Elastic开发的开源搜索引擎。它可扩展性、弹性和性能等特性都十分优越,全球各地的公司,包括Mozilla、Facebook、Github、Netflix、eBay、纽约时报等,每天都在使用它。Elasticsearch是大型数据集最受欢迎的分析平台之一,所有你能看到包含搜索引擎的地方都几乎有Elasticsearch的存在。它在操作数据时使用基于文档的方法,并且在用户执行搜索时几乎可以实时解析它。它以JSON格式存储数据,并按索引和类型组织数据。

如果我们在传统关系数据库的组件和Elasticsearch的组件之间进行类比,它们看起来像这样:

数据库或表 → 索引
行/列 → 包含属性的文档
Elasticsearch的优势

它源自Apache Lucene,提供了极其强大的全文搜索功能。
它使用基于文档的体系结构,将复杂的现实世界实体存储为结构化JSON文档。默认情况下,它会索引所有字段,这在搜索时提供了巨大的性能。
它不使用带有索引的模式。文档通过包含它们来添加新字段,从而可以自由添加、删除或更改相关字段,而无需与传统数据库模式升级相关的停机时间。
它对文档执行语言搜索,返回与搜索条件匹配的文档。它使用TFIDF算法对结果进行评分,使更多相关文档在结果列表中更高。
它允许模糊搜索,即使拼写错误的搜索词也可以帮助查找结果。
它支持实时搜索自动完成,在用户键入搜索查询时返回结果。
它使用RESTful API,通过简单、轻量级的界面展示其功能。
Elasticsearch以极快的速度执行复杂查询。它还缓存查询,返回与缓存过滤器匹配的其他请求的缓存结果。
它可以水平扩展,从而可以扩展资源并平衡集群节点之间的负载。
它将索引分解为碎片,每个碎片具有任意数量的副本。每个节点都知道集群中每个文档的位置,并在必要时在内部路由请求以检索数据。
术 语
Elasticsearch使用特定术语来定义其组件。

集群:一起工作的节点集合。
节点:作为集群一部分的单个服务器,存储数据,并参与集群的索引和搜索功能。
索引:具有类似特征的文档集合。
文档:可以编制索引的基本信息单元。
Shard(分片):索引分为多个部分,称为分片,允许索引水平缩放。
副本:索引分片的副本
前期准备
要完成此次demo,我们至少需要以下之一:

已配置好的Rancher部署和Kubernetes集群,或
两个节点,在其中部署Rancher和Kubernetes,或
用于部署Rancher的节点和在托管提供程序(如GKE)中运行的Kubernetes集群。
本文使用Google Cloud Platform,但您也可以使用任何其他提供商或基础架构。

部署Elasticsearch
如果您已经习惯了kubectl,可以直接使用manifest。如果您更喜欢使用Rancher用户界面,请继续往下阅读。

我们将Elasticsearch部署为具有两个服务的StatefulSet:一个是用于与pod通信的headless service,另一个则用于从Kubernetes集群外部与Elasticsearch交互。

svc-cluster.yaml

在Kubernetes中部署Elasticsearch
svc-loadbalancer.yaml

在Kubernetes中部署Elasticsearch
es-sts-deployment.yaml

apiVersion: v1kind: ConfigMapmetadata: name: es-configdata: elasticsearch.yml:| cluster.name: my-elastic-cluster network.host: "0.0.0.0" bootstrap.memory_lock: false discovery.zen.ping.unicast.hosts: elasticsearch-cluster discovery.zen.minimum_master_nodes: 1 xpack.security.enabled: false xpack.monitoring.enabled: false ES_JAVA_OPTS: -Xms512m -Xmx512m---apiVersion: apps/v1beta1kind: StatefulSetmetadata: name: esnodespec: serviceName: elasticsearch replicas: 2 updateStrategy: type: RollingUpdate template: metadata: labels: app: es-cluster spec: securityContext: fsGroup: 1000 initContainers: - name: init-sysctl image: busybox imagePullPolicy: IfNotPresent securityContext: privileged: true command: ["sysctl", "-w", "vm.max_map_count=262144"] containers: - name: elasticsearch resources: requests: memory: 1Gi securityContext: privileged: true runAsUser: 1000 capabilities: add: - IPC_LOCK - SYS_RESOURCE image: docker.elastic.co/elasticsearch/elasticsearch:6.5.0 env: - name: ES_JAVA_OPTS valueFrom: configMapKeyRef: name: es-config key: ES_JAVA_OPTS readinessProbe: httpGet: scheme: HTTP path: /_cluster/health?local=true port: 9200 initialDelaySeconds: 5 ports: - containerPort: 9200 name: es-http - containerPort: 9300 name: es-transport volumeMounts: - name: es-data mountPath: /usr/share/elasticsearch/data - name: elasticsearch-config mountPath: /usr/share/elasticsearch/config/elasticsearch.yml subPath: elasticsearch.yml volumes: - name: elasticsearch-config configMap: name: es-config items: - key: elasticsearch.yml path: elasticsearch.yml volumeClaimTemplates: - metadata: name: es-data spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 5Gi

猜你喜欢

转载自blog.51cto.com/14254839/2367856