注: Elasticsearch Kibana 的下载地址统一为https://www.elastic.co/downloads/
问题排查可以登录https://discuss.elastic.co/c论坛查找相关信息
- 安装 Elasticsearch
1.安装Elasticsearch集群(负载、高可用)
下载elasticsearch-2.0.0.tar.gz,执行tar -zxvf elasticsearch-2.0.0.tar.gz解压
修改配置文件config/elasticsearch.yml
如果要配置集群需要两个节点上的elasticsearch配置的cluster.name相同,都启动可以自动组成集群,这里如果不改cluster.name则默认是cluster.name=elasticsearch,nodename随意取但是集群内的各节点不能相同
本人这里另外一台机器配置如图:
最后同时启动可以组成集群
个节点(node)就是一个Elasticsearch实例,而一个集群(cluster)由一个或多个节点组成,它们具有相同的cluster.name,它们协同工作,分享数据和负载。
当加入新的节点或者删除一个节点时,集群就会感知到并平衡数据(同步)。
集群节点
- 集群中一个节点会被选举为主节点(master)
- 主节点临时管理集群级别的一些变更,例如新建或删除索引、增加或移除节点等。
- 主节点不参与文档级别的变更或搜索,这意味着在流量增长的时候,该主节点不会成为集群的瓶颈。
- 任何节点都可以成为主节点。
- 用户,我们能够与集群中的任何节点通信,包括主节点。
- 每一个节点都知道文档存在于哪个节点上,它们可以转发请求到相应的节点上。
- 我们访问的节点负责收集各节点返回的数据,最后一起返回给客户端。这一切都由Elasticsearch处理。
在Elasticsearch集群中可以监控统计很多信息,但是只有一个是最重要的:集群健康(cluster health)。集群健康有三种状态:green、yellow或red。
颜色 | 意义 |
green | 所有主要分片和复制分片都可用 |
yellow | 所有主要分片可用,但不是所有复制分片都可用 |
red | 不是所有的主要分片都可用 |
集群分片
索引只是一个用来指向一个或多个分片(shards)的“逻辑命名空间(logical namespace)”.
分片(shard)是一个最小级别“工作单元(worker unit)”,它只是保存了索引中所有数据的一部分,是一个Lucene实例,并且它本身就是一个完整的搜索引擎。我们的文档存储在分片中,并且在分片中被索引,但是我们的应用程序不会直接与它们通信,取而代之的是,直接与索引通信。
分片是Elasticsearch在集群中分发数据的关键。把分片想象成数据的容器。文档存储在分片中,然后分片分配到你集群中的节点上。当你的集群扩容或缩小,Elasticsearch将会自动在你的节点间迁移分片,以使集群保持平衡。
- 主分片(负载)
索引中的每个文档属于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。
理论上主分片能存储的数据大小是没有限制的,限制取决于你实际的使用情况。分片的最大容量完全取决于你的使用状况:硬件存储的大小、文档的大小和复杂度、如何索引和查询你的文档,以及你期望的响应时间。
- 副分片(高可用)
复制分片只是主分片的一个副本,它可以防止硬件故障导致的数据丢失,同时可以提供读请求,比如搜索或者从别的shard取回文档。
当索引创建完成的时候,主分片的数量就固定了,但是复制分片的数量可以随时调整。
创建分片:
PUT /blogs
{
"settings" : {
"number_of_shards" : 3,
"number_of_replicas" : 1
}
}
增加副分片:
PUT /blogs/_settings
{
"number_of_replicas" : 2
}
主分片设置后不能进行修改,只能修改副本分片
故障转移(两个节点,一个挂了一小时,再启动,数据自动同步)
在单一节点上运行意味着有单点故障的风险——没有数据备份。幸运的是,要防止单点故障,我们唯一需要做的就是启动另一个节点。
第二个节点已经加入集群,三个复制分片(replica shards)也已经被分配了——分别对应三个主分片,这意味着在丢失任意一个节点的情况下依旧可以保证数据的完整性。
文档的索引将首先被存储在主分片中,然后并发复制到对应的复制节点上。这可以确保我们的数据在主节点和复制节点上都可以被检索。
当你索引一个文档,它被存储在单独一个主分片上。Elasticsearch是如何知道文档属于哪个分片的呢?当你创建一个新文档,它是如何知道是应该存储在分片1还是分片2上的呢?
进程不能是随机的,因为我们将来要检索文档。
算法决定:(防止越界)
shard = hash(routing) % number_of_primary_shards
routing值是一个任意字符串,它默认是_id但也可以自定义。
为什么主分片的数量只能在创建索引时定义且不能修改?
如果主分片的数量在未来改变了,所有先前的路由值就失效了,文档也就永远找不到了。
所有的文档API(get、index、delete、bulk、update、mget)都接收一个routing参数,它用来自定义文档到分片的映射。自定义路由值可以确保所有相关文档——例如属于同一个人的文档——被保存在同一分片上。
2.安装elasticsearch-servicewrapper插件
(1)下载elasticsearch-servicewrapper
git clone https://github.com/elasticsearch/elasticsearch-servicewrapper,然后将目录下的service目录拷贝至ES_HOME/bin目录下。
(2)简单配置jvm的内存
修改ES_HOME/bin/service/elasticsearch.conf,set.default.ES_HEAP_SIZE=1024,该值根据机器的配置可自定义。
(3)安装启动服务
执行命令:ES_HOME/bin/service/elasticsearch install
这里需要添加一下执行权限
(4)启动/停止/重启服务
执行命令:ES_HOME/bin/service/elasticsearch start/stop/restart
在bin目录下执行./plugin install mobz/elasticsearch-head来安装head插件
注意:因为elasticsearch有远程执行脚本的功能所以容易中木马病毒,所以不允许用root用户启动,root用户是起不来的,赋权限,用一般的用户启动
要配置network.host和network.publish_host和network.bind_host才能别的机器或者网卡访问,否则只能是127.0.0.1或者localhost访问
注意配置yml结尾的配置文件都需要冒号后面加空格才行
root给用户赋权限
chown -R yyy:yyy ./
添加防脑裂配置(why?自己百度吧)
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping_timeout: 120s
client.transport.ping_timeout: 60s
discovery.zen.ping.unicast.hosts: ["192.168.57.4","192.168.57.5", "192.168.57.6"]
- 安装Kibana
解压安装,修改配置文件vi config/kibana.yml的elasticsearch.url属性即可
- 安装Marvel
Step 1: Install Marvel into Elasticsearch: | bin/plugin install license |
Step 2: Install Marvel into Kibana | bin/kibana plugin --install elasticsearch/marvel/latest |
Step 3: Start Elasticsearch and Kibana | bin/elasticsearch |
Step 4: Navigate to http://localhost:5601/app/marvel |
启动保护:
/bin/elasticsearch -d
我用的是head界面
安装完毕后web:
http://192.168.199.86:9201/_plugin/head/
Elasticsearch-SQL不属于 Elasticsearch 官方的,它是 NLPChina(中国自然语言处理开源组织)开源的一个 ES 插件,主要功能是通过 SQL 来查询 ES,其实它的底层是通过解释 SQL,将SQL 转换为 DSL 语法,再通过DSL 查询。
Elasticsearch-SQL 插件提供了可视化的界面,方便你执行SQL查询,
由于 ES 2.x 和 5.x 的版本区别(详细参考:版本选择),我们安装 ES 插件是有点区别的,
在 5.0之前的安装方式为:plugin install
./bin/plugin install https://github.com/NLPchina/elasticsearch-sql/releases/download/2.4.6.0/elasticsearch-sql-2.4.6.0.zip
在5.0之后(包括6.x)的安装方式为:elasticsearch-plugin install
./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-sql/releases/download/5.0.1/elasticsearch-sql-5.0.1.0.zip
如果我们安装不成功,我们可以直接下载 Elasticsearch-SQL 插件(https://github.com/NLPchina/elasticsearch-sql/tags)的压缩包,然后解压,完成之后重命名文件夹为 sql
,放到 ES 的安装路径的 plugins
目录中。重启es即可。
控制台查询:
http://192.168.199.86:9201/_plugin/sql/
接口查询:
192.168.199.86:9201/_sql?sql=SELECT topStar,name_en FROM nba where topStar ='勒布朗·詹姆斯'
未完待续