前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ELK总结——第一篇elaticsearch的搭建

ELK总结——第一篇elaticsearch的搭建

作者头像
胡齐
发布2019-12-05 23:27:02
5950
发布2019-12-05 23:27:02
举报
文章被收录于专栏:运维猫

1、ES简介

ES=elaticsearch简写, Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

2、Lucene与ES关系

1.Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。

2.Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

3、当前环境的困难

1.开发人员不能登录线上服务器查看详细日志。

2.各个系统都有日志,日志数据分散难以查找。

3.日志数据量大。查询速度慢,或者数据不够实时。

4、ES主要解决问题

1.检索相关数据;2.返回统计结果;3.速度要快。

5、ES工作原理

当ElasticSearch的节点启动后,它会利用多播(multicast)(或者单播,如果用户更改了配置)寻找集群中的其它节点,并与之建立连接。这个过程如下图所示:

6、ES核心概念

1.Cluster:集群。

ES可以作为一个独立的单个搜索服务器。不过,为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。

2.Node:节点。

形成集群的每个服务器称为节点,所有节点都是对等的,数据存在每个节点中,防止数据丢失。

3.Shard:分片。

当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够。这种情况下,数据可以分为较小的分片。每个分片放到不同的服务器上。当你查询的索引分布在多个分片上时,ES会把查询发送给每个相关的分片,并将结果组合在一起,而应用程序并不知道分片的存在。即:这个过程对用户来说是透明的。

4.Replia:副本。

为提高查询吞吐量或实现高可用性,可以使用分片副本。副本是一个分片的精确复制,每个分片可以有零个或多个副本。ES中可以有许多相同的分片,其中之一被选择更改索引操作,这种特殊的分片称为主分片。当主分片丢失时,如:该分片所在的数据不可用时,集群将副本提升为新的主分片。

5.全文检索。

全文检索就是对一篇文章进行索引,可以根据关键字搜索,类似于mysql里的like语句。全文索引就是把内容根据词的意义进行分词,然后分别创建索引,例如”你们的激情是因为什么事情来的” 可能会被分词成:“你们“,”激情“,“什么事情“,”来“ 等token,这样当你搜索“你们” 或者 “激情” 都会把这句搜出来。

7、ES特点和优势

1.分布式实时文件存储,可将每一个字段存入索引,使其可以被检索到。

2.实时分析的分布式搜索引擎。分布式:索引分拆成多个分片,每个分片可有零个或多个副本。集群中的每个数据节点都可承载一个或多个分片,并且协调和处理各种操作;负载再平衡和路由在大多数情况下自动完成。

3.可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。也可以运行在单台PC上(已测试)。

4.支持插件机制,分词插件、同步插件、Hadoop插件、可视化插件等。

8、Elasticsearch单机部署

8.1配置JAVA环境,检验环境:java -version
代码语言:javascript
复制
 [root@elasticsearch-01 ~]# ls
 jdk-8u91-linux-x64.tar.gz 
 [root@elasticsearch-01 ~]# tar xf jdk-8u91-linux-x64.tar.gz -C /usr/local/
 [root@elasticsearch-01 ~]# ln -s /usr/local/jdk1.8.0_91/ /usr/local/java
 [root@elasticsearch-01 ~]# sed -i '$a export JAVA_HOME=/usr/local/java \nexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH \nexport CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar' /etc/profile
 [root@elasticsearch-01 ~]# source /etc/profile
 [root@elasticsearch-01 ~]# java -version
 java version "1.8.0_91"
 Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
 Java HotSpot(TM) 64-BitServer VM (build 25.91-b14, mixed mode)
8.2安装elasticsearch
代码语言:javascript
复制
 [root@elasticsearch-01 ~]# cd /usr/local/src/
 [root@elasticsearch-01 src]# wget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.0/elasticsearch-2.3.0.tar.gz
 [root@elasticsearch-01 src]# tar -zxvf elasticsearch-2.3.0.tar.gz -C /usr/local/
 [root@elasticsearch-01 src]# cd /usr/local/
 [root@elasticsearch-01 local]# ln -s elasticsearch-2.3.0 elasticsearch
8.3创建elasticsearch运行用户,es只能用普通用户启动
代码语言:javascript
复制
 [root@elasticsearch-01 local]# groupadd elasticsearch
 [root@elasticsearch-01 local]# useradd -g elasticsearch elasticsearch
 [root@elasticsearch-01 local]# chown -R elasticsearch:elasticsearch /usr/local/elasticsearch
8.4创建文件目录
代码语言:javascript
复制
 [root@elasticsearch-01 local]# su - elasticsearch
 上一次登录:二 11月 2615:09:49 CST 2019pts/0 上
 [elasticsearch@elasticsearch-01 ~]$ mkdir-pv/usr/local/elasticsearch/data
 [elasticsearch@elasticsearch-01 ~]$ mkdir-pv/usr/local/elasticsearch/logs
8.5修改配置文件
代码语言:javascript
复制
 [elasticsearch@elasticsearch-01 ~]$ cd/usr/local/elasticsearch/config/
 [elasticsearch@elasticsearch-01 config]$ vimelasticsearch.yml 
  1cluster.name: ELK-elasticsearch
  2node.name: node-1
  3path.data: /usr/local/elasticsearch/data
  4path.logs: /usr/local/elasticsearch/logs
  5bootstrap.mlockall: true
  6network.host: 172.17.120.11
  7http.port: 9200
  8node.master: true
  9node.data: true
8.6查看health状况
代码语言:javascript
复制
 [root@elasticsearch-02 ~]# curl -X GET http://172.17.120.11:9200 ##获取网页内容
 {
  "name": "node-1",
  "cluster_name": "ELK-elasticsearch",
  "version": {
    "number": "2.3.0",
    "build_hash": "8371be8d5fe5df7fb9c0516c474d77b9feddd888",
    "build_timestamp": "2016-03-29T07:54:48Z",
    "build_snapshot": false,
    "lucene_version": "5.5.0"
 },
  "tagline": "You Know, for Search"
 }
 [root@elasticsearch-02 ~]# curl -I GET http://172.17.120.11:9200 ##获取网页头部信息,200正常
 curl: (6) Could not resolve host: GET; 未知的名称或服务
 HTTP/1.1 200OK
 Content-Type: text/plain; charset=UTF-8
 Content-Length: 0
8.7安装elasticsearch管理插件
代码语言:javascript
复制
 [elasticsearch@elasticsearch-01 elasticsearch]$ /usr/local/elasticsearch/bin/plugin install mobz/elasticsearch-head

9、Elasticsearch集群搭建(三台机器)

1.修改elasticsearch主配置文件
代码语言:javascript
复制
 [elasticsearch@elasticsearch-01 config]$ vimelasticsearch.yml
 cluster.name: ELK-elasticsearch  ##集群的名称
 node.name: node-1  ##节点名称,其余两个节点分别为node-2 和node-3
 node.master: true ##指定该节点是否有资格被选举成为master节点,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master
 node.data: true ##允许该节点存储数据(默认开启)
 path.data: /usr/local/elasticsearch/data  ##索引数据的存储路径
 path.logs: /usr/local/elasticsearch/logs  ##日志文件的存储路径
 bootstrap.mlockall: true ##设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,当jvm开始swapping时es的效率会降低,所以要保证它不swap
 network.host: 0.0.0.0  ##绑定的ip地址
 http.port: 9200 ##设置对外服务的http端口,默认为9200
 transport.tcp.port: 9300 ##设置节点间交互的tcp端口,默认是9300 
 discovery.zen.ping.unicast.hosts: ["172.17.120.11:9300", "172.17.120.12:9300", "172.17.120.13:9300"]  ##Elasticsearch将绑定到可用的环回地址,并将扫描端口9300到9305以尝试连接到运行在同一台服务器上的其他节点。这提供了自动集群体验,而无需进行任何配置。数组设置或逗号分隔的设置。每个值的形式应该是host:port或host(如果没有设置,port默认设置会transport.profiles.default.port 回落到transport.tcp.port)。请注意,IPv6主机必须放在括号内。默认为127.0.0.1, [::1]
 discovery.zen.minimum_master_nodes: 2 ##如果没有这种设置,遭受网络故障的集群就有可能将集群分成两个独立的集群 - 分裂的大脑 - 这将导致数据丢失
2.修改elasticsearch从slave1配置文件
代码语言:javascript
复制
 [root@elasticsearch-02 ~]# cat /usr/local/elasticsearch/config/elasticsearch.yml 
 cluster.name: ELK-elasticsearch
 node.name: node-2
 node.master: true
 node.data: true
 path.data: /usr/local/elasticsearch/data
 path.logs: /usr/local/elasticsearch/logs
 bootstrap.mlockall: true
 network.host: 0.0.0.0
 http.port: 9200
 transport.tcp.port: 9300
 discovery.zen.ping.unicast.hosts: ["172.17.120.11:9300", "172.17.120.12:9300", "172.17.120.13:9300"]
 discovery.zen.minimum_master_nodes: 2
3.修改elasticsearch从slave2配置文件
代码语言:javascript
复制
 [root@elasticsearch-03 ~]# cat /usr/local/elasticsearch/config/elasticsearch.yml 
 cluster.name: ELK-elasticsearch
 node.name: node-3
 node.master: true
 node.data: true
 path.data: /usr/local/elasticsearch/data
 path.logs: /usr/local/elasticsearch/logs
 bootstrap.mlockall: true
 network.host: 0.0.0.0
 http.port: 9200
 transport.tcp.port: 9300
 discovery.zen.ping.unicast.hosts: ["172.17.120.11:9300", "172.17.120.12:9300", "172.17.120.13:9300"]
 discovery.zen.minimum_master_nodes: 2

10、启动服务

代码语言:javascript
复制
 [elasticsearch@elasticsearch-01 config]$ /usr/local/elasticsearch/bin/elasticsearch >/dev/null 2>&1 &
 [elasticsearch@elasticsearch-02 ~]$ /usr/local/elasticsearch/bin/elasticsearch >/dev/null 2>&1 &
 [elasticsearch@elasticsearch-03 ~]$ /usr/local/elasticsearch/bin/elasticsearch >/dev/null 2>&1 &

11、国内外使用优秀案例

1.2013年初,GitHub抛弃了Solr,采取ElasticSearch 来做PB级的搜索。“GitHub使用ElasticSearch搜索20TB的数据,包括13亿文件和1300亿行代码”。

2.维基百科:启动以elasticsearch为基础的核心搜索架构。

3.SoundCloud:“SoundCloud使用ElasticSearch为1.8亿用户提供即时而精准的音乐搜索服务”。

4.百度:百度目前广泛使用ElasticSearch作为文本数据分析,采集百度所有服务器上的各类指标数据及用户自定义数据,通过对各种数据进行多维分析展示,辅助定位分析实例异常或业务层面异常。目前覆盖百度内部20多个业务线(包括casio、云分析、网盟、预测、文库、直达号、钱包、风控等),单集群最大100台机器,200个ES节点,每天导入30TB+数据。

12、为什么那么多工具适配Elasticsearch

1.Elasticsearch是开源的。

2.Elasticsearch提供了JAVA API接口。

3.Elasticsearch提供了RESTful API接口(不管程序用什么语言开发,任何程序都可以访问)。

4.更重要的是,REST请求和应答是典型的JSON(JavaScript对象 符号)格式。通常情况下,一个REST请求包含一个JSON文件,其回复都 也是一个JSON文件。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维猫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、ES简介
  • 2、Lucene与ES关系
  • 3、当前环境的困难
  • 4、ES主要解决问题
  • 5、ES工作原理
  • 6、ES核心概念
    • 1.Cluster:集群。
      • 2.Node:节点。
        • 3.Shard:分片。
          • 4.Replia:副本。
            • 5.全文检索。
            • 7、ES特点和优势
            • 8、Elasticsearch单机部署
              • 8.1配置JAVA环境,检验环境:java -version
                • 8.2安装elasticsearch
                  • 8.3创建elasticsearch运行用户,es只能用普通用户启动
                    • 8.4创建文件目录
                      • 8.5修改配置文件
                        • 8.6查看health状况
                          • 8.7安装elasticsearch管理插件
                          • 9、Elasticsearch集群搭建(三台机器)
                            • 1.修改elasticsearch主配置文件
                              • 2.修改elasticsearch从slave1配置文件
                                • 3.修改elasticsearch从slave2配置文件
                                • 10、启动服务
                                • 11、国内外使用优秀案例
                                • 12、为什么那么多工具适配Elasticsearch
                                相关产品与服务
                                Elasticsearch Service
                                腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档