Elasticsearh 入门到放弃
来源:互联网 发布:英雄联盟for mac美服 编辑:程序博客网 时间:2024/06/15 00:41
简介:
Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。不过,Elasticsearch不仅仅是Lucene和全文搜索,我们还能这样去描述它:
- 分布式的实时文件存储,每个字段都被索引并可被搜索
- 分布式的实时分析搜索引擎
- 可以扩展到上百台服务器,处理PB级结构化或非结构化数据
而且,所有的这些功能被集成到一个服务里面,你的应用可以通过简单的RESTful API、各种语言的客户端甚至命令行与之交互。
软件安装:
- 系统准备
- 安装JDK,配置Java环境变量
- 安装Elasticsearch
- 启动Elasticsearch
- 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
- Elasticsearh 入门到放弃
- JDBC入门到放弃
- Freemarker 从入门到放弃
- AWS Lambda 入门到放弃
- kmp从入门到放弃
- Dagger2从入门到放弃
- php入门到放弃 . Day1
- 推送 从入门到放弃
- 推送 从入门到放弃
- Python从入门到放弃
- vim从入门到放弃
- JAVA 从入门到放弃?
- markdown从入门到放弃
- Mycat从入门到放弃
- C++从入门到放弃
- Volatile从入门到放弃
- Eslint 从入门到放弃
- php入门到放弃-语法
- 结构定义
- windows 批处理脚本(batch scripting)
- oracle 简单增删改查语句汇总
- HDU 6027 Easy Summation
- JavaScript 通过function创建对象的思考
- Elasticsearh 入门到放弃
- NET Core 源码浏览站点工具
- 2017年初BAT的JAVA面试题汇集
- file/Shareference 用法
- HDU6024 Building Shops
- 如何复制 Intellij idea 的错误提示信息
- 每日一记
- listControl表格
- ESP8266交叉编译环境搭建之linux篇