一、准备环境
采用三台CentOS6.5部署Elasticsearch集群,部署Elasticsearch集群就不得不提索引分片,以下是索引分片的简单介绍。
系统 | 节点名称 | IP地址 |
---|---|---|
centos 6.5 | els-node1 | 192.168.1.101 |
centos 6.5 | els-node2 | 192.168.1.102 |
centos 6.5 | els-node3 | 192.168.1.103 |
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 # 日志系统定义
/usr/share/elasticsearch # elasticsearch 默认安装目录
/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为集群服务的端口
#添加如下内容
#culster transport port
transport.tcp.port: 9300
transport.tcp.compress: true
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命令来获取集群的相关的信息,
- _cat代表查看信息
- nodes为查看节点信息,默认会显示为一行,所以就用刀了?preety让信息更有好的显示
- ?preety让输出信息更友好的显示
可以使用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"
}
#集群测试
curl http://192.168.1.101:9200/_cluster/health?pretty
{
"cluster_name" : "my-els",
"status" : "green", #green即为健康
"timed_out" : false,
"number_of_nodes" : 3, #可以看到number_of_nodes为3
"number_of_data_nodes" : 3,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
curl http://192.168.1.101:9200/_cat/nodes?pretty
192.168.1.103 33 16 0 0.08 0.10 0.12 mdi - els-node3
192.168.1.101 31 37 0 0.02 0.12 0.13 mdi - els-node1
192.168.1.102 24 26 0 0.02 0.01 0.01 mdi * els-node2 # *号表示为当前节点为主节点的意思
如果你要想查看更多有关于集群信息、当前节点统计信息等等,可以使用一下命令来获取到所有可以查看的信息。
curl http://192.168.1.101:9200/_cat?pretty
=^.^=
/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/tasks
/_cat/indices
/_cat/indices/{index}
/_cat/segments
/_cat/segments/{index}
/_cat/count
/_cat/count/{index}
/_cat/recovery
/_cat/recovery/{index}
/_cat/health
/_cat/pending_tasks
/_cat/aliases
/_cat/aliases/{alias}
/_cat/thread_pool
/_cat/thread_pool/{thread_pools}
/_cat/plugins
/_cat/fielddata
/_cat/fielddata/{fields}
/_cat/nodeattrs
/_cat/repositories
/_cat/snapshots/{repository}
/_cat/templates
***如果无法访问,说明启动失败了,在配置 /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,即可启动成功。