ElasticSearch初探
单个索引本质上可以存储大量数据(可能超出单个节点的硬件限制),比如,一个索引里包含了十亿个文档, 并占用了1TB磁盘空间,这将不利于单个节点提供查询服务。为了解决这种问题, ElasticSearch具有将索引细分为多个分片(Shards)的能力。 当你创建索引时,可以定义想要的分片数。分片即是一个具有独立功能的"索引",可以位于集群中的任何节点上。 分片主要有两个原因:
两个节点分别有5个分片,粗线表示的是主分片,细线表示的是备份分片。
1. 水平分割扩展容量。
2. 跨分片(本质是节点)分发和并行操作,因此提升性能和吞吐量。
分片如何被分布以及它的文档如何被聚合到搜索请求中,都被ElasticSearch隐藏起来,对用户完全透明。 在分布式网络环境中,故障任何时候都可能发生,通过分片实现容错机制是十分有用并被推荐的。为此, ElasticSearch允许对索引分片进行备份,即备份分片。备份主要有两个原因:
1. 当分片失败时提供高可用,需要注意备份分片永远不会和其主分片分配在同一节点上。
2. 这将扩展集群的搜索吞吐量,因为所有搜索可以在备份分片上并行执行。
每个索引可以分割为多个分片,也可以有0个或多个备份,一旦备份, 每个索引将有主分片和备份分片, 分片数和备份数可以在索引被创建时定义,索引创建后,可以动态更新备份数,但不能更新分片数。 ElasticSearch默认将每个索引分成5个分片,作1个备份,也就是说,集群中至少有2个节点, 那么索引将有5个主分片,5个备份分片。如
两个节点分别有5个分片,粗线表示的是主分片,细线表示的是备份分片。 安装部署
ElasticSearch(1.5.2)的安装部署比较简单,只需JAVA环境(1.7以上), 将安装包解压缩,进入bin,执行elasticsearch即可, 这是自己使用的一个标准包,其中集成了 Bigdesk,Head, IK分词器。 下面是一份简明的ES脚本#!/usr/bin/env bashES_HOME=~/Envir/server/es/es1ES_PID_FILE=~/Envir/server/es/es1/es.pid# java options such as: -Xmx512m -Xms512mJAVA_OPTIONS="-Xmx512m -Xms512m"# -d run in backgroundBACKGROND="-d"REST_URL="localhost:9200"start(){ local script=$ES_HOME/bin/elasticsearch $script -p $ES_PID_FILE $JAVA_OPTIONS $BACKGROND echo "Started" return 0}stop(){ if [ ! -f $ES_PID_FILE ]; then echo "$ES_PID_FILE isn't exist, maybe elasticsearch isn't running." return 1 fi local pid=$(cat $ES_PID_FILE) if [ "$pid" = "" ]; then echo "pid is empty in file $ES_PID_FILE, maybe elasticsearch isn't running." return 1 fi kill -9 $pid rm $ES_PID_FILE echo "Stopped." return 0}nodes(){ curl "$REST_URL/_cat/nodes?v" return 0}indexs(){ curl "$REST_URL/_cat/indices?v" return 0}master(){ curl "$REST_URL/_cat/master?v" return 0}alloc(){ curl "$REST_URL/_cat/allocation?v" return 0}kat(){ curl -XGET "$REST_URL/$1?pretty" return 0}case "$1" in 'start') start ;; 'stop') stop ;; 'restart') stop start ;; 'nodes') nodes ;; 'indexs') indexs ;; 'master') master ;; 'alloc') alloc ;; 'kat') kat $2 ;; *) echo "Usage: start : start es. stop : stop es. restart : restart es. nodes : nodes informations. indexes : all index informations. master : master information. alloc : disk allocation informastions. kat : cat an document, such as: kat /persons/person/{document ID} "esacunset ES_HOMEunset ES_PID_FILEunset JAVA_OPTIONSunset BACKGRONDunset REST_URL 此外封装了一个简明的Java客户端工具。