1. 程式人生 > >Elasticsearch 系列指南(一)——安裝配置

Elasticsearch 系列指南(一)——安裝配置

這個世界已經被資料淹沒。我們創造的系統所產生的資料可以瞬間輕而易舉地將我們壓垮,現有的科技一直致力於如何儲存資料,並能將擁有大量資訊的資料倉庫結構化。而當你準備開始從大量的資料中得出結論做決策的時候,美好的一天就要被毀滅了……

Elasticsearch 是一個分散式可擴充套件的實時搜尋和分析引擎。它能幫助你搜索、分析和瀏覽資料,而往往大家並沒有在某個專案一開始就預料到需要這些功能。Elasticsearch 之所以出現就是為了重新賦予硬碟中看似無用的原始資料新的活力。

無論你是需要全文搜尋、結構化資料的實時統計,還是兩者的結合,這本指南都會幫助你瞭解其中最基本的概念,從最基本的操作開始學習 Elasticsearch。之後,我們還會逐漸開始探索更加複雜的搜尋技術,你可以根據自身的學習的步伐。

Elasticsearch 並不是單純的全文搜尋這麼簡單。我們將向你介紹講解結構化搜尋、統計、查詢過濾、地理定位、自動完成以及你是不是要查詢的提示。我們還將探討如何給資料建模能提升 Elasticsearch 的效能,以及在生產環境中如何配置、監視你的叢集。

入門

1.1初始

Elasticsearch 是一個建立在全文搜尋引擎 Apache Lucene(TM) 基礎上的搜尋引擎,可以說 Lucene 是當今最先進,最高效的全功能開源搜尋引擎框架。

但是 Lucene 只是一個框架,要充分利用它的功能,你需要使用 JAVA,並且在你的程式中整合 Lucene。更糟的是,你需要做很多的學習瞭解,才能明白它是如何執行的,Lucene 確實非常複雜。

Elasticsearch 使用 Lucene 作為內部引擎,但是在你使用它做全文搜尋時,只需要使用統一開發好的API即可,而並不需要了解其背後複雜的 Lucene 的執行原理。

當然 Elasticsearch 並不僅僅是 Lucene 那麼簡單,它不僅包括了全文搜尋功能,還可以進行以下工作:

分散式實時檔案儲存,並將每一個欄位都編入索引,使其可以被搜尋。
實時分析的分散式搜尋引擎。
可以擴充套件到上百臺伺服器,處理PB級別的結構化或非結構化資料。
這麼多的功能被整合到一臺伺服器上,你可以輕鬆地通過客戶端或者任何你喜歡的程式語言與 ES 的 RESTful API 進行交流。

Elasticsearch 的上手是非常簡單的。它附帶了很多非常合理的預設值,這讓初學者很好地避免一上手就要面對複雜的理論,它安裝好了就可以使用了,用很小的學習成本就可以變得很有生產力。

隨著學習的深入,你還可以使用 Elasticsearch 更多高階的功能,整個引擎可以很靈活地進行配置。你可以根據自身需求來定製屬於你自己的 Elasticsearch。

基本概念

對es有幾個核心概念,開始學習之前理解這些概念將極大的幫助你理解後面的學習

Near Realtime(NRT)–接近實時

elasticsearch 是一個接近實時的搜尋平臺。通俗的講就是,從你索引一個文件直到這個文件可被搜尋會有一段時間的延遲(一般是1s)。個人理解就是你建立了個文件,會有將近1秒的延遲,別人才能搜尋到這個文件

Cluster–叢集

叢集就是一個或者多個節點(伺服器)的集合,承載著你的所有資料並在所有節點之間提供聯合索引和搜尋能力。一個叢集被一個唯一的名字所標識,預設是elasticsearch。這個名字很重要,因為一個節點要加入叢集,必須指定這個叢集的名字。

確保在不同的環境不要使用相同的叢集名字,否則節點將加入錯誤的叢集。

注意,一個叢集就有一個節點是合法的。除此之外,你也可以有多個相互獨立的叢集,每個用一個唯一的名字標識。

Node–節點

節點就是叢集中的一個單個伺服器,它儲存資料,參與叢集的索引和搜尋。就像一個叢集,節點也用一個名字來標識,預設是一個隨機的傳奇人物的名字,在節點啟動的時候被指定。

一個節點可以配置加入一個叢集通過叢集的名字。預設,每個節點設定為加入名字為elasticsearch 的叢集,這就意味著,如果你啟動了多個節點在你的網路-假定他們能彼此發現對方-他們將自動的組織成一個名字為elasticsearch的叢集。

在一個叢集中,你可以擁有你想要數量的節點。除此之外,如果沒有其他elastisearch節點當前執行在你的網路上,啟動一個節點將預設形成一個新的單個節點的名字為elastisearch的叢集

index–索引

一個索引就是文件的集合,這些文件有幾分相似的特性。比如,你可以有一個索引儲存客戶資料,另一個索引儲存產品分類,另一個索引儲存訂單資訊。一個索引用一個名字來標識(必須是小寫),這個名字被用來指定索引當針對其中的文件執行索引、搜尋、更新、刪除操作時。

在一個叢集中,你可以定義任意數量的索引,只要你想。

es 的index 相當於mysql 的database (個人理解)

Type–型別

在索引中,你可以定義一個或者多個型別。type是index的邏輯分類,怎麼定義完全取決於你。大體上,具有相同欄位的文件的集合被定義為一個type。打個比方,你運行了一個部落格平臺,且所有資料儲存在了一個index裡。在這個index裡,你可以給使用者資料定義一個type,給部落格資料定義一個type,給評論資料定義一個type。

type相當於mysql的 table

Document – 文件

一個文件是可被索引的基本資訊單元。例如,你可以有一個針對顧客的文件,還可以有個針對產品的文件,還可以有一個針對訂單的文件。文件用json格式表示,此格式是普遍使用的一種資料交換格式。

在一個index/type中,你可以儲存你想要數量的文件。注意,儘管一個文件物理上存在一個index中,一個文件事實上必須被指定到一個index中的type上。

document相當於myslq 的 row

shards & replicas – 分片與副本

一個index可能儲存大量的資料,且超過了一個節點硬體的容量限制。比如,一個index儲存了10億個文件,這將佔據1TB的硬碟,這不適合儲存在一個節點的硬碟上,或者在如此大的資料量的情況下,從單一節點請求未免太慢。

去解決這個問題,elastisearch細分index為多個碎片稱之為shards。當建立索引時,你可以定義你想要的shards數量。每個shard都是功能齊全、獨立的‘index’,且可分佈在叢集的任何節點上。

分片重要主要有以下兩點:

它允許你水平的拆分/擴充套件你的資料量
它允許你分發和並行的跨分片操作(可能在多個節點上),從而提高效能和吞吐量。
shard是如何分佈的和文件是如何聚合回搜尋請求點是完全由elasticsearch管理的,這對於你來說是透明的。

在網路/雲環境,故障在任何時候都可能不期而至,這是非常有用和高度推薦的去部署一個故障轉移機制,以防shard/node不知何故掉線或者消失因為某種原因。為此,elasticsearch允許你去給shards 部署一個或者多個拷貝被稱為副本shards,或者副本簡而言之。

副本重要的兩點原因:

支援高可用當shard/node掛掉。基於這個原因,需要明確注意的是副本永遠不要和他的shard分配到一個節點(node)上。
它可以擴充套件搜尋量和吞吐量,因為搜尋可以並行的在所有副本上執行

總結,每個index可以拆分成多個shards。一個index也可以被複制0次或者多次。一旦被複制,每個index將擁有主分片(primary)和副本分片(replica)。index在建立的時候可以指定shards和replicas的數量。index建立後,副本的數量可以在任何時候動態的調整,但是主分片(primary)的數量是不能調整的。

預設,每個index在es裡被分配5個主分片和一個副本,這個的意思是如果你有至少兩個節點在你的叢集裡,你的index將有5個主分片和另五個副本分片(1 個完整的副本),總共10個分片對每個index。

注意注意

每個es的shard 都是一個lucene index。在每個Luene index裡,documents數量都有個上線。根據LUCENE-5843,這個限制是2,147,483,519(=integer.MAX_VALUE-128)。你可以監控shard size 使用_cat/shards api (之後會學習到)

1.2安裝

安裝 JAVA

yum install java-1.7.0-openjdk -y

安裝 Elasticsearch

瞭解 Elasticsearch 最簡單的方法就是去盡情的玩兒它(汗),準備好了我們就開始吧。

安裝 Elasticsearch 只有一個要求,就是要安裝最新版本的JAVA。你可以到官方網站下載它:www.java.com.

你可以在這裡下載到最新版本的 Elasticsearch: elasticsearch.org/download.

curl -L -O http://download.elasticsearch.org/PATH/TO/LATEST/$VERSION.zip
unzip elasticsearch-VERSION.zipcdelasticsearchVERSION
提示: 當你安裝 Elasticsearch 時,你可以到 下載頁面 選擇Debian或者RP安裝包。或者你也可以使用官方提供的 Puppet module 或者 Chef cookbook.

執行 Elasticsearch

Elasticsearch 已經蓄勢待發,現在你便可以執行它了:

./bin/elasticsearch
如果你想讓它在後臺保持執行的話可以在命令後面再加一個 -d

開啟後你就可以使用另一個終端視窗來進行測試了:

{
  "name" : "dxEOZL2",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "HGYuUvO_TYeS7I4W2x9eXQ",
  "version" : {
    "number" : "6.1.1",
    "build_hash" : "bd92e7f",
    "build_date" : "2017-12-17T20:23:25.338Z",
    "build_snapshot" : false,
    "lucene_version" : "7.1.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

這就說明你的 Elasticsearch 叢集 已經上線運行了,這時我們就可以進行各種實驗了。

安裝Elasticsearch-head外掛

由上面curl ‘http://localhost:9200/?pretty’ 的結果可見是一些json格式的字元轉並不直觀,因此head外掛為我們提供了一個很友好的視覺化web介面,並且可以進行基本的資料檢索,模擬等
GitHub搜尋Elasticsearch-head 選擇下圖這個開啟下載解壓到指定目錄

這裡寫圖片描述node -v檢視node版本必須大於6.0 沒有可先安裝node
進入到解壓的head目錄執行npm install進行包安裝
安裝完成後執行npm run start啟動當出現如下所示表明啟動成功

mjdeMacBook-Pro:elasticsearch-head-master mj$ npm run start

[email protected] start /Applications/javatools/Elasticsearch/elasticsearch-head-master
 grunt server

(node:30630) ExperimentalWarning: The http2 module is an experimental API.
Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100

複製http://localhost:9100 瀏覽器中開啟便可看到如下圖所示
這裡寫圖片描述
目前是未連線狀態,因為Elasticsearch沒啟動且和head是兩個獨立的程序之間存在跨域問題,因此要做如下配置
現將head停掉進入Elasticsearch目錄執行
vim config/elasticsearch.yml
在檔案的最下面加上

http.cors.enabled: true
http.cors.allow-origin: "*"

儲存退出
執行./bin/elasticsearch -d後臺啟動elasticsearch
在進入head目錄執行npm run start啟動head外掛
再次去瀏覽器出阿信剛才的頁面出現如下頁面
這裡寫圖片描述
此時我們就可以看到安裝Elasticsearch的節點資訊了,上面的叢集健康狀態由原來灰色變為綠色表示正常,如果是黃色說明叢集健康有問題但可以使用,如果是紅色則基本可能出現數據丟失等的問題基本不可用了。

注意:這裡連線的的是本地的安裝Elasticsearch所以是localhost 如果連線其他地址可在head目錄下修改_site/app.js檔案裡的地址

this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";

把localhost修改成你es的伺服器地址,如:

this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://10.10.10.10:9200";
至此head外掛安裝完成至此head外掛安裝完成

分散式安裝

進入Elasticsearch 目錄執行
vim config/elasticsearch.yml
在最後新增

//指定叢集名稱
cluster.name: myblog
//指定指揮官節點為master
node.name: master
//確定節點為主節點
node.master: true
//繫結IP埠預設為9200
network.host: 127.0.0.1

將Elasticsearch拷貝多份(這裡都在一臺機器暫定兩份)安裝方法不變分別命名為slave1和slave2
修改slave1配置 vim config/elasticsearch.yml 同樣後面加上

cluster.name: myblog
node.name: slave1

network.host: 127.0.0.1
//預設為9200和master埠區分開
http.port: 8200
//指定叢集指揮官地址
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]

同樣方法配置slave2然後啟動開啟http://localhost:9100/ 如下圖所示表示分散式安裝完成 ⭐️表示指揮官⭕️表示隨從
這裡寫圖片描述

相關推薦

Elasticsearch 系列指南——安裝配置

這個世界已經被資料淹沒。我們創造的系統所產生的資料可以瞬間輕而易舉地將我們壓垮,現有的科技一直致力於如何儲存資料,並能將擁有大量資訊的資料倉庫結構化。而當你準備開始從大量的資料中得出結論做決策的時候,美好的一天就要被毀滅了…… Elasticsearch 是一

elasticsearch入門指南elasticsearch-5.5.2安裝配置和啟動

一,安裝JDK    略二,安裝elasticsearch1,下載安裝包官網下載地址:https://www.elastic.co/cn/downloads/elasticsearch,本文centos作業系統下安裝elasticsearch的tar包為例,講述安裝過程2,新

Redis安裝配置

redis zadd sadd Redis簡介: Redis(REmote DIctionary Server)是一個開源的使用ANSI C語言編寫、遵守BSD協議、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。它通常被稱為數據結構服務器,因為值(v

Redis叢集安裝配置和簡便槽分配

為什麼要用Redis叢集 Redis叢集是Redis提供的分散式資料庫方案,叢集通過**分片(sharding)**來進行資料提供,並提供複製和故障轉移功能。 學習記錄以下幾點: 節點 槽指派 命令執行 重新分片 轉向 故障轉移 訊

Elasticsearch 系列指南——整合ik分詞器

{ "tokens": [ { "token": "聯", "start_offset": 0, "end_offset": 1, "type": "<IDEOGRAPHIC>

VS2017下OpenCV3.2學習筆記安裝配置、測試程式

第一步:安裝 將opencv安裝好,放入C盤中 第二步:配置環境變數 計算機->屬性->高階系統設定->環境變數 C:\ opencv\build\x64\vc1

OpenCV學習筆記——安裝配置、第一個程式

決心開始研究OpenCV。閒言少敘,sourceforge網站最近的版本是2011年8月的OpenCV2.3.1,下載安裝,我這裡使用的開發環境是vs2008,網上搜了一下配置的教程,與之前的幾個OpenCV版本的配置過程大體相同:(教程網上很多,知之為知之,不知百度之,我

nodejs之安裝配置

下載安裝NodeJS後,在自己選擇的路徑下會有如下的檔案:預設情況下NodeJS安裝會同時安裝npm(模組管理器:用於管理使用者require的模組,有全域性和本地兩種)。******nodejs安裝好後,安裝路徑下的node_modules資料夾中有npm資料夾,並且在npm中有node_modules資料

Gradle安裝配置

5.2.1 構建項目 groov tor google 壓縮文件 alt 時間 ice Gradle是一個基於Apache Ant和Apache Maven概念的項目自動化構建開源工具。它使用一種基於Groovy的特定領域語言(DSL)來聲明項目設置,拋棄了基於XML的各種

Kafka 入門--安裝配置和 kafka-python 呼叫

一、Kafka 簡介 1.基本概念   Kafka 是一個分散式的基於釋出/訂閱訊息系統,主要應用於大資料實時處理領域,其官網是:http://kafka.apache.org/。Kafka 是一個分散式、支援分割槽的(Partition)、多副本的(Replica),基於 ZooKeeper 協調的釋出/訂

ElasticSearch筆記整理:簡介、REST與安裝配置

大數據 ElasticSearch ELK [TOC] ElasticSearch簡介 ElasticSearch是一款基於Apache Lucene構建的開源搜索引擎,它采用Java編寫並使用Lucene構建索引、提供搜索功能,ElasticSearch的目標是讓全文搜索變得簡單,開發者可以通

Hadoop系列CentOS7安裝配置及SSH無密碼驗證配置

由於最近在進行關於Hadoop的學習,開始重新搭建一套Hadoop的環境,和之前自己搭建的環境的區別在於作業系統的版本,本次採用的為CentOS7.2的版本,7相對於6的版本改動較大。一些命令都不太一樣,其中在其核心中加了Docker,因此在後期裝相關軟體時不需要重新安

Redis系列--安裝、helloworld以及讀懂配置檔案

再開個redis系列,本系列打算不詳細講一系列的命名的了(會推薦別人寫的,人家寫的夠詳細了),我直接就是做redis方案提供,當然一開始還是講下helloworld和配置檔案好了。會逐步更新,歡迎關注。 文章結構:(1)安裝;(2)helloworld;(

Django學習筆記——安裝,創建項目,配置

lvs csv oot url root import 方式 配置文件 函數 瘋狂的暑假學習之 Django學習筆記(一) 教材 書《The Django Book》 視頻:csvt Django視頻 1.創建項目

ELK學習筆記安裝Elasticsearch、Kibana、Logstash和X-Pack

成功 前端 功能 靈活 日誌分析 傳統 開發人員 收集 還在 最近在學習ELK的時候踩了不少的坑,特此寫個筆記記錄下學習過程。 日誌主要包括系統日誌、應用程序日誌和安全日誌。系統運維和開發人員可以通過日誌了解服務器軟硬件信息、檢查配置過程中的錯誤及錯誤發生的原因。經常分析日

MyEclipse WebSphere開發教程:WebSphere 7安裝指南

develop 技術分享 thum server file enter 操作系統 更多 launchpad 【周年慶】MyEclipse個人授權 折扣低至冰點!立即開搶>> 【MyEclipse最新版下載】 一、先決條件和系統信息 想要使用WebSphere

docker安裝和必要的配置

cgroup deb secure expec dex store div post oca Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制

MySQL 系列安裝

運行級別 環境準備 開機自啟動 glibc mysql 復制 mysq char rem MySQL 系列(一)安裝 以 Centos7 下安裝 MySQL 5.6 為例。 一、環境準備 (1) 下載 下載地址: https://dev.mysql.com/get/Down

Ansible自動化運維安裝配置

安裝Ansible 使用包管理工具安裝 因為RHEL、CentOS的官方yum源中沒有Ansible安裝包。需要安裝EPEL作為部署Ansible的預設yum源。 CentOS7版本: rpm -Uvh http://mirrors.zju.edu.cn/epel/7/x86_64/

Spring Boot 2.0幹貨系列Spring Boot1.5X升級到2.0指南

大量 gist 博客 指南 gem follow ref contex str 前言Spring Boot已經發布2.0有滿久了,多了很多新特性,一些坑也慢慢被填上,最近有空,就把本博客中Spring Boot幹貨系列對應的源碼從1.5X升級到Spring Boot 2.0