Elasticsearh 入门到放弃

来源:互联网 发布:英雄联盟for mac美服 编辑:程序博客网 时间:2024/06/15 00:41

简介:

Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。不过,Elasticsearch不仅仅是Lucene和全文搜索,我们还能这样去描述它:
  • 分布式的实时文件存储,每个字段都被索引并可被搜索
  • 分布式的实时分析搜索引擎
  • 可以扩展到上百台服务器,处理PB级结构化或非结构化数据
    而且,所有的这些功能被集成到一个服务里面,你的应用可以通过简单的RESTful API、各种语言的客户端甚至命令行与之交互。

软件安装:

  1. 系统准备
  2. 安装JDK,配置Java环境变量
  3. 安装Elasticsearch
  4. 启动Elasticsearch
  5. Elasticsearch目录结构

推荐插件安装:

Marvel,head , Bigdesk

Marvel 是一个收费的插件,个人开发本是可以免费使用的,但是如果在商业行为中使用时需要购买的下简单的例子
这里写图片描述

PUT http://192.168.1.106:9200/library3/ {  "settings":{    "index":{          "number_of_shards": 5,          "number_of_replicas": 1        }    }}GET /library3/_settingsGET library,library2/_settingsGET /_all/_settingsPUT library/books/1{  "title":"Elastisearch: the Definitive Guide",  "name":{    "first":"Zachary",    "last":"Tong"  },  "publish_date":"2015-02-06",  "price":"49.99"}POST /library/books/3 {  "title":"Elastisearch Blueprints",  "name":{    "first":"Vineeth",    "last":"Mohan"  },  "publish_date":"2015-02-06",  "price":"35.99"}GET /library/books/1GET library/books/2GET library/books/1?_source=title,priceGET library/books/1?_source#覆盖跟新PUT library2/shakespare/1{  "title":"Elastisearch: the Definitive Guide",  "name":{    "first":"Zachary",    "last":"Tong"  },  "publish_date":"2015-02-06",  "price":"59.99"}POST library/books/1/_update{  "doc":{    "price":10  }}GET  library/books/1#delete one item DELETE library/books/1DELETE library/booksGET library/booksGET /_mget{  "docs":[    {       "index":"library",      "_type":"books",      "_id":1    },    {      "index":"library",      "_type":"books",      "_id":2    },    {      "index":"library2",      "_type":"shakespare",      "_id":1    }  ]}

Elasticsearch <> Mysql 术语对应关系

对于已经接触了关系型数据的人来说,elasticsearch的数据对应起来是有点困难的。

Relational DB -> Databases -> Tables -> Rows -> ColumnsElasticsearch -> Indices   -> Types  -> Documents -> Fields

分布式的特性

Elasticsearch致力于隐藏分布式系统的复杂性。以下这些操作都是在底层自动完成的:

  • 将你的文档分区到不同的容器或者分片(shards)中,它们可以存在于一个或多个节点中。
  • 将分片均匀的分配到各个节点,对索引和搜索做负载均衡.
  • 冗余每一个分片,防止硬件故障造成的数据丢失。
  • 将集群中任意一个节点上的请求路由到相应数据所在的节点.
  • 无论是增加节点,还是移除节点,分片都可以做到无缝的扩展和迁移。

集群

Elasticsearch用于构建高可用和可扩展的系统。扩展的方式可以是购买更好的服务器(纵向扩展(vertical scale or scaling up))或者购买更多的服务器(横向扩展(horizontal scale or scaling out))。Elasticsearch虽然能从更强大的硬件中获得更好的性能,但是纵向扩展有它的局限性。真正的扩展应该是横向的,它通过增加节点来均摊负载和增加可靠性。

多机集群中的节点可以分为master nodes和data nodes,在配置文件中使用Zen发现(Zen discovery)机制来管理不同节点。Zen发现是ES自带的默认发现机制,使用多播发现其它节点。只要启动一个新的ES节点并设置和集群相同的名称这个节点就会被加入到集群中。

集群的配置:
只需要在配置文件中配置相同的集群名字。elasticsearch将会自己通过多播的方式自动发现集群的其他节点,其他配置稳健的详细配置大家可以自行查看官方文档,最新版本的配置稳健选项相对以前少了很多。
elasticsearch.yml - cluster

设置集群的名称:cluster.name: elasticsearch设置是用来控制分片分配的进程:cluster.routing.allocation.node_initial_primaries_recoveries: 4添加删除节点或负载均衡时并发恢复线程的个数,默认为2:cluster.routing.allocation.node_concurrent_recoveries: 2设置节点的名称:node.name: "Franz Kafka“指定一个主节点:node.master: true1) 当master为false,而data为true时,会对该节点产生比较大的负荷;
 2) 当master为true,而data为false时,该节点作为一个协调者;
 3) 当master为false,data也为false时,该节点就变成了一个负载均衡器。定义节点机架位置:node.rack: rack314设置一台机子能运行的节点数目:node.max_local_storage_nodes: 1

这里写图片描述

持续优化

没有最好的优化方法,只有不断的调试测试。

  • 在预算充足的情况下,服务器尽量配置高些(加内存,加硬盘,最好SSD)
  • 根据业务,规划好索引方面的配置
  • 冷热数据分离,不用的索引可以关闭或者删除
  • 使用适合自己的插件,做好监控

软件层面性能影响因素:
1. 索引
- 分词器
- Segment
2. 分片数量
- 多,会导致交互多
- 少,会导致分片大
3. 副本数量:副本数量多,性能会下降

OS层面优化
选择CentOS 64位
CentOS6.5/6.6/6.7 7以上系统有很大改变,建议稳定后采用。

设置最大文件打开数
ulimit -a 查看
ulimit -SHn 65535
/etc/security/limits.conf 添加 * - nofile 65535

优化相关内核参数

查看当前TCP连接数:netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}‘           更多请参考: Linux(Centos )的网络内核参数优化来提高服务器并发处理能力.txt

FQA
1.Elasticsearch是基于多播自动发其他节点的,国内网上的大多教程都是基于同一网段搭建的环境,那么如过是夸网段的,在不同的Vlan里,Elasticsearch如何发现其他节点?
在配置文件里有一个 discovery.zen.ping.[unicast](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-zen.html#unicast) 在后面添加节点列表就可以了

参考文档:
https://qbox.io/blog/optimizing-elasticsearch-how-many-shards-per-index
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-zen.html#unicast

0 0
原创粉丝点击