Elasticsearch之重要核心概念(cluster(集群)、shards(分配)、replicas(索引副本)、recovery(據恢復或叫數據重新分布)、gateway(es索引的持久化存儲方式)、discovery.zen(es的自動發現節點機制機制)、Transport(內部節點或集群與客戶端的交互方式)、settings(修改索引庫默認配置)和mappings)


 

 

Elasticsearch之重要核心概念如下:

 

1、cluster

  代表一個集群,集群中有多個節點,其中有一個為主節點,這個主節點是可以通過選舉產生的,主從節點是對於集群內部來說的。es的一個概念就是去中心化,字面上理解就是無中心節點,這是對於集群外部來說的,因為從外部來看es集群,在邏輯上是個整體,你與任何一個節點的通信和與整個es集群通信是等價的。

  主節點的職責是負責管理集群狀態,包括管理分片的狀態和副本的狀態,以及節點的發現和刪除。

    注意主節點不負責對數據的增刪改查請求進行處理,只負責維護集群的相關狀態信息。

  集群配置(修改conf/elasticsearch.yml文件)

    discovery.zen.ping.unicast.hosts: ["host1", "host2:9300"]

  集群狀態查看

    http://your ip:9200/_cluster/health?pretty   

  

 

   比如,我這里是

http://192.168.80.145:9200/_cluster/health?pretty

 

 

 

 

 

 

   想學習,請移步

Elasticsearch-2.4.3的單節點安裝(多種方式圖文詳解)

Elasticsearch-2.4.3的3節點安裝(多種方式圖文詳解)

 

 

 

2、shards

  代表索引分片,es可以把一個完整的索引分成多個分片Elasticsearch Client發送搜索請求,某個索引庫,一般默認是5個分片(shard)。這樣的好處是可以把一個大的索引水平拆分成多個,分布到不同的節點上。構成分布式搜索,提高性能和吞吐量。

 

 

 

  比如,http://master:9200/zhouls/user/1。則將索引zhouls,分成多個分片。

 

  分片的數量只能在創建索引庫時指定,索引庫創建后不能更改。

  只能在創建索引庫的時候指定

    curl -XPUT 'localhost:9200/zhouls/' -d'{"settings":{"number_of_shards":3}}'

  默認是一個索引庫有5個分片

    index.number_of_shards: 5

  每個分片中最多存儲2,147,483,519條數據

    Integer.MAX_VALUE-128【詳細解釋見備注】

 

 

   為了,更好的觀看es核心概念之shards索引片的效果,我在3台機器組建的es集群里演示,並且,關閉192.168.80.11和192.168.80.12,只留下192.168.80.10這台來測試。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   

  然后,執行

[hadoop@HadoopMaster elasticsearch-2.4.3]$ jps
2610 Jps
2014 Elasticsearch
[hadoop@HadoopMaster elasticsearch-2.4.3]$ curl -XPUT 'http://192.168.80.10:9200/zhouls/emp/1' -d'{"name":"tom","age":"18"}'
{"_index":"zhouls","_type":"emp","_id":"1","_version":1,"_shards":{"total":2,"successful":1,"failed":0},"created":true}[hadoop@HadoopMaster elasticsearch-2.4.3]$
[hadoop@HadoopMaster elasticsearch-2.4.3]$
[hadoop@HadoopMaster elasticsearch-2.4.3]$ ll
total 56
drwxrwxr-x. 2 hadoop hadoop 4096 Feb 22 01:37 bin
drwxrwxr-x. 3 hadoop hadoop 4096 Feb 22 18:46 config
drwxrwxr-x. 3 hadoop hadoop 4096 Feb 22 06:05 data
drwxrwxr-x. 2 hadoop hadoop 4096 Feb 22 01:37 lib
-rw-rw-r--. 1 hadoop hadoop 11358 Aug 24 2016 LICENSE.txt
drwxrwxr-x. 2 hadoop hadoop 4096 Feb 23 16:51 logs
drwxrwxr-x. 5 hadoop hadoop 4096 Dec 8 00:41 modules
-rw-rw-r--. 1 hadoop hadoop 150 Aug 24 2016 NOTICE.txt
drwxrwxr-x. 4 hadoop hadoop 4096 Feb 22 05:34 plugins
-rw-rw-r--. 1 hadoop hadoop 8700 Aug 24 2016 README.textile
[hadoop@HadoopMaster elasticsearch-2.4.3]$ cd data/
[hadoop@HadoopMaster data]$ ll
total 4
drwxrwxr-x. 3 hadoop hadoop 4096 Feb 22 06:05 elasticsearch
[hadoop@HadoopMaster data]$ cd elasticsearch/
[hadoop@HadoopMaster elasticsearch]$ ll
total 4
drwxrwxr-x. 3 hadoop hadoop 4096 Feb 22 06:05 nodes
[hadoop@HadoopMaster elasticsearch]$ cd nodes/
[hadoop@HadoopMaster nodes]$ ll
total 4
drwxrwxr-x. 4 hadoop hadoop 4096 Feb 23 18:31 0
[hadoop@HadoopMaster nodes]$ cd 0
[hadoop@HadoopMaster 0]$ ll

total 8
drwxrwxr-x. 3 hadoop hadoop 4096 Feb 23 18:31 indices
-rw-rw-r--. 1 hadoop hadoop 0 Feb 22 06:05 node.lock
drwxrwxr-x. 2 hadoop hadoop 4096 Feb 23 16:49 _state
[hadoop@HadoopMaster 0]$ cd indices/
[hadoop@HadoopMaster indices]$ ll
total 4
drwxrwxr-x. 8 hadoop hadoop 4096 Feb 23 18:31 zhouls
[hadoop@HadoopMaster indices]$ cd zhouls/
[hadoop@HadoopMaster zhouls]$ ll
total 24
drwxrwxr-x. 5 hadoop hadoop 4096 Feb 23 18:31 0
drwxrwxr-x. 5 hadoop hadoop 4096 Feb 23 18:31 1
drwxrwxr-x. 5 hadoop hadoop 4096 Feb 23 18:31 2
drwxrwxr-x. 5 hadoop hadoop 4096 Feb 23 18:31 3
drwxrwxr-x. 5 hadoop hadoop 4096 Feb 23 18:31 4
drwxrwxr-x. 2 hadoop hadoop 4096 Feb 23 18:31 _state
[hadoop@HadoopMaster zhouls]$ pwd
/home/hadoop/app/elasticsearch-2.4.3/data/elasticsearch/nodes/0/indices/zhouls
[hadoop@HadoopMaster zhouls]$

 

   藍色,這個目錄下,有0、1、2、3和4目錄,這幾個就是es的核心概念之shards索引片。

 

 

   現在,我將在192.168.80.10起來的基礎上,去對192.168.80.11和192.168.80.12啟動,來注意看shards索引片,是如何變化的?

 

  這就是變化!

 

   即,192.168.80.10是1,3,4

     192.168.80.11是0,2,3,4

     192.168.80.12是0,1,2

  es可以把一個完整的索引分成多個分片,這樣的好處是可以把一個大的索引水平拆分成多個,分布到不同的節點上。構成分布式搜索,提高性能和吞吐量。

 

  問:es的分片數,可以配置嗎?

  答:可以修改,在創建索引庫的時候,修改分片數,默認是5。當創建完索引庫之后,不能再修改分片數了。只能在創建索引庫的時候進行修改!!!

  比如, curl -XPUT 'http://192.168.80.10:9200/zhouls/' -d'{"settings":{"number_of_shards":3}}'

    新建索引庫zhouls時,對索引庫的默認5個修改為3個。

 

  更多,詳細,見es的官網 

https://www.elastic.co/guide/en/elasticsearch/reference/2.4/_basic_concepts.html#_shards_amp_replicas

 

 

 

 

 

 

 

3、replicas

  代表索引副本,es可以給索引分片設置副本。

  副本的作用:

  一是提高系統的容錯性,當某個節點某個分片損壞或丟失時可以從副本中恢復。

  二是提高es的查詢效率,es會自動對搜索請求進行負載均衡。

  【副本的數量可以隨時修改】

  可以在創建索引庫的時候指定

    curl -XPUT   'localhost:9200/zhouls/' -d'{"settings":{"number_of_replicas":2}}'

  或   curl -XPUT  'master:9200/zhouls/' -d'{"settings":{"number_of_replicas":2}}'

 

 

  默認是一個分片有1個副本。   數據量大了的話,分片多了也不太好。

    index.number_of_replicas: 1

  注意:主分片和副本不會存在一個節點中。

 

 

   同樣,做測試,為了,更好的觀看es核心概念之replicas副本的效果,我在3台機器組建的es集群里演示,並且,關閉192.168.80.11和192.168.80.12,只留下192.168.80.10這台來測試。

  可以看到,只開啟192.168.80.10這台機器的話,則默認的5個分片都到192.168.80.10這台了。

  注意:默認是一個分片有1個副本!

  為什么,是黃色? 按理說,現在這個集群里,是要有10個分片的,但是呢,現在,你只有5個分片。所以,是黃色警告。顯示集群監控值:yellows ( 5 of 10)

   單節點的話,這幾個分片,壓根就不會有副本。 

 

  那好,現在,再依次把192。168.80.11和192.168.80.12啟動起來。

 

 

  再刷新!

 

 

  那么,怎么認識,哪個框是主分片,哪個框是副本呢?

  答:顏色深的是主分片。

   同理,192.168.80.11和192.168.80.12的情況也是一樣:,如下

  可以看出,注意:主分片和副本不會存在一個節點中!

   分片,在磁盤里,本質就是一個目錄。

 

 

 

 

 

4、recovery

  代表數據恢復或叫數據重新分布,es在有節點加入或退出時會根據機器的負載對索引分片進行重新分配,掛掉的節點重新啟動時也會進行數據恢復。

   為了,更好的觀看es核心概念之recovery數據重新分布的效果,我在3台機器組建的es集群里演示,並且,先開啟192.168.80.10和192.168.80.11,然后,讓192.168.80.12來啟動!添加進來

 

  

  現在,進行啟動192.168.80.12

  同樣,也是,框線深的是主分片,淺的是副本。

 

  再把,192.168.80.12kill掉

 

   注意:如果索引很多,則數據恢復的工作非常慢!

 

  問:恢復期間,訪問數據會出現問題嗎?

  答:不會,因為,會有副本。只是說,訪問有延遲!

 

  問:具體多少個副本,或具體多少個分片,該怎么處理呢?在實際生產中。

  答:具體牽扯到ES的優化!后續,請見我的博客, https://i.cnblogs.com/posts?categoryid=950999 。

 

 

 

 

 

 

5、 Gateway

  代表es索引的持久化存儲方式,es默認是先把索引存放到內存中,當內存滿了時再持久化到硬盤。當這個es集群關閉再重新啟動時就會從gateway中讀取索引數據。es支持多種類型的gateway,有本地文件系統(默認),分布式文件系統,Hadoop的HDFS和Amazon的s3雲存儲服務。

   

 

   比如,我下面寫的這篇博客。

Elasticsearch之Hadoop插件的安裝(圖文詳解)

 

 

 

 

 

 

 

 

6、discovery.zen(es的自動發現節點機制機制)

   代表es的自動發現節點機制,es的一個基於p2p的系統,它先通過廣播尋找存在的節點,再通過多播協議來進行節點之間的通信,同時也支持點對點的交互。

   並沒有如spark、hadoop一樣,使用zookeeper。

  點對點,即數據的傳輸並不需要通過服務器,直接通過網絡中節點就可以了。

 

 

  如果是同網段,則默認是使用多播機制。

  如果是不同網段的節點如何組成es集群呢?如下

  禁用自動發現機制  

discovery.zen.ping.multicast.enabled:  false

 

 

  設置新節點被啟動時能夠發現的主節點列表

discovery.zen.ping.unicast.hosts:  ["192.168.20.210" , "192.168.20.211"  .  "192.168.20.212" ]

 

 

   更詳細,見官網

https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery.html

 

 

 

 

 

 

 

 7、Transport(內部節點或集群與客戶端的交互方式)

   代表es內部節點或集群與客戶端的交互方式,默認內部是使用tcp協議進行交互,同時它支持http協議(json格式)、thrift、servlet、memcached、zeroMQ等的傳輸協議(通過插件方式集成)。

 

   更詳細,見官網

https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-transport.html

 

 

 

 

 

 

8、settings(修改索引庫默認配置)

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html

 

 

 

Elasticsearch之settings和mappings

 

 

 

 

 

 

 

推薦

Elasticsearch筆記四之配置參數與核心概念


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM