elasticsearch学习记录
一、基础知识点:
1、所有请求最后加?pretty是表示格式化展示返回值,如果是手动查看信息建议带上,如果是程序去调用不建议带
2、每个索引的主分片和副本分片的数量均是在建立索引的时候指定的,如果不指定,会按照elasticsearch.yml里面配置的来
curl -XPUT 'http://ip:9200/indexName' -d '{"settings":{"number_of_shards":3,"number_of_replicas":1}}'
3、副本分片是作为主分片的备份,当主分片丢失,副本分片将替代主分片
4、主分片的数目在索引创建时就已经确定了下来,但是副本分片可以调整。
curl -XPUT 'http://ip:9200/indexName/_settings' -d '{"number_of_replicas" : 2}'
5、读操作可以同时被主分片或副本分片所处理,所以当你拥有越多的副本分片时,也将拥有越高的吞吐量。(仅仅指在增加新节点的时候,如果节点数不变的话,增加副本性能不会有较为明显的提升,因为副本数增加了,单个副本能获取的源会变少)
6、当某个几点宕机后,虽然副本分片会被自动提升为主分片,此时的读写操作完全不受影响,数据也不会丢失,但是查询集群状态的时候,状态又是yellow,应为副本分片数因为节点丢失而变少。无法达到我们新建索引时定义的量
7、调整对内存方式:设置环境变量(export ES_HEAP_SIZE=10g);更改配置文件config/elasticsearch.in.sh;
8、jvm的最大最小内存配置一样大小,并且最好为操作系统内存的50%,因为Lucene也会大量消耗内存
二、数据操作:
1、一个文档的 _index 、 _type 和 _id 唯一标识一个文档,所以增删改查操作都需指定这3个参数
2、XGET-查询数据,XPUT-更新数据,XPOST-增加数据,XDELETE-删除数据
3、使用_source参数,查询数据的指定字段/website/blog/123?_source=title,text
4、查询数据是否存在curl -i -XHEAD http://localhost:9200/website/blog/123,有-200,无-404
三、状态维护:
1、检查集群健康状况
curl -XGET 'http://ip:9200/_cluster/health?pretty'
查看status字段的值
green:所有的主分片和副本分片都正常运行。
yellow:所有的主分片都正常运行,但不是所有的副本分片都正常运行。
red:有主分片没能正常运行。
2、动态更改配置(临时Transient;永久Persistent)
curl -XPUT 'http://ip:9200/_cluster/settings' -d '{
"persistent" : {
配置信息
},
"transient" : {
配置信息
}}'
3、升级或维护es期间金融自动分片
关闭集群的shard均衡
curl -XPUT 'http://ip:9200/_cluster/settings' -d'{"transient" : { "cluster.routing.allocation.enable" : "none" }}'
停止服务
curl -XPOST 'http://ip:9200/_cluster/nodes/_local/_shutdown'
启动集群的shard均衡
curl -XPUT 'http://ip:9200/_cluster/settings' -d'{ "transient" : { "cluster.routing.allocation.enable" : "all" }}'
四、禁区
1、不要更改垃圾回收器,生产默认使用CMS,不要使用G1GC(BUG较多)
2、不要更改线程池大小
3、无论机器的内存有多大,JVM最大内存不要超过32G,如果操作系统的内存超过64G的话则配置成31G为最佳(超过32G会大大降低系统性能)
五、建议
1、避免使用超高配置的机器
2、操作系统层面禁用swap(swapoff -a)
3、在elasticsearch.yml中配置bootstrap.mlockall: true,让JVM 锁住内存,禁止操作系统交换出去