簡介
開始學es,我習慣邊學邊記,總結出現的問題和解決方法。本文是在兩台linux虛擬機下,安裝了三個節點。本次搭建es同時實踐了兩種模式——單機模式和分布式模式。條件允許的話,可以在多台機器上配置es節點,如果你機器性能有限,那么可以在一台虛擬機上完成多節點的配置。
如圖,是本次3個節點的分布。
hostname | IP | es節點 |
---|---|---|
master | 192.168.137.100 | node1、node3 |
slave | 192.168.137.101 | node2 |
一、下載及配置
1.幾個基本名詞
index: es里的index相當於一個數據庫。
type: 相當於數據庫里的一個表。
id: 唯一,相當於主鍵。
node:節點是es實例,一台機器可以運行多個實例,但是同一台機器上的實例在配置文件中要確保http和tcp端口不同(下面有講)。
cluster:代表一個集群,集群中有多個節點,其中有一個會被選為主節點,這個主節點是可以通過選舉產生的,主從節點是對於集群內部來說的。
shards:代表索引分片,es可以把一個完整的索引分成多個分片,這樣的好處是可以把一個大的索引拆分成多個,分布到不同的節點上,構成分布式搜索。分片的數量只能在索引創建前指定,並且索引創建后不能更改。
replicas:代表索引副本,es可以設置多個索引的副本,副本的作用一是提高系統的容錯性,當個某個節點某個分片損壞或丟失時可以從副本中恢復。二是提高es的查詢效率,es會自動對搜索請求進行負載均衡。
2.下載
名稱 | 版本 | 下載地址 |
---|---|---|
elasticsearch | 1.7.3 | elasticsearch-1.7.3.tar.gz |
下載后,放到你的目錄下並解壓. 因為我們要配置包含三個節點的集群,可以先將其重命名為elasticsearch-node1。比如我的是 /home/zkpk/elasticsearch-node1。
3.修改配置文件
(1) 初步修改
打開/home/zkpk/elasticsearch-node1/config目錄下的elasticsearch.yml 文件 ,修改以下屬性值並取消該行的注釋:
cluster.name: elasticsearch #這是集群名字,我們 起名為 elasticsearch #es啟動后會將具有相同集群名字的節點放到一個集群下。 node.name: "es-node1" #節點名字。 discovery.zen.minimum_master_nodes: 2 #指定集群中的節點中有幾個有master資格的節點。 #對於大集群可以寫3個以上。 discovery.zen.ping.timeout: 40s #默認是3s,這是設置集群中自動發現其它節點時ping連接超時時間, #為避免因為網絡差而導致啟動報錯,我設成了40s。 discovery.zen.ping.multicast.enabled: false #設置是否打開多播發現節點,默認是true。 network.bind_host: 192.168.137.100 #設置綁定的ip地址,這是我的master虛擬機的IP。 network.publish_host: 192.168.137.100 #設置其它節點和該節點交互的ip地址。 network.host: 192.168.137.100 #同時設置bind_host和publish_host上面兩個參數。 discovery.zen.ping.unicast.hosts: ["192.168.137.100", "192.168.137.101","192.168.137.100:9301"] #discovery.zen.ping.unicast.hosts:["節點1的 ip","節點2 的ip","節點3的ip"] #指明集群中其它可能為master的節點ip, #以防es啟動后發現不了集群中的其他節點。 #第一對引號里是node1,默認端口是9300, #第二個是 node2 ,在另外一台機器上, #第三個引號里是node3,因為它和node1在一台機器上,所以指定了9301端口。
(2) 進一步修改
拷貝 elasticsearch-node1 整個文件夾,兩份,一份elasticsearch-node2,一份elasticsearch-node3.
將elasticsearch-node2 文件夾copy到另外一台IP為192.168.137.101的機器上。而在 192.168.137.100 機器上有 node1和node3.
對於node3: node3和node1在一台機器上,node1的配置文件里端口默認分別是9300和9200,所以要改一下node3配置文件里的端口,elasticsearch.yml 文件修改如下:
node.name: "es-node3" transport.tcp.port: 9301 http.port: 9201
對於node2: 對 elasticsearch.yml 修改如下
node.name: "es-node2" network.bind_host: 192.168.137.101 network.publish_host: 192.168.137.101 network.host: 192.168.137.101
注意:
1.對於單機多節點的es集群,一定要注意修改 transport.tcp.port 和http.port 的默認值保證節點間不沖突。
2. 出現找不到同一集群中的其他節點的情況,檢查下
discovery.zen.ping.unicast.hosts 是否已設置。
二、運行 & 關閉 elasticsearch
1.運行elasticsearch :
編輯 /home/zkpk/elasticsearch-1.7.3/bin/elasticsearch.in.sh, 設置 ES_MIN_MEM和ES_MAX_MEM,確保二者數值一致,或者可以在啟動es時指定,
[zkpk@master ~]$ cd ~/elasticsearch-node1/bin
[zkpk@master bin]$ ./elasticsearch -Xms512m -Xmx512m
若想讓es后台運行,則
[zkpk@master bin]$ ./elasticsearch -d -Xms512m -Xmx512m
2.關閉elasticsearch:
前台運行:可以通過”CTRL+C”組合鍵來停止運行
后台運行,可以通過”kill -9 進程號”停止.也可以通過REST API接口:
curl -XPOST http://主機IP:9200/_cluster/nodes/_shutdown
來關閉整個集群,通過:
curl -XPOST http://主機IP:9200/_cluster/nodes/節點標示符(如es-node1)/_shutdown
來關閉單個節點.
三、插件及其安裝
BigDesk Plugin : 對集群中es狀態進行監控。
Elasticsearch Head Plugin: 對ES進行各種操作,如查詢、刪除、瀏覽索引等。
1.安裝head插件
進入到節點elasticsearch-node1/bin路徑,並安裝插件。
[zkpk@master bin]$ ./plugin -install mobz/elasticsearch-head
2. 安裝bigdesk
[zkpk@master bin]$ ./plugin -install lukas-vlcek/bigdesk
讓我們看下es頁面吧~~
打開head瀏覽,瀏覽器輸入http://192.168.137.100:9200/_plugin/head/ ,如圖,

圖1
每個小方塊就是索引分片,可以看到每個索引被分成幾個分片,每個分片還有它的備份分片,然后存儲在三個節點上。粗框的是主分片,細框的是備份分片。
四、添加索引
現在我們來添加一個索引記錄吧~
1.可以在命令窗口通過命令來添加
curl -XPUT 'http://主機IP:9200/dept/employee/32' -d '{ "empname": "emp32"}'
見 http://www.oschina.net/translate/elasticsearch-getting-started?cmp
2.我們可以在頁面上通過JSON添加
(1)點擊 復合查詢[+] ,我們可以在 megacorp 索引 (相當於數據庫名)的 employee 類型(相當於表名)下新增一個id為2的人的信息。
點擊下方的 提交請求 按鈕,頁面右方有回饋信息,“created”代表是否為新建。添加成功。
點擊 瀏覽數據 ,在左側 索引 下選擇 megacorp,如圖,
可以看到,一條id為2的記錄被添加了。
(2)下面我們修改id為2 的人的年齡為15,把about 信息去掉,並且加一項興趣。
圖5
提交后,右側有反饋信息,“created”為 false,因為我們這次不是新建而是修改。
返回瀏覽數據,id為2 的記錄,年齡、興趣等均已發生變化。
本文轉載自:https://blog.csdn.net/sinat_28224453/article/details/51134978