Elasticsearh 入门到放弃

简介:

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/_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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值