ElasticSearch
Redis c++編寫代碼量小,消耗內(nèi)存大
SSDB 360的k-v硬盤
fastDFS阿里k-vNginx
大數(shù)據(jù)4V理論
?Volume,數(shù)據(jù)規(guī)模大,從T升到P、E;
?Variety,數(shù)據(jù)類型多,非結(jié)構(gòu)化的數(shù)據(jù)、語音、地理位置信息、視頻等數(shù)據(jù);
?Value,數(shù)據(jù)價(jià)值高,具有很大的商業(yè)價(jià)值,支持深層數(shù)據(jù)挖掘;
?Velocity,數(shù)據(jù)處理速度快,要求實(shí)時(shí)處理而非傳統(tǒng)的存儲(chǔ)性數(shù)據(jù)進(jìn)行數(shù)據(jù)庫處理。
層次架構(gòu)

基礎(chǔ)概念
接近實(shí)時(shí):Elasticsearch是一個(gè)接近實(shí)時(shí)的搜索平臺(tái)。這意味著,從索引一個(gè)文檔直到這個(gè)文檔能夠被搜索到有一個(gè)輕微的延遲(通常是1秒)
集群(cluster):一個(gè)集群就是由一個(gè)或多個(gè)節(jié)點(diǎn)組織在一起,它們共同持有你整個(gè)的數(shù)據(jù),并一起提供索引和搜索功能。
節(jié)點(diǎn)(node):一個(gè)節(jié)點(diǎn)是你集群中的一個(gè)服務(wù)器,作為集群的一部分,它存儲(chǔ)你的數(shù)據(jù),參與集群的索引和搜索功能。一個(gè)節(jié)點(diǎn)可以通過配置集群名稱的方式來加入一個(gè)指定的集群
索引(index):一個(gè)索引就是一個(gè)擁有幾分相似特征的文檔的集合。
類型(type):在一個(gè)索引中,你可以定義一種或多種類型。一個(gè)類型是你的索引的一個(gè)邏輯上的分類/分區(qū),其語義完全由你來定。
文檔(document):一個(gè)文檔是一個(gè)可被索引的基礎(chǔ)信息單元。
分片和復(fù)制(shards & replicas)
一個(gè)索引可以存儲(chǔ)超出單個(gè)結(jié)點(diǎn)硬件限制的大量數(shù)據(jù)。比如,一個(gè)具有10億文檔的索引占據(jù)1TB的磁盤空間,而任一節(jié)點(diǎn)都沒有這樣大的磁盤空間;或者單個(gè)節(jié)點(diǎn)處理搜索請(qǐng)求,響應(yīng)太慢。
為了解決這個(gè)問題,Elasticsearch提供了將索引劃分成多份的能力,這些份就叫做分片。當(dāng)你創(chuàng)建一個(gè)索引的時(shí)候,你可以指定你想要的分片的數(shù)量。每個(gè)分片本身也是一個(gè)功能完善并且獨(dú)立的“索引”,這個(gè)“索引”可以被放置到集群中的任何節(jié)點(diǎn)上。
分片之所以重要,主要有兩方面的原因:
允許你水平分割/擴(kuò)展你的內(nèi)容容量
允許你在分片(潛在地,位于多個(gè)節(jié)點(diǎn)上)之上進(jìn)行分布式的、并行的操作,進(jìn)而提高性能/吞吐量。
怎樣聚合回搜索請(qǐng)求,是完全由Elasticsearch管理的
ES部署
1.Cluster
cluster.name: elasticsearch
設(shè)置ElasticSearch集群的名字,默認(rèn)的集群名字為elasticsearch,如果想要讓某一ElasticSearch節(jié)點(diǎn)加入集群只需指定cluster.name
2. Node
node.name:“Franz
Kafka“,設(shè)置ElasticSearch節(jié)點(diǎn)的名字
node.master: true,設(shè)置節(jié)點(diǎn)是否為主節(jié)點(diǎn)
node.data: true,設(shè)置節(jié)點(diǎn)是否存儲(chǔ)索引分片
3. Index
index.number_of_shards: 5,設(shè)置索引的分片數(shù),默認(rèn)為5個(gè)分片
index.number_of_replicas: 1,設(shè)置索引的副本數(shù),默認(rèn)為1個(gè)副本
4. Paths
path.data: /data/esdata,設(shè)置索引數(shù)據(jù)的存儲(chǔ)路徑
path.logs: /data/eslogs,設(shè)置日志數(shù)據(jù)的存儲(chǔ)路徑
ES常用命令
_cat系列
_cat系列提供了一系列查詢elasticsearch集群狀態(tài)的接口。你可以通過執(zhí)行
curl -XGET localhost:9201/_cat
獲取所有_cat系列的操作
http://47.94.18.202:9201/
/_cat/allocation ?v
/_cat/shards ?v
/_cat/shards/{index} ?v
/_cat/master ?v
/_cat/nodes ?v
/_cat/indices ?v
/_cat/indices/{index} ?v
/_cat/segments ?v
/_cat/segments/{index} ?v
/_cat/count ?v
/_cat/count/{index} ?v
/_cat/recovery ?v
/_cat/recovery/{index} ?v
/_cat/health ?v
/_cat/pending_tasks ?v
/_cat/aliases ?v
/_cat/aliases/{alias} ?v
/_cat/thread_pool ?v
/_cat/plugins ?v
/_cat/fielddata ?v
/_cat/fielddata/{fields} ?v
你也可以后面加一個(gè)v,讓輸出內(nèi)容表格顯示表頭
2_cluster系列
1、查詢?cè)O(shè)置集群狀態(tài)
curl -XGET localhost:9201/_cluster/health?pretty=true
pretty=true表示格式化輸出
level=indices表示顯示索引狀態(tài)
level=shards表示顯示分片信息
2、curl -XGET localhost:9201/_cluster/stats?pretty=true
顯示集群系統(tǒng)信息,包括CPU JVM等等
3、curl -XGET localhost:9201/_cluster/state?pretty=true
集群的詳細(xì)信息。包括節(jié)點(diǎn)、分片等。
3、curl -XGETlocalhost:9201/_cluster/pending_tasks?pretty=true
2_nodes系列
1、查詢節(jié)點(diǎn)的狀態(tài)
curl -XGET ‘http://localhost:9201/_nodes/stats?pretty=true’
curl -XGET ‘http://localhost:9201/_nodes/192.168.1.2/stats?pretty=true’
curl -XGET ‘http://localhost:9201/_nodes/process’
curl -XGET ‘http://localhost:9201/_nodes/_all/process’
curl -XGET ‘http://localhost:9201/_nodes/192.168.1.2,192.168.1.3/jvm,process’
curl -XGET‘http://localhost:9201/_nodes/192.168.1.2,192.168.1.3/info/jvm,process’
curl -XGET ‘http://localhost:9201/_nodes/192.168.1.2,192.168.1.3/_all
curl -XGET ‘http://localhost:9201/_nodes/hot_threads
插件有kopf、head、sql
腦裂問題:由于某些節(jié)點(diǎn)的失效,部分節(jié)點(diǎn)的網(wǎng)絡(luò)連接會(huì)斷開,并形成一個(gè)與原集群一樣名字的集群,這種情況成為集群腦裂(split-brain)現(xiàn)象。這個(gè)問題非常危險(xiǎn),因?yàn)閮蓚€(gè)新形成的集群會(huì)同時(shí)索引和修改集群的數(shù)據(jù)。
正常情況下,集群中的所有的節(jié)點(diǎn),應(yīng)該對(duì)集群中master的選擇是一致的,這樣獲得的狀態(tài)信息也應(yīng)該是一致的,不一致的狀態(tài)信息,說明不同的節(jié)點(diǎn)對(duì)master節(jié)點(diǎn)的選擇出現(xiàn)了異?!簿褪撬^的腦裂問題。這樣的腦裂狀態(tài)直接讓節(jié)點(diǎn)失去了集群的正確狀態(tài),導(dǎo)致集群不能正常工作。