一、准备环境

采用三台CentOS6.5部署Elasticsearch集群,部署Elasticsearch集群就不得不提索引分片,以下是索引分片的简单介绍。

ES集群中索引可能由多个分片构成,并且每个分片可以拥有多个副本。通过将一个单独的索引分为多个分片,我们可以处理不能在一个单一的服务器上面运行的大型索引,简单的说就是索引的大小过大,导致效率问题。不能运行的原因可能是内存也可能是存储。由于每个分片可以有多个副本,通过将副本分配到多个服务器,可以提高查询的负载能力。

由于 Elasticsearch 6.5.4要求linux 内核版本要高于3.5+,所以我们先要将系统内核升级至3.5+,详细请移步

CentOS6.5升级内核至4.4

二、Elasticsearch集群搭建

1.安装JDK

Elasticsearch是基于Java开发是一个Java程序,运行在Jvm中,所以第一步要安装JDK

yum install -y java-1.8.0-openjdk-devel

2.下载elasticsearch

https://www.elastic.co/cn/downloads/elasticsearch,是ELasticsearch的官方站点,如果需要下载最新的版本,进入官网下载即可。可以下载到本地电脑然后再导入CentOS中,也可以直接在CentOS中下载。

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.rpm

3.安装elasticsearch

rpm -ivh elasticsearch-6.5.4.rpm

4.配置目录

安装完毕后会生成很多文件,包括配置文件日志文件等等,下面几个是最主要的配置文件路径

/etc/elasticsearch/elasticsearch.yml                            # els的配置文件
/etc/elasticsearch/jvm.options                                  # JVM相关的配置,内存大小等等
/etc/elasticsearch/log4j2.properties                            # 日志系统定义
/var/lib/elasticsearch                                          # 数据的默认存放位置

5.创建用于存放数据与日志的目录

数据文件会随着系统的运行飞速增长,所以默认的日志文件与数据文件的路径不能满足我们的需求,那么手动创建日志与数据文件路径,可以使用NFS、可以使用Raid等等方便以后的管理与扩展

mkdir -p /opt/elasticsearch/data
mkdir -p /opt/elasticsearch/log
chown -R elasticsearch.elasticsearch /opt/elasticsearch/*

6.集群配置

集群配置中最重要的两项是node.namenetwork.host,每个节点都必须不同。其中node.name是节点名称主要是在Elasticsearch自己的日志加以区分每一个节点信息。
discovery.zen.ping.unicast.hosts是集群中的节点信息,可以使用IP地址、可以使用主机名(必须可以解析)。

vim /etc/elasticsearch

cluster.name: my-els                               # 集群名称
node.name: els-node1                               # 节点名称,仅仅是描述名称,用于在日志中区分

path.data: /opt/elasticsearch/data                 # 数据的默认存放路径
path.logs: /opt/elasticsearch/log                  # 日志的默认存放路径

network.host: 192.168.1.101                        # 当前节点的IP地址
http.port: 9200                                    # 对外提供服务的端口,9300为集群服务的端口

discovery.zen.ping.unicast.hosts: ["192.168.1.101", "192.168.1.102","192.168.1.103"]
# 集群个节点IP地址,也可以使用els、els.shuaiguoxia.com等名称,需要各节点能够解析

discovery.zen.minimum_master_nodes: 2              # 为了避免脑裂,集群节点数最少为 半数+1

7.JVM配置 

由于Elasticsearch是Java开发的,所以可以通过/etc/elasticsearch/jvm.options配置文件来设定JVM的相关设定。如果没有特殊需求按默认即可。
不过其中还是有两项最重要的-Xmx1g-Xms1gJVM的最大最小内存。如果太小会导致Elasticsearch刚刚启动就立刻停止。太大会拖慢系统本身。

vim /etc/elasticsearch/jvm.options

-Xms1g                                                  # JVM最大、最小使用内存
-Xmx1g

8.配置为系统服务

sudo chkconfig --add elasticsearch

9.启动Elasticsearch

sudo service elasticsearch start

Starting elasticsearch:                                    [  OK  ]

10.测试

Elasticsearch直接听过了http接口,所以直接使用curl命令就可以查看到一些集群相关的信息。

可以使用curl命令来获取集群的相关的信息,

curl http://192.168.1.101:9200

{
  "name" : "els-node1",
  "cluster_name" : "my-els",
  "cluster_uuid" : "Kmi9jmG7SdWAYu9k8_-yaw",
  "version" : {
    "number" : "6.5.4",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "d2ef93d",
    "build_date" : "2018-12-17T21:17:40.758843Z",
    "build_snapshot" : false,
    "lucene_version" : "7.5.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

如果无法访问,说明启动失败了,在配置 /opt/elasticsearch/log 中 my-els.log 日志文件,可能遇到如下的错误:

1、第一种错误

max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]

解决办法:切换到root用户,编辑limits.conf 添加类似如下内容

vi /etc/security/limits.conf
#<domain>      <type>  <item>         <value>
# 添加如下内容
   *           soft    nofile         65536
   *           hard    nofile         131072
   *           soft    nproc          2048
   *           hard    nproc          4096

2、第二种错误

max number of threads [1024] for user [elasticsearch] is too low, increase to at least [4096]

解决办法:切换到root用户,进入limits.d目录下修改配置文件

vi /etc/security/limits.d/90-nproc.conf
修改如下内容:

* soft nproc 1024
#修改为
* soft nproc 4096

3、第三种错误

max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

解决办法:切换到root用户,修改配置sysctl.conf

vi /etc/sysctl.conf

添加下面配置:
vm.max_map_count=655360

并执行命令:
sysctl -p

然后,重新启动elasticsearch,即可启动成功。

12-25 16:55