elasticsearch部署

全文搜索引擎 Elasticsearch 入门教程

集群

Elastic 的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。


Cluster 集群

一个 Elasticsearch 集群由一个或多个节点(Node)组成,每个集群都有一个共同的集群名称作为标识。

Node 节点

一个 Elasticsearch 实例即一个 Node,一台机器可以有多个实例,正常使用下每个实例应该会部署在不同的机器上。Elasticsearch 的配置文件中可以通过 node.master、node.data 来设置节点类型。

node.master:表示节点是否具有成为主节点的资格
node.data:表示节点是否存储数据

注意:此属性的值为true,并不意味着这个节点就是主节点。 因为真正的主节点,是由多个具有主节点资格的节点进行选举产生的。 所以,这个属性只是代表这个节点是不是具有主节点选举资格

主节点+数据节点(默认)

node.master: true
node.data: true

节点即有成为主节点的资格,又存储数据。这个时候如果某个节点被选举成为了真正的主节点,那么他还要存储数据,这样对于这个节点的压力就比较大了。Elasticsearch 默认每个节点都是这样的配置,在测试环境下这样做没问题。实际工作中建议不要这样设置,这样相当于主节点和数据节点的角色混合到一块了。

数据节点

node.master: false
node.data: true

节点没有成为主节点的资格,不参与选举,只会存储数据。在集群中需要单独设置几个这样的节点负责存储数据,后期提供存储和查询服务。主要消耗磁盘,内存。

主节点

node.master: true
node.data: false

不会存储数据,有成为主节点的资格,可以参与选举,有可能成为真正的主节点。普通服务器即可(CPU、内存消耗一般)。

Index 索引

一个集群下可以有多个索引,每个索引是一系列相同格式文档的集合(Elasticsearch 6.x 已不支持一个索引下多个Type)


Shard 分片

每个索引有一个或多个分片,每个分片存储不同的数据。分片可分为主分片( primary shard)和复制分片(replica shard),复制分片是主分片的拷贝。默认每个主分片有一个复制分片(默认一个索引创建后会有5个主分片,即:5主+5复制=10个分片),一个索引的复制分片的数量可以动态地调整,复制分片从不与它的主分片在同一个节点上(防止单点故障)。

复制分片有两个作用:

  1. 提高恢复能力:当主分片挂掉时,某个复制分片可以变成主分片;
  2. 提高性能:get 和 search 请求既可以由主分片又可以由复制分片处理;

集群健康值

  1. green:所有主要分片和复制分片都可用
  2. yellow:所有主要分片可用,但不是所有复制分片都可用
  3. red:不是所有的主要分片都可用

当集群状态为 red,它仍然正常提供服务,它会在现有存活分片中执行请求,我们需要尽快修复故障分片,防止查询数据的丢失;

单个节点部署

Elastic 需要 Java 8 环境。注意要保证环境变量JAVA_HOME正确设置。

安装完 Java,就可以跟着官方文档安装 Elastic。直接下载压缩包。

$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.1.zip
$ unzip elasticsearch-5.5.1.zip
$ cd elasticsearch-5.5.1/ 

进入解压后的目录,运行下面的命令,启动 Elastic。

$ ./bin/elasticsearch

如果这时报错"max virtual memory areas vm.maxmapcount [65530] is too low",要运行下面的命令。

$ sudo sysctl -w vm.max_map_count=262144

如果一切正常,Elastic 就会在默认的9200端口运行。这时,打开另一个命令行窗口,请求该端口,会得到说明信息。

$ curl localhost:9200

{
  "name" : "atntrTf",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "tf9250XhQ6ee4h7YI11anA",
  "version" : {
    "number" : "5.5.1",
    "build_hash" : "19c13d0",
    "build_date" : "2017-07-18T20:44:24.823Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.0"
  },
  "tagline" : "You Know, for Search"
}

上面代码中,请求9200端口,Elastic 返回一个 JSON 对象,包含当前节点、集群、版本等信息。

按下 Ctrl + C,Elastic 就会停止运行

默认情况下,Elastic 只允许本机访问,如果需要远程访问,可以修改 Elastic 安装目录的config/elasticsearch.yml文件,去掉network.host的注释,将它的值改成0.0.0.0,然后重新启动 Elastic。

network.host: 0.0.0.0

上面代码中,设成0.0.0.0让任何人都可以访问。线上服务要设成具体的 IP

集群搭建

环境

  • JDK1.8或以上

为了让es实现集群的效果,需要对es的配置进行修改,修改config下面名为elasticsearch.yml的文件

  • cluster.name标明了整个集群的名字,只有节点在相同的集群在能互相发现。

  • node.name 是当前节点名称的标识,各个节点的名称不能重复

  • transport.tcp.port 为节点间通信端口,如果部署在不同机器上则默认即可

集群机器情况:

主机域名 主机IP 安装组件
hadoop1 192.168.1.1 elasticsearch
hadoop2 192.168.1.2 elasticsearch
hadoop3 192.168.1.3 elasticsearch

1、用普通用户(非root)进入hadoop1机器,下载ElasticSearch 5.0.0 ,并解压到指定目录

2、在本机中找一个存储空间比较大的磁盘,如 /data,在该目录下执行以下命令

mkdir -p /data/es5/{data,logs}

用于存放es的数据和日志文件

3、配置 config/elasticsearch.yml 文件

# ---------------------------------- Cluster -----------------------------------
#定义es集群名称
cluster.name: es5-cluster
# ------------------------------------ Node ------------------------------------
#定义该节点的名称,各个节点不能重复
node.name: dchadoop213
# ----------------------------------- Paths ------------------------------------
#配置数据目录
path.data: /data1/hadoop/es5/data
#配置日志目录
path.logs: /data1/hadoop/es5/logs
# ----------------------------------- Memory -----------------------------------
#关闭锁定内存
bootstrap.memory_lock: false
# ---------------------------------- Network -----------------------------------
#指定本机IP地址,每个节点都要修改
network.host: 192.168.1.222
#指定http访问端口
http.port: 9200
# --------------------------------- Discovery ----------------------------------
#广播地址
discovery.zen.ping.unicast.hosts: ["hadoop1:9300", "hadoop2:9300", "hadoop3:9300"]
discovery.zen.minimum_master_nodes: 3

4、配置config/jvm.options文件

#修改JVM参数
-Xms4g
-Xmx4g

5、配置bin/elasticsearch文件

#由于es5.0依赖的是jdk8,所以需要下载jdk8并指定PAHT路径
export PATH=/home/hadoop/jdk1.8.0_101/bin:$PATH
export JAVA_HOME=/home/hadoop/jdk1.8.0_101
export ES_HOME=/home/hadoop/elasticsearch-5.0.0

6、启动

./bin/elasticsearch -d

查看后台日志是否启动成功(日志目录在第三步配置的/data1/hadoop/es5/logs路径下),如果报出以下异常:

max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
	at org.elasticsearch.bootstrap.BootstrapCheck.check(BootstrapCheck.java:132)
	at org.elasticsearch.bootstrap.BootstrapCheck.check(BootstrapCheck.java:85)
	at org.elasticsearch.bootstrap.BootstrapCheck.check(BootstrapCheck.java:65)
	at org.elasticsearch.bootstrap.Bootstrap$5.validateNodeBeforeAcceptingRequests(Bootstrap.java:178)
	at org.elasticsearch.node.Node.start(Node.java:471)
	at org.elasticsearch.bootstrap.Bootstrap.start(Bootstrap.java:193)
	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:257)
	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:101)
	at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:96)
	at org.elasticsearch.cli.SettingCommand.execute(SettingCommand.java:54)
	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:88)
	at org.elasticsearch.cli.Command.main(Command.java:54)
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:75)
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:68)

是以为操作系统的vm.max_map_count参数设置太小导致的,请使用root用户登录系统,执行以下命令:

sysctl -w vm.max_map_count=655360

并用以下命令查看是否修改成功

sysctl -a | grep "vm.max_map_count"

如果能正常输出655360,则说明修改成功,然后再次启动elasticsearch

把配置好的安装包拷贝一份到其他两台机器上,修改 config/elasticsearch.yml下的node.name和network.host为对于的机器即可。

7、访问ES

打开浏览器,输入地址 http://192.168.1.1:9200 出现以下内容为正常

{
  "name" : "hadoop1",
  "cluster_name" : "es5-cluster",
  "version" : {
    "number" : "5.0.0-alpha5",
    "build_hash" : "d327dd4",
    "build_date" : "2016-08-04T08:59:39.568Z",
    "build_snapshot" : false,
    "lucene_version" : "6.1.0"
  },
  "tagline" : "You Know, for Search"
}

8、关于插件

在ES的以往各个版本中都支持一个比较好用的插件 mobz/elasticsearch-head

但是ES5.0版本还不支持plugin安装,详情请查看 GitHub - mobz/elasticsearch-head: A web front end for an elastic search cluster

原文地址:https://www.cnblogs.com/we9999/p/11760375.html