一 ES介绍
Elasticsearch是一个实时分布式搜索和分析引擎。它让你以前所未有的速度处理大数据成为可能。它用于全文搜索、结构化搜索、分析以及将这三者混合使用。
Elasticsearch所涉及到的每一项技术都不是创新或者革命性的,全文搜索,分析系统以及分布式数据库这些早就已经存在了。它的革命性在于将这些独立且有用的技术整合成一个一体化的、实时的应用。
很不幸,现在大部分数据库在提取可用知识方面显得异常无能。的确,它们能够通过时间戳或者精确匹配做过滤,但是它们能够进行全文搜索,处理同义词和根据相关性给文档打分吗?它们能根据同一份数据生成分析和聚合的结果吗?最重要的是,它们在没有大量工作进程(线程)的情况下能做到对数据的实时处理吗?
这就是Elasticsearch存在的理由:Elasticsearch鼓励你浏览并利用你的数据,而不是让它烂在数据库里,因为在数据库里实在太难查询了。
做为用户,我们能够与集群中的任何节点通信,包括主节点。每一个节点都知道文档存在于哪个节点上,它们可以转发请求到相应的节点上。我们访问的节点负责收集各节点返回的数据,最后一起返回给客户端。这一切都由Elasticsearch处理。
在单一节点上运行意味着有单点故障的风险——没有数据备份。幸运的是,要防止单点故障,我们唯一需要做的就是启动另一个节点。只要第二个节点与第一个节点有相同的cluster.name,它就能自动发现并加入第一个节点所在的集群。
ES集群特性:
节点对等:
所谓的节点对等就是在集群中每个节点扮演的角色都是平等的,也就意味着每个节点都能成为集群的流量入口,当请求进入到某个节点,该节点就会暂时充当协调节点的角色,对请求进行路由和处理。这是一个区别于其他分布式中间件的很重要的特性。节点对等的特性让elasticsearch具备了负载均衡的特性。
随着应用需求的增长,我们该如何扩展?如果我们新加入一个节点,集群会重新组织自己,分片会被重新分配以平衡负载。
如:
新增节点3后:
Elastic 的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。
cluster
代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。
集群(cluster)是一组具有相同cluster.name的节点集合,他们协同工作,共享数据并提供故障转移和扩展功能,当然一个节点也可以组成一个集群。
你最好找一个合适的名字来替代cluster.name的默认值,比如你自己的名字,这样可以防止一个新启动的节点加入到相同网络中的另一个同名的集群中。
shards
代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。
replicas
代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。
recovery
代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。
二 实验环境规划
这里将kibana部署在10.192.203.107上
三 安装步骤
3.1 安装jdk
官网下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u26-download-400750.html
下载jdk并将其解压后放到/usr/local目录下:
tar -xvf jdk-8u92-linux-x64.tar.gz
cd jdk1.8.0_92
chmod 755 bin
验证是否安装成功:
[root@PCjdk1.8.0_92]# ./bin/java -version
java version "1.8.0_92"
Java(TM) SE Runtime Environment (build 1.8.0_92-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode)
mv /download/jdk1.8.0_92 /usr/local/
建立/usr/local/下的jdk软连接方便以后版本升级:
ln -s /usr/local/jdk1.8.0_92/ /usr/local/jdk
#配置环境变量:
在/etc/profile中加入以下内容:
JAVA_HOME=/usr/local/jdk1.8.0_92
JAVA_BIN=/usr/local/jdk1.8.0_92/bin
PATH=$PATH:$JAVA_BIN
CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
[root@master~]source /etc/profile
3.2 安装ElasticSearch
在三台节点上都执行以下安装步骤:
3.2.1 新建账号
useradd EsUser
passwd EsUser
3.2.2 解压安装包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.2.tar.gz
tar -xzf elasticsearch-5.5.2.tar.gz -C /usr/local/
mv /usr/local/elasticsearch-5.5.2/ /usr/local/ElasticSearch
3.2.3 创建目录
mkdir -p /data/ElasticSearch/data
mkdir -p /data/ElasticSearch/logs
chown -R EsUser:EsUser /data/ElasticSearch/
chown -R EsUser:EsUser /usr/local/ElasticSearch/
3.2.4 修改配置文件
vi /usr/local/ElasticSearch/config/elasticsearch.yml
修改下以下几项:
cluster.name
node.name
network.host # 当前节点的IP地址
http.port # 对外提供服务的端口,我在三个机器上设置的端口不一样,设置成一样的时候报错了,说端口已经在使用。
discovery.zen.ping.unicast.hosts #集群每个节点IP地址
path.data # 数据的默认存放路径
path.logs # 日志的默认存放路径
注意:配置项书写格式:
name:(空格)value
若没加空格的话,会报错:
expecting token of type [START_OBJECT] but found [VALUE_STRING]]。
示例:
#调大jvm内存
修改/usr/local/ElasticSearch/config/jvm.options中Xms和Xmx的值,默认是1G:
建议调整为服务器内存的50%。
假如服务器内存为6G,则将其设置为3G:
-Xms3g
-Xmx3g
3.2.5 修改主机环境参数
(1)、打开/etc/security/limits.conf文件,添加以下参数
* soft nproc 2048
* hard nproc 16384
* soft nofile 65536
* hard nofile 65536
(2)、修改/etc/sysctl.conf,添加以下参数
vm.max_map_count=262144
sysctl -p 刷新
(3)、修改/etc/security/limits.d/90-nproc.conf
* soft nproc 1024
#修改为
* soft nproc 2048
3.2.6 修改PATH
vi /etc/profile
添加:
ES_HOME=/usr/local/ElasticSearch/bin
PATH=$PATH:$JAVA_BIN:$ES_HOME
source /etc/profile
3.2.7 启动ES
su - EsUser
elasticsearch &
可以通过ps -ef | grep elastic查看ES进程。
假如在启动过程中报错:
ERROR: bootstrap checks failed
system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
原因:
这是在因为Centos6不支持SecComp,而ES5.2.0默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动。
解决办法:
在elasticsearch.yml中配置bootstrap.system_call_filter为false,注意要在Memory下面:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
3.2.8 验证服务状态
[root@ZooKeeper-node1 config]# curl http://10.192.203.107:9301
{
"name" : "node-1",
"cluster_name" : "my-application",
"cluster_uuid" : "RRlpEoFrQM6l4LmIChDfqA",
"version" : {
"number" : "5.5.2",
"build_hash" : "b2f0c09",
"build_date" : "2017-08-14T12:33:14.154Z",
"build_snapshot" : false,
"lucene_version" : "6.6.0"
},
"tagline" : "You Know, for Search"
}
3.2.9 查看集群状态
[EsUser@ZooKeeper-node1 ~]$ curl http://10.192.203.107:9301/_cluster/health/
{"cluster_name":"my-application","status":"green","timed_out":false,"number_of_nodes":3,"number_of_data_nodes":3,"active_primary_shards":1,"active_shards":2,"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}
集群健康(Cluster health)包括三种状态:green、yellow、red。
我在安装7.6.2版本的ES时,发现集群状态有误:
{ "error" : { "root_cause" : [ { "type" : "master_not_discovered_exception", "reason" : null } ], "type" : "master_not_discovered_exception", "reason" : null }, "status" : 503 }
解决方案:
在每个配置文件指定初始节点:
cluster.initial_master_nodes: node-1
重启ES集群即可。
3.3 安装elastic-head插件
Head是elasticsearch的集群管理工具,可以用于数据的浏览和查询。
只需在其中一台节点上安装head插件即可。
3.3.1 下载head插件
将下载好的插件配置上传到linux中,注意不要放在ES目录下,与ES目录同级即可。
解压:
cd /usr/local
unzip elasticsearch-head-master.zip
3.3.2 安装nodejs
head 插件是node.js实现的,因此需要安装nodejs
curl -sL https://rpm.nodesource.com/setup_8.x | bash -
yum install -y nodejs
验证是否安装成功:
node -v
npm -v
3.3.3 安装grunt
cd elasticsearch-head-master
npm install grunt --save-dev
/*
假如安装的时候报错:Error: CERT_UNTRUSTED
解决办法:
npm config set strict-ssl false
*/
npm install
3.3.4 修改配置文件
3.3.4.1 修改 Gruntfile.js文件
增加hostname属性,设置为*;如图:
3.3.4.2 修改head插件的连接地址
vi _site/app.js 文件,将ip地址改为你的ES所在服务器的ip
3.3.4.3 修改elasticsearch.yml
vi /usr/local/ElasticSearch/config/elasticsearch.yml,添加
http.cors.enabled: true
http.cors.allow-origin: "*"
这个配置主要是允许插件访问。
重启ES。
3.3.5 启动
在elasticsearch-head-master 下执行,npm run start 命令,启动。
为什么是空白呢。
用360浏览器的兼容模式不行,极速模式可以,晕死。用chrome浏览器则是正常的。
点击有上角的‘Info’,可以查看相关信息:
--参考了ElasticSearch(一)--安装与配置以及Head插件的安装_美好希望的明天!-CSDN博客_elasticsearch-head下载
3.4:安装kibana
Kibana是ES的可视化管理工具。
Kibana是一个针对Elasticsearch的开源分析及可视化平台,使用Kibana可以查询、查看并与存储在ES索引的数据进行交互操作,使用Kibana能执行高级的数据分析,并能以图表、表格和地图的形式查看数据
点击Download Kibana Free | Get Started Now | Elastic | Elastic下载。
一定得和ES的版本一致。
这里以在10.192.203.107上安装为例:
#解压到指定目录
tar -zxf kibana-5.5.2-linux-x86_64.tar.gz -C /usr/local/
mv /usr/local/kibana-5.5.2-linux-x86_64 /usr/local/kibana
#修改权限
chown -R EsUser /usr/local/kibana/
#修改配置/usr/local/kibana/config/kibana.yml
server.port: 5601
server.host: "10.192.203.107 "
logging.dest: /usr/local/kibana/kibana.log
elasticsearch.url: "http://10.192.203.107:9301"
#启动kibana
/usr/local/kibana/bin/kibana &
可以通过ps -ef | grep kibana查看kibana进程。
假如报错:fatal][root] { Error: [config validation of [elasticsearch].url]: definition for this key is missing,则需要将elasticsearch.url: http://10.192.203.107:9301改成
elasticsearch.hosts: ["http://10.192.203.107:9301/"]
/*
停止kibana命令
fuser -n tcp 5601
kill -9 端口
*/
#验证
在’Dev Tools’里可以对ES进行增删改查。
如: