目錄
Elasticsearch 是一個實時的分佈式搜索分析引擎, 它能讓你以一個之前從未有過的速度和規模,去探索你的數據。它可以快速地儲存、搜索和分析海量數據,維基百科、Stack Overflow、Github 都採用它:
- Wikipedia 使用 Elasticsearch 提供帶有高亮片段的全文搜索,還有 search-as-you-type 和 did-you-mean 的建議;
- 衛報 使用 Elasticsearch 將網絡社交數據結合到訪客日誌中,實時的給它的編輯們提供公衆對於新文章的反饋;
- Stack Overflow 將地理位置查詢融入全文檢索中去,並且使用 more-like-this 接口去查找相關的問題與答案;
- GitHub 使用 Elasticsearch 對1300億行代碼進行查詢。
一、簡介
ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful Web接口,同時Elasticsearch是用Java開發的,並作爲Apache許可條款下的開放源碼發佈,是當前流行的企業級搜索引擎。它的目的是通過簡單的RESTful API來隱藏Lucene的複雜性,從而讓全文搜索變得簡單。
- Elastic能夠解決的問題主要包括:
- 數據庫字段太多,查詢太慢,索引沒有辦法再做優化;
- 數據庫一個count就拖死全表;
- mysql的limit翻到幾十幾百萬頁後實在是太慢;
- 數據庫like實在太慢,每次like整個服務器cpu內存飆高,拖慢整個線上服務;
- 想要對外/內提供db裏的數據的全文檢索服務;
- 提供日誌(程序運行)查詢功能。
Elastic是基於java開發的語言,在ElasticSearch 6.5版本開始,支持了Java11的版本。在7.0開始,ElasticSaerch已經內置了java開發環境。
二、下載並運行ElasticSearch
可以從https://www.elastic.co/cn/downloads/上下載對應的ElasticSearch產品,包括:
- Elasticsearch(分佈式、RESTful 風格的搜索和分析)
- Kibana(實現數據可視化)
- Logstash(採集、轉換、充實,然後輸出)
- 其他(APM、App Search等)
三、在Windows上運行ElasticSearch
1.在Windows環境部署ElasticSearch環境較爲容易,下載對應的ElasticSearch壓縮包,進行解壓,對應的目錄如下圖所示:
2.進入bin環境運行ElasticSearch
3.ElasticSearch插件相關命令:
#查看ElasticSearch已安裝的插件
bin\elasticsearch-plugin list
#ElasticSearch安裝插件
bin\elasticsearch-plugin install <插件名稱>
#移除ElasticSearch安裝插件
bin\elasticsearch-plugin remove <插件名稱>
4.創建多節點集羣時,使用命令:
#創建一個所屬集羣爲geektime,節點名稱爲node0,節點數據存儲路徑爲data0_data的節點
.\bin\elasticsearch -E node.name=node0 -E cluster.name=geektime -E path.data=data0_data -d
#創建一個所屬集羣爲geektime,節點名稱爲node1,節點數據存儲路徑爲data1_data的節點
.\bin\elasticsearch -E node.name=node1 -E cluster.name=geektime -E path.data=data1_data -d
#創建一個所屬集羣爲geektime,節點名稱爲node2,節點數據存儲路徑爲data2_data的節點
.\bin\elasticsearch -E node.name=node2 -E cluster.name=geektime -E path.data=data2_data -d
#創建一個所屬集羣爲geektime,節點名稱爲node3,節點數據存儲路徑爲data3_data的節點
.\bin\elasticsearch -E node.name=node3 -E cluster.name=geektime -E path.data=data3_data -d
驗證集羣是否啓動
注:大家可以查看_cat下面包含哪些命令,你應該會發現新大陸哦!
現在,樓主在工作中經常接觸到docker技術,接下來就看看怎麼在docker上部署ElasticSearch集羣吧!
四、在docker上運行ElasticSearch
1、ElasticSearch鏡像的製作
樓主是在阿里雲的服務器上自己搭建的docker工具,具體的搭建過程請參考 配置fabric(超級記賬本)時docker安裝教程,直接利用docker pull命令拉取docker鏡像
注:如果想自己定製化鏡像的話,那就得看看源碼了,鏡像製作的方式以後再寫文章吧!
以單節點的形式部署是,命令如下:
docker run --name es-node0 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -d <鏡像名稱:tag>
以集羣的方式啓動時,創建docker-compose.yml:
version: '3'
services:
es-node0:
image: elasticsearch:7.6.2
container_name: es-node0
privileged: true
environment:
- cluster.name=elasticsearch-cluster
- node.name=node0
- node.master=true
- node.data=true
#- bootstrap.memory_lock=true
- http.cors.enabled=true
- http.cors.allow-origin=*
- "ES_JAVA_OPTS=-Xms256m -Xmx256m"
- "discovery.zen.ping.unicast.hosts=es-node0,es-node1,es-node2"
- "discovery.zen.minimum_master_nodes=2"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./node0/data:/usr/share/elasticsearch/data
- ./node0/logs:/usr/share/elasticsearch/logs
ports:
- 9200:9200
es-node1:
image: elasticsearch:7.6.2
container_name: es-node1
privileged: true
environment:
- cluster.name=elasticsearch-cluster
- node.name=node1
- node.master=true
- node.data=true
- bootstrap.memory_lock=true
- http.cors.enabled=true
- http.cors.allow-origin=*
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "discovery.zen.ping.unicast.hosts=es-node0,es-node1,es-node2"
- "discovery.zen.minimum_master_nodes=2"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./node1/data:/usr/share/elasticsearch/data
- ./node1/logs:/usr/share/elasticsearch/logs
ports:
- 9201:9200
es-node2:
image: elasticsearch:7.6.2
container_name: es-node2
privileged: true
environment:
- cluster.name=elasticsearch-cluster
- node.name=node2
- node.master=true
- node.data=true
- bootstrap.memory_lock=true
- http.cors.enabled=true
- http.cors.allow-origin=*
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "discovery.zen.ping.unicast.hosts=es-node0,es-node1,es-node2"
- "discovery.zen.minimum_master_nodes=2"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./node2/data:/usr/share/elasticsearch/data
- ./node2/logs:/usr/share/elasticsearch/logs
ports:
- 9202:9200
注:在掛載的時候記得給宿主機掛載目錄更改權限哦,chmod -R 777 XXX
訪問http://ip:9200/_cat/nodes?v即可查看集羣狀態