ELK 是 elastic 公司旗下三款产品 ElasticSearch 、Logstash 、Kibana 的首字母组合。
ElasticSearch 是一个基于 Lucene 构建的开源,分布式,RESTful 搜索引擎。
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的。我们希望搜索解决方案要运行速度快,我们希望能有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP来索引数据,我们希望我们的搜索服务器始终可用,我们希望能够从一台开始并扩展到数百台,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。因此我们利用Elasticsearch来解决所有这些问题及可能出现的更多其它问题 --------百度百科
Logstash 传输和处理你的日志、事务或其他数据。
Kibana 将 Elasticsearch 的数据分析并渲染为可视化的报表。
下载包到服务器 /home/software 目录下
进行解压 tar -xf *.gz unzip *.zip
修改配置
ElasticSearch安装
官网:https://www.elastic.co/downloads 下载包 rz -E 把包传到服务器或者直接在服务器下载
解压
启动 elasticsearch 后台启动 elasticsearch -d
因为elasticsearch是无权限启动,因此root超管启存在风险,用普通用户启动
增加用户组:groupadd pz
增加普通用户 useradd name -g pz所要加的用户组方便管理) -p pass
添加权限 chown -R 组:名 elasticsearch
切换用户 su name进行启动 在elasticsearch的bin目录下启动
启动成功最后一行显示recovered[0] indices into cluster_state 成功
输入curl localhost:9200 或curl ip:9200 只要可以访问就是成功
jps 查看进程或者ps
配置在elasticsearch/config/elasticsearch.yml中配置 IP和PORT 以及集群名和节点信息
cluster.name: 集群名称
node.name: 节点名称 集群最少三个不同节点,意思是三太服务器 集群名相同,节点名不同
network.host: ip
http.port: 9200 端口 没改过
HEAD插件安装:基于HTML5编写的集群操作和管理工具,可现实集群拓扑结构,进行一些操作
安装node 环境基于jdk
创建一个文件与software同级
安装jdk
安装node 下载地址https://nodejs.org/en/download/
解压
进入bin目录执行npm命令 npm install -g grunt-cli
node -v npm -v gnunt -version 检查各个版本
安装head插件
下载包 wget https://github.com/mobz/elasticsearch-head/archive/master.zip 从网上找的
解压包unzip
在elasticsearch.yml末端下添加两个命令 开启http对外服务,让head插件能够访问集群
http.cors.enabled: true
http.cors.allow-origin: "*"
修改head插件配置文件 Gruntifile.js
connection属性:options里面添加 hostname: 'ip', 逗号不能少
完成后配置node的环境变量
在vim /etc/profiel
添加 NODE_HOME=/home/software/node6 里面的jdk要一致 JAVA_HOME=/home/software/jdk版本
保持 source /etc/profile 配置生效命令
进入head根目录 启动 grunt server
出现 Start connect web server on http://ip:9100 成功
若提示Unbale to find local grunt 执行npm install -g grunt
grunt是基于Node.js的项目构建工具,可以进行打包压缩、测试、执行等等的工作,head插件就是通过grunt启动
在浏览器启动 若访问不到可能是没有开启对外访问,在elasticsearch.yml里面配置
IK中文分词器安装
获取ik安装包 elasticsearch-analysic-ik-版本.zip
解压到elasticsearch的plugins的目录下改名为ik mv elasticsearch ik
OK
Logstash的安装基本一致
安装包放到software,解压
运行测试 logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}' 收集控制台打印内容,并抓化成固定格式的字符串在控制台输出
运行命令后 随便输字符串 等待几秒 出现像键值对一样的数据就正确了
就是把数据库数据帮到logstash上了
进入mysql 执行set names utf8; 先编码一下
mysql数据导入索引(IK分词器使用)需要安装jdbc input插件logstash-input-jdbc的包放到logstash的plugins下(没有就创建)
解压 这个包的作用就是可以使用logstash从mysql导入数据到路径在配置文件中指定
logstash启动加载的文件(导入的数据源制定,导入的属性指定) 网上找 jdbc.conf 放到bin目录下
jdbc.sql 一条搜索语句: 表示要把那张表里的数据导入到IK进行分词搜索
启动 logstash -f jdbc.conf 出现数据说明正在导入
集群搭建在elasticsearch.yml配置文件中
集群名,节点名 ip, port, 发现节点
discovery.zen.ping.unicast.hosts: ["本ip","其他节点ip"]
discovery.zen.minimum_master_nodes: 这是个数字 用来防止脑裂(就是一台服务器因为网络波动而使集群中其他节点认为它宕机了,其实没宕机,而出现两个master控制,造成数据不一致现象)的出现 用过半算法(mastere/2+1)防止出现脑裂
笔记
集群分布式个高可用在ES中都是默认配置和计算
集群的分布式,es的所有数据默认5个分片,每个分片默认一个副本(总共每个分片有2分,一份值主分片,一份是副分片)
集群配置完成后,启动所有集群节点, 分片和副本的数据将会自动计算分配到不同的 节点存储,只有从少到多的移动,没有从多到少的移动
分配默认5片,副本默认1片,自动根据集群节点数量最优的分配,分片越多,节点越多,副本越多,整个集群的分布式性能越高,高可用能力越高
配置的自动发现的list和最大的mster数量
集群的节点角色
master:负责管理集群,掌握信息元数据(所有的索引的分片数量,副本数量,分片的存储位置)所有的操作都是通过master完成的
data:数据节点,保存数据,被读,被写
负载均衡节点:既不管理集群,也不存储数据,只负责请求的转发,分担连接的压力
配置文件中node.master.true 表示主节点能力
node.data:true 表示数据存储能力
当都是false表示负载均衡
index.number_of_shards:5 默认是5 可以调节,一旦数据已经分片落地,
则不能改变
index.number_of_replicas: 1 值越大高可用能力越高,一旦落地,数据就不能改动
ES的脑裂 最小的master数量可以防止脑裂产生
计算公式:master数/2+1 过半
元数据:描述数据的数据(描述分片的数据)
master通信过程保持元数据一直,网络波动造成master之间的通信障碍,一旦超时
不管集群中的master如何出现脑裂的情况,只要按照过半配置
逻辑不是很清晰,存在问题,请百度解决,谢谢。