## 一:简介
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。结合logstash,kibana使用,可以用于大型分布式系统数据分析,展现。
官网:https://www.elastic.co/
## 二:ElasticSearch的特性:
1.开源的(不解释)
2.它是分布式和高度可用的搜索引擎。
2.1每个索引根据配置分片的数量完成完全分片。
2.2每个碎片都可以有一个或多个副本。
2.3读/搜索操作可以在任何复制分片上执行。
3.支持多租户与多种类型。
3.1支持一个以上的索引。
3.2支持一个以上的每个索引类型。
3.3指数级配置(数量的碎片,索引存储,…)。
4.各种组api
4.1HTTP RESTful API
4.2本地Java API。
4.3所有api执行自动从路由节点操作。
5.面向文档的
6.可靠异步写操作长期持续。
7.(附近)实时搜索。
8.基于Lucene
8.1每个碎片都是一个功能齐全的Lucene索引
8.2所有Lucene通过简单的配置/插件非常容易的暴露出来。
9.每个操作的一致性 ,单文档级别操作都是原子的、一致的、孤立的和持久的。
## 三:安装elasticsearch单点
### 3.1 下载
官方下载地址:https://www.elastic.co/downloads/elasticsearch
```
wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.4.1/elasticsearch-2.4.1.tar.gz;
```
### 3.2 单点运行
```
nohup ./bin/elasticsearch &
```
### 3.3 测试
```
~/elk/elasticsearch-2.4.0$ curl -X GET http://localhost:9200/
{
"name" : "Hack",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "2.4.0",
"build_hash" : "ce9f0c7394dee074091dd1bc4e9469251181fc55",
"build_timestamp" : "2016-08-29T09:14:17Z",
"build_snapshot" : false,
"lucene_version" : "5.5.2"
},
"tagline" : "You Know, for Search"
}
```
当看到类似以上的返回结果,表示elasticsearch单点安装成功!
### 3.4 目录结构
![](http://7xqnvr.com1.z0.glb.clouddn.com/Elasticsearch%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BAelasticsearch-cluster-setup.png)
* bin:可以执行文件
* config:配置文件
* data:es存放数据的文件
* lib:运行所需类库
* logs:日志文件
* modules:加载模块列表(其实是必要插件)
* plugins:插件文件(需要自定义安装)
> 刚解压的ES并没有这么多目录,只有bin、config、lib、modules,其他都是在第一次运行之后自动生成的。
## 四:集群的搭建
elasticsearch集群的搭建特别的简单:
1. 在集群的每个节点上,将elasticsearch的单点安装好
2. 修改配置文件elasticsearch.yml的cluster.name(集群名称)配置,要求所有节点配置一致
3. 修改配置文件elasticsearch.yml的http.port为9200,所有节点配置统一
> 只要集群名相同,且机器处于同一局域网同一网段,es会自动去发现其他的节点
## 五:elasticsearch.yml中文版
```
# ======================== Elasticsearch Configuration =========================
#
# 注意:大部分的Elasticsearch默认配置都是相对合理的.在你着手调整和优化配置,确保你
#了解什么是你想实现的以及后果是什么。
# 修改节点配置的主要方式就是通过本文件,下面的模板列出了最重要的一些设置,你可以通过它配置一个生产环境集群
# 关于更多的配置项及详细信息请参考文档:
# <http://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html>
#
# ---------------------------------- 集群配置 -----------------------------------
# 集群的名称描述,集群内统一:
cluster.name: aexit-elastic
#
# ------------------------------------节点配置 ------------------------------------
#
# 本节点的名称描述:
node.name: node-1
#
# 为节点添加自定义的属性:
# node.rack: r1
#
# ----------------------------------- 路径 ------------------------------------
#
# 数据存储路径 (多个路径用逗号分割):
# path.data: /path/to/data
#
# 日志文件路径:
# path.logs: /path/to/logs
#
# ----------------------------------- 内存 -----------------------------------
#
# 在启动过程中是否为内存加锁:
# bootstrap.memory_lock: true
#
# 请保证 `ES_HEAP_SIZE` 环境变量的设置大约为系统可用内存的一半
# and that the owner of the process is allowed to use this limit.
#
# 当发生swapping the memory, Elasticsearch 的执行效率很差.
#
# ---------------------------------- 网络 -----------------------------------
#
# 设置绑定的本机ip地址 (IPv4 or IPv6):
network.host: 192.168.1.158
#
# 自定义HTTP端口:
http.port: 9200
#
# 关于更多的信息请参考:
# <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html>
#
# --------------------------------- 服务发现 ----------------------------------
#
# 当新节点加入的时候,配置一个初始化主机列表用于节点发现
# 默认的主机列表是 ["127.0.0.1", "[::1]"]
discovery.zen.ping.unicast.hosts: ["192.168.1.158", "192.168.1.60", "192.168.1.24"]
#
# Prevent the "split brain" by configuring the majority of nodes (total number of nodes / 2 + 1):
# 为了避免脑裂的发生,使用如下配置(数值为节点总数/2 + 1):
discovery.zen.minimum_master_nodes: 2
#
# 关于更多的信息请参考:
# <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery.html>
#
# ---------------------------------- 网关 -----------------------------------
#
# 如果集群发生重启,直到N个节点启动完成,才能开始进行集群初始化恢复动作
gateway.recover_after_nodes: 3
#
# 关于更多的信息请参考:
# <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-gateway.html>
#
# ---------------------------------- 其他 -----------------------------------
#
# 禁止在一个操作系统启动多个节点:
node.max_local_storage_nodes: 1
#
# 删除索引时,需要明确的名称
# action.destructive_requires_name: true
```
## 参考:
http://blog.csdn.net/jiuqiyuliang/article/details/51245335
* 本文没有涉及到的elasticsearch head插件的安装(单点即可)
http://blog.csdn.net/jiuqiyuliang/article/details/51240800