一、准备环境
采用三台CentOS6.5部署Elasticsearch集群,部署Elasticsearch集群就不得不提索引分片,以下是索引分片的简单介绍。
ES集群中索引可能由多个分片构成,并且每个分片可以拥有多个副本。通过将一个单独的索引分为多个分片,我们可以处理不能在一个单一的服务器上面运行的大型索引,简单的说就是索引的大小过大,导致效率问题。不能运行的原因可能是内存也可能是存储。由于每个分片可以有多个副本,通过将副本分配到多个服务器,可以提高查询的负载能力。
由于 Elasticsearch 6.5.4要求linux 内核版本要高于3.5+,所以我们先要将系统内核升级至3.5+,详细请移步
二、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.name
与network.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
与-Xms1g
JVM的最大最小内存。如果太小会导致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,即可启动成功。