注:elasticsearch是用Java編寫的,elasticsearch的運行需要有Java環境,因此需要先行下載jdk。
首先介紹elasticsearch的幾個基本概念:
? index:?es里的index相當于數據庫名稱。
? type:?相當于數據庫里的一個表。
? id:唯一,相當于主鍵。
? node:?節點是es實例,一臺機器可以運行多個實例,但是要保證端口號不同,可以在配置文件中進行配置。
? cluster:?代表一個集群,集群由一個或多個節點組成。集群會自動選舉其中一個節點為主節點。
? shards:代表索引分片,es可以把一個完整的索引分成多個分片,這樣的好處是可以把一個大的索引拆分成多個,分布到不同的節點上,構成分布式搜索。分片的數量只能在索引創建前指定,并且索引創建后不能更改,默認的分片數量為5個。
? replicas:?代表索引副本,es可以設置多個索引的副本,副本的作用一是提高系統的容錯性,當個某個節點某個分片損壞或丟失時可以從副本中恢復。二是提高es的查詢效率,es會自動對搜索請求進行負載均衡,默認的副本數量為1個。
1、下載安裝elasticsearch
因為elasticsearch本身就是一個集群,所以我們需要準備多臺機器來進行安裝。這里我使用的是:192.168.198.223,192.168.198.224,192.168.198.226。需要分別在每臺機器上安裝elasticsearch。這里給出官網地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/_installation.html
注意此處的坑:
● root超級用戶身份不能啟動,這應該是出于安全考錄設置的條件。
解決方案:創建一個單獨的用戶來啟動elasticsearch
groupadd elastic
useradd elastic -g elastic
#給elastic用戶賦予權限,這里的elasticsearch-5.5.0是elasticsearch的安裝目錄
chown -R elastic:elastic elasticsearch-5.5.0
其他可能出現的坑:
● ERROR: bootstrap checks failed
解決方案:切換到root用戶,編輯limits.conf 添加類似如下內容
vi /etc/security/limits.conf
添加如下內容:
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
● max number of threads [1024] for user [lish] likely too low, increase to at least [2048]
解決方案:切換到root用戶,進入limits.d目錄下修改配置文件。
vi /etc/security/limits.d/90-nproc.conf
修改如下內容:
* soft nproc 1024
#修改為
* soft nproc 2048
● max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
解決方案:切換到root用戶修改配置sysctl.conf
vi /etc/sysctl.conf
添加下面配置:
vm.max_map_count=655360
并執行命令:
sysctl -p
重新啟動elasticsearch即可。
2、配置elasticsearch
這里有幾個elasticsearch配置選項個人認為還是有必要配置一下的,先關閉每臺機器上的elasticsearch,編輯elasticsearch.yml:
cd elasticsearch-5.5.0/config ? ? ? ?#進入config目錄
vim elasticsearch.yml ? ? ? ?#編輯elasticsearch.yml文件
#集群名字,可以自定義,這里我起名為 mycluster,es啟動后會將同一網段下具有相同集群名字的節點放到一個集群下。
cluster.name:? mycluster
#節點名字,默認的節點名字是一串隨機字符串,而且每次啟動都會不一樣。我們自己修改了之后查看日志等都會方便一點。同一集群中不同節點應該取不一樣的名字。
node.name:"node-1"? ? ? #我的三個節點取的名字分別是:node-1,node-2,node-3
#設置數據以及日志的路徑。默認情況下,Eleasticsearch會把插件、日志以及你最重要的數據放在安裝目錄下,你可以自己重新設置到安裝目錄之后的地方。
path.data: /data/es
path.logs: /log/es
#設置綁定的ip地址以及與其它節點交互的IP地址,設置為0.0.0.0即可。
network.host:0.0.0.0
#設置是否打開多播方式發現節點,默認是true。生產環境中建議把多播關閉,因為某個節點可能會意外加入一個集群。建議使用單播方式。
discovery.zen.ping.multicast.enabled:false
#指定集群中的節點中有幾個有master資格的節點。這個配置就是告訴Elasticsearch當沒有足夠master候選節點的時候,就不要進行master選舉,等master候選節點足夠了才進行選舉。這個配置有助于防止集群分裂。推薦個數就是(master候選節點個數*2)+1。視具體情況而定。如果有兩個節點,那么就遇到難題了,推薦數當然是2,但是這意味著如果有一個節點掛掉,整個集群就不可用了。設置成1可以保證集群的功能,但是就無法保證集群分裂了,那么這樣的情況,最好至少保證有3個節點。
covery.zen.minimum_master_nodes:2
#discovery.zen.ping.unicast.hosts:["節點1的 ip","節點2 的ip","節點3的ip"]指明集群中其它可能為master的節點ip,以防es啟動后發現不了集群中的其他節點。第一對引號里是node1。第二個是 node2 。
discovery.zen.ping.unicast.hosts: ["192.168.198.223","192.168.198.224"]
elasticsearch的默認對外服務的http端口號是9200,節點間交互的tcp端口號是9300。我們要保證開放其防火墻端口。
3、可視化工具elasticsearch-head的安裝
官方 GitHub 地址為:https://github.com/mobz/elasticsearch-head。之前head是作為elasticsearch的插件安裝的,不過現在這種方法已經廢棄。
在我本地電腦上執行:
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
#注意需要有node環境,如果沒有,安裝node環境就好了
npm install
然后打開elasticsearch-head/Gruntfile.js,找到下面connect屬性,新增hostname: ‘*’,
connect: {
? ?server: {
? ? ? options: {
? ? ? ? ? hostname:'*',
? ? ? ? ? port: 9100,
? ? ? ? ? base:'.',
? ? ? ? ? keepalive:true
? ? ? }
}
修改elasticsearch配置文件使其允許跨域:
cd elasticsearch-5.5.0/config? ? ? ? #進入config目錄
vim elasticsearch.yml? ? ? ? #編輯elasticsearch.yml文件
#添加如下內容
http.cors.enabled: true
http.cors.allow-origin: "*"
然后就可以執行elasticsearch-head了。進入elasticsearch-head目錄,執行命令:
npm run start
打開瀏覽器,輸入網址localhost:9100進入即可。
4、分別運行每臺機器上的elasticsearch
分別運行每臺機器上的elasticsearch,并且啟動本機上的elasticsearch-head插件,打開瀏覽器,輸入網址:localhost:9100進入,連接http://192.168.198.223:9200/,結果圖如下:
這里可以看到elasticsearch集群狀態是綠色,并且沒有任何數據。當我們查看集群狀態的時候,我們要么得到綠色、黃色或紅色。
綠色代表一切正常(集群功能齊全)。
黃色意味著所有的數據都是可用的,但是某些復制分片處于沒有被分配的狀態(集群功能齊全)。
紅色則代表因為某些原因,某些數據不可用。在這種狀態下,會有丟失數據的危險。
elasticsearch官方文檔:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html