elasticSearch 集群

注: 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,它们协同工作,分享数据和负载。

当加入新的节点或者删除一个节点时,集群就会感知到并平衡数据(同步)。

集群节点

  1. 集群中一个节点会被选举为主节点(master)
  2. 主节点临时管理集群级别的一些变更,例如新建或删除索引、增加或移除节点等。
  3. 主节点不参与文档级别的变更或搜索,这意味着在流量增长的时候,该主节点不会成为集群的瓶颈。
  4. 任何节点都可以成为主节点。
  5. 用户,我们能够与集群中的任何节点通信,包括主节点。
  6. 每一个节点都知道文档存在于哪个节点上,它们可以转发请求到相应的节点上。
  7. 我们访问的节点负责收集各节点返回的数据,最后一起返回给客户端。这一切都由Elasticsearch处理。

 

在Elasticsearch集群中可以监控统计很多信息,但是只有一个是最重要的:集群健康(cluster health)。集群健康有三种状态:green、yellow或red。

颜色

意义

green

所有主要分片和复制分片都可用

yellow

所有主要分片可用,但不是所有复制分片都可用

red

不是所有的主要分片都可用

 

集群分片

索引只是一个用来指向一个或多个分片(shards)的“逻辑命名空间(logical namespace)”.

 

分片(shard)是一个最小级别“工作单元(worker unit)”,它只是保存了索引中所有数据的一部分,是一个Lucene实例,并且它本身就是一个完整的搜索引擎。我们的文档存储在分片中,并且在分片中被索引,但是我们的应用程序不会直接与它们通信,取而代之的是,直接与索引通信。

分片是Elasticsearch在集群中分发数据的关键。把分片想象成数据的容器。文档存储在分片中,然后分片分配到你集群中的节点上。当你的集群扩容或缩小,Elasticsearch将会自动在你的节点间迁移分片,以使集群保持平衡。

 

  1. 主分片(负载)

索引中的每个文档属于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。

理论上主分片能存储的数据大小是没有限制的,限制取决于你实际的使用情况。分片的最大容量完全取决于你的使用状况:硬件存储的大小、文档的大小和复杂度、如何索引和查询你的文档,以及你期望的响应时间。

  1. 副分片(高可用)

复制分片只是主分片的一个副本,它可以防止硬件故障导致的数据丢失,同时可以提供读请求,比如搜索或者从别的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.hostnetwork.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
bin/plugin install marvel-agent

Step 2: Install Marvel into Kibana

bin/kibana plugin --install elasticsearch/marvel/latest

Step 3: Start Elasticsearch and Kibana

bin/elasticsearch
bin/kibana

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 ='勒布朗·詹姆斯'

未完待续

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值