Elasticsearch 初步认识
ES介绍
elasticsearch是一款面向文档的nosql数据库,使用json数据格式作为文档序列号格式。
使用Lucene作为核心来实现所有索引和搜索的功能,使得每个文档的内容都可以被索引、搜索、排序、过滤。
提供了丰富的聚合功能,可以对数据进行多维度分析
对外统一使用REST API接口进行沟通,即Client与Server之间使用HTTP协议通信。
ElasticSearch和mysql对比
ElasticSearch安装
安装JDK,至少1.8或以上版本,java -version
下载和解压缩Elasticsearch安装包,目录结构
启动Elasticsearch:bin\elasticsearch (后台启动nohup ./bin/elasticsearch )直接启动就可以用了,注意使用非root用户启动
检查ES是否启动成功:
Lucene与ES关系
Lucene只是一个库,要使用它必须用Java来作为开发语言并将其直接集成到你的应用中。
Elasticsearch使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能。它通过简单的RESTful API来隐藏Lucene的复杂性,让全文搜索变得简单。 ElasticSearch head总结
集群健康值颜色
elasticsearch.yml详解
ES RestFull API post、put、head、delete
PUT是幂等方法,POST不是。所以PUT用于更新、POST用于新增比较合适。
PUT,DELETE操作是幂等的。所谓幂等是指不管进行多少次操作,结果都一样。
创建操作可以使用POST,也可以使用PUT,区别在于POST是作用在一个集合资源之上的/articles), 而PUT操作是作用在一个具体资源之上的(/articles/123)
HEAD使用: 如果只想检查一下文档是否存在,你可以使用HEAD来替代GET方法,这样就只会返回HTTP头文件
ES疑问解答
Elasticsearch是如何实现Master选举的
1、Elasticsearch的选主是ZenDiscovery模块负责的,主要包含Ping(节点之间通过这个RPC来发现彼此)和Unicast(单播模块包含一个主机列表以控制哪些节点需要ping通)这两部分
2、对所有可以成为master的节点(node.master:true)根据nodeId字典排序,每次选举每个节点都把自己所知道节点排一次序,然后选出第一个(第0位)节点,暂且认为它是master节点。
3、如果对某个节点的投票数达到一定的值(可以成为master节点数n/2+1)并且该节点自己也选举自己,那这个节点就是master。否则重新选举一直到满足上述条件。
Elasticsearch是如何避免脑裂现象的
1、当集群中master候选的个数不小于3个(node.master:true)。可以通过discovery.zen.minimum_master_nodes这个参数的设置来避免脑裂,设置为(N/2)+1
2、假如集群master候选节点为2的时候,这种情况是不合理的,最好把另外一个node.master改成false。如果我们不改节点设置,还是套上面的(N/2)+1公式,此时discovery.zen.minimum_master_nodes应该设置为2。这就出现一个问题,两个master备选节点,只要有一个挂,就选不出master了
客户端在和集群连接时,如何选择特定的节点执行请求的
TransportClient利用transport模块远程连接一个elasticsearch集群。它并不加入到集群中,只是简单的获得一个或者多个初始化的transport地址,并以 轮询 的方式与这些地址进行通信。
并发情况下Elasticsearch如何保证读写一致
1、可以通过版本号使用乐观并发控制,以确保新版本不会被旧版本覆盖,由应用层来处理具体的冲突;
2、另外对于写操作,一致性级别支持quorum/one/all,默认为quorum,即只有当大多数分片可用时才允许写操作。但即使大多数可用,也可能存在因为网络等原因导致写入副本失败,这样该副本被认为故障,分片将会在一个不同的节点上重建。
3、对于读操作,可以设置replication为sync(默认),这使得操作在主分片和副本分片都完成后才会返回;如果设置replication为async时,也可以通过设置搜索请求参数_preference为primary来查询主分片,确保文档是最新版本。
Elasticsearch更新和删除文档的过程
1、删除和更新也都是写操作,但是Elasticsearch中的文档是不可变的,因此不能被删除或者改动以展示其变更;
2、磁盘上的每个段都有一个相应的.del文件。当删除请求发送后,文档并没有真的被删除,而是在.del文件中被标记为删除。 该文档依然能匹配查询,但是会在结果中被过滤掉。当段合并时,在.del文件中被标记为删除的文档将不会被写入新段。
3、在新的文档被创建时,Elasticsearch会为该文档指定一个版本号,当执行更新时,旧版本的文档在.del文件中被标记为删除,新版本的文档被索引到一个新段。旧版本的文档依然能匹配查询,但是会在结果中被过滤掉。
bulk一次最大处理多少数据量
1、bulk会把将要处理的数据载入内存中,所以数据量是有限制的
2、最佳的数据量不是一个确定的数值,它取决于你的硬件,你的文档大小以及复杂性,你的索引以及搜索的负载
3、一般建议是1000-5000个文档,如果你的文档很大,可以适当减少队列,大小建议是5-15MB,默认不能超过100M
4、可以在es的配置文件中修改这个值http.max_content_length: 100mb
create和index的区别
如果数据存在,使用create操作失败,会提示文档已经存在,使用index则可以成功执行
ES的两个web访问工具
ES核心概念总结
Cluster总结
集群当中任何一个节点的通信和与整个es集群通信是等价的
主节点的职责是负责管理集群状态,包括管理分片的状态和副本的状态,以及节点的发现和删除。
只需要在同一个网段之内启动多个es节点,就可以自动组成一个集群。
默认情况下es会自动发现同一网段内的节点,自动组成集群。
版权声明: 本文为 InfoQ 作者【枫林】的原创文章。
原文链接:【http://xie.infoq.cn/article/2e6e872dbbd29a28a45456de7】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论