快乐学习
前程无忧、中华英才非你莫属!

Elasticsearch 5.x部署采坑记录,以及基本概念详解

第一篇、采坑记录
预制好Es对应的JDk版本
centos6.5 ,openjdk卸载,cento7 略过
rpm -qa|grep java
rpm -e --nodeps  tzdata-java-2013g-1.el6.noarch
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
直接解压安装java 1.8,并配置环境变量
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
坑1、不允许root用户启动elasticsearch。
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root。
解决方案
创建elsearch用户组及elsearch用户
groupadd elsearch
useradd elsearch -g  elsearch -p elasticsearch
更改elasticsearch文件夹及内部文件的所属用户及组为elsearch:elsearch
chown -R elsearch:elsearch elasticsearch
su elsearch #切换账户
cd elasticsearch/bin #进入你的elasticsearch目录下的bin目录
./elasticsearch
坑2、外网访问不了elasticsearch。
curl "http://127.0.0.1:9200" 能够正常访问,可是使用外网ip就提示拒绝链接
解决方案
vi config/elasticsearch.yml
修改:network.host: 0.0.0.0 或者自己的ip
坑3、max file descriptors [4096]错误。
ERROR: [1] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
解决方案
vi /etc/security/limits.conf
# 在最后面追加下面内容
*   hard nofile 65536
*   soft nofile 65536
坑4、虚拟内存配置太小了 。
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决办法:切换root账户 vi /etc/sysctl.conf
增加一行  vm.max_map_count=655360
接着执行 sysctl -p
最后改完别忘记重新启动Centos 服务器。
坑5、安装node.js
tar xvf node-v8.7.0.tar.gz
yum install gcc gcc-c++
./configure
make& make install

 

坑6、安装head插件

 
cd elasticsearch-head
npm install
npm run start

 

 
 
坑7、head插件和elastaticSearch配置文件(elasticsearch.yml)修改
http.cors.enabled: true
http.cors.allow-origin: "*"
 
重新启动elastaticSearch。-d 是后台启动。
./elasticsearch  -d


坑八、elastaticSearch集群安装

 
Elasticsearch集群中有的节点一般有三种角色:master node、data node和client node。
master node:master几点主要用于元数据(metadata)的处理,比如索引的新增、删除、分片分配等。
data node:data 节点上保存了数据分片。它负责数据相关操作,比如分片的 CRUD,以及搜索和整合操作。这些操作都比较消耗 CPU、内存和 I/O 资源;
client node:client 节点起到路由请求的作用,实际上可以看做负载均衡器。( 对于没有很多请求的业务,client node可以不加,master和data足矣)
 
 
1、master配置文件修改
cluster.name:  ztloo
node.name:  zhuji
node.master:  true
network.host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["192.168.1.102"]
node.data: falase
 
2、es-slave1 配置文件修改
      
cluster.name:  ztloo
node.name:  slave1
http.port:  9201    
discovery.zen.ping.unicast.hosts:["192.168.1.102"]
node.data: true

 

 
3、es-slave2 配置文件修改
cluster.name:  ztloo
node.name:  slave2
http.port:  9202    
discovery.zen.ping.unicast.hosts:["192.168.1.102"]
node.data: true
 
 
 
采坑完毕
 

 

接近实时(NRT)

  • Elasticsearch 是一个接近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个很小的延迟(通常是 1 秒)。

集群(cluster)

  • 代表一个集群,集群中有多个节点(node),其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。

索引(index)

  • ElasticSearch将它的数据存储在一个或多个索引(index)中。用SQL领域的术语来类比,索引就像数据库,可以向索引写入文档或者从索引中读取文档,并通过ElasticSearch内部使用Lucene将数据写入索引或从索引中检索数据。

文档(document)

  • 文档(document)是ElasticSearch中的主要实体。对所有使用ElasticSearch的案例来说,他们最终都可以归结为对文档的搜索。文档由字段构成。

映射(mapping)

  • 所有文档写进索引之前都会先进行分析,如何将输入的文本分割为词条、哪些词条又会被过滤,这种行为叫做映射(mapping)。一般由用户自己定义规则。

类型(type)

  • 每个文档都有与之对应的类型(type)定义。这允许用户在一个索引中存储多种文档类型,并为不同文档提供类型提供不同的映射。

分片(shards)

  • 代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。5.X默认不能通过配置文件定义分片

副本(replicas)

  • 代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

数据恢复(recovery)

  • 代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。
  • GET /_cat/health?v   #可以看到集群状态

数据源(River)

  • 代表es的一个数据源,也是其它存储方式(如:数据库)同步数据到es的一个方法。它是以插件方式存在的一个es服务,通过读取river中的数据并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的,river这个功能将会在后面的文件中重点说到。

网关(gateway)

  • 代表es索引的持久化存储方式,es默认是先把索引存放到内存中,当内存满了时再持久化到硬盘。当这个es集群关闭再重新启动时就会从gateway中读取索引数据。es支持多种类型的gateway,有本地文件系统(默认),分布式文件系统,Hadoop的HDFS和amazon的s3云存储服务。

自动发现(discovery.zen)

  • 代表es的自动发现节点机制,es是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。
  • 5.X关闭广播,需要自定义

通信(Transport)

  • 代表es内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互,同时它支持http协议(json格式)、thrift、servlet、memcached、zeroMQ等的传输协议(通过插件方式集成)。
  • 节点间通信端口默认:9300-9400

分片和复制(shards and replicas)

  一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有10亿文档的索引占据1TB的磁盘空间,而任一节点可能没有这样大的磁盘空间来存储或者单个节点处理搜索请求,响应会太慢。
为了解决这个问题,Elasticsearch提供了将索引划分成多片的能力,这些片叫做分片。当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的“索引”,这个“索引” 可以被放置到集群中的任何节点上。
分片之所以重要,主要有两方面的原因:
  • 允许你水平分割/扩展你的内容容量
  • 允许你在分片(位于多个节点上)之上进行分布式的、并行的操作,进而提高性能/吞吐量 
    至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由Elasticsearch管理的,对于作为用户的你来说,这些都是透明的。
在一个网络/云的环境里,失败随时都可能发生。在某个分片/节点因为某些原因处于离线状态或者消失的情况下,故障转移机制是非常有用且强烈推荐的。为此, Elasticsearch允许你创建分片的一份或多份拷贝,这些拷贝叫做复制分片,或者直接叫复制。
复制之所以重要,有两个主要原因:
  • 在分片/节点失败的情况下,复制提供了高可用性。复制分片不与原/主要分片置于同一节点上是非常重要的。因为搜索可以在所有的复制上并行运行,复制可以扩展你的搜索量/吞吐量
  • 总之,每个索引可以被分成多个分片。一个索引也可以被复制0次(即没有复制) 或多次。一旦复制了,每个索引就有了主分片(作为复制源的分片)和复制分片(主分片的拷贝)。
  • 分片和复制的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变复制的数量,但是你不能再改变分片的数量。
  • 5.X默认5:1   5个主分片,1个复制分片
默认情况下,Elasticsearch中的每个索引分配5个主分片和1个复制。这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个复制分片(1个完全拷贝),这样每个索引总共就有10个分片。
 

 

备注:csmn_1708  (es)

           master(mysql)

打赏
赞(0) 打赏
未经允许不得转载:同乐学堂 » Elasticsearch 5.x部署采坑记录,以及基本概念详解

特别的技术,给特别的你!

联系QQ:1071235258QQ群:710045715

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

error: Sorry,暂时内容不可复制!