Elasticsearh 入门到放弃

xiaoxiao2021-02-28  63

简介:

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

软件安装:

系统准备 安装JDK,配置Java环境变量 安装Elasticsearch 启动ElasticsearchElasticsearch目录结构

推荐插件安装:

Marvel,head , Bigdesk

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

PUT http://192.168.1.106:9200/library3/ { "settings":{ "index":{ "number_of_shards": 5, "number_of_replicas": 1 } } } GET /library3/_settings GET library,library2/_settings GET /_all/_settings PUT 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/1 GET library/books/2 GET library/books/1?_source=title,price GET 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/1 DELETE library/books GET library/books GET /_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 -> Columns Elasticsearch -> 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: true 1) 当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

转载请注明原文地址: https://www.6miu.com/read-82036.html

最新回复(0)