使用docker安裝elasticsearch僞分佈式集羣以及安裝ik中文分詞插件

docker安裝elasticsearch僞分佈式集羣

0.在安裝es以前,首先編輯一下宿主機的內核參數,不然配置es集羣的時候極有可能啓動不成功:node

[root@study-01 ~]# vim /etc/sysctl.conf
vm.max_map_count=655360
[root@study-01 ~]# sysctl -p # 加載參數

1.搜索es的鏡像,以下第一個就是官方鏡像:
使用docker安裝elasticsearch僞分佈式集羣以及安裝ik中文分詞插件git

2.拉取鏡像:es6

[root@study-01 ~]# docker pull elasticsearch

3.啓動鏡像爲容器:github

[root@study-01 ~]# docker run -d --name es1 -p 9200:9200 -p 9300:9300 elasticsearch

使用瀏覽器訪問9200端口,看看是否正常返回以下json數據:
使用docker安裝elasticsearch僞分佈式集羣以及安裝ik中文分詞插件docker

能返回圖中的json數據表明已經啓動成功,接着再啓動兩個節點:json

[root@study-01 ~]# docker run -d --name es2 -p 9201:9200 -p 9301:9300 elasticsearch
[root@study-01 ~]# docker run -d --name es3 -p 9202:9200 -p 9302:9300 elasticsearch

啓動成功後,此時會有三個實例正在運行:
使用docker安裝elasticsearch僞分佈式集羣以及安裝ik中文分詞插件bootstrap

4.因爲咱們須要編輯配置文件來完成es僞分佈式集羣的配置,但該容器默認不自帶vi或vim命令,因此咱們還得先進入到容器裏,將全部的實例都安裝上vim命令,示例以下:vim

[root@study-01 ~]# docker exec -it 2dc233622dcb bash
root@2dc233622dcb:/usr/share/elasticsearch# apt-get update
root@2dc233622dcb:/usr/share/elasticsearch# apt-get install vim -y

5.咱們將es1做爲master節點,剩餘的es2和es3做爲slave節點,首先編輯es1的配置文件內容以下:跨域

root@2dc233622dcb:/usr/share/elasticsearch# vim config/elasticsearch.yml # 在文件末尾加入以下內容
# 開啓跨域,爲了讓es-head能夠訪問
http.cors.enabled: true
http.cors.allow-origin: "*"

# 集羣的名稱
cluster.name: es
# 節點的名稱
node.name: es1
# 指定該節點是否有資格被選舉成爲master節點,默認是true,es是默認集羣中的第一臺機器爲master,若是這臺機掛了就會從新選舉master
node.master: true
# 容許該節點存儲數據(默認開啓)
node.data: true
# 容許任何ip訪問
network.host: 0.0.0.0
# 經過這個ip列表進行節點發現,我這裏配置的是各個容器的ip
discovery.zen.ping.unicast.hosts: ["127.0.0.1","172.17.0.2","172.17.0.4","172.17.0.5"]
#若是沒有這種設置,遭受網絡故障的集羣就有可能將集羣分紅兩個獨立的集羣 - 分裂的大腦 - 這將致使數據丟失
discovery.zen.minimum_master_nodes: 2
root@2dc233622dcb:/usr/share/elasticsearch#

es2和es3的配置文件配置的內容則以下:數組

-----------------------es2-----------------------
http.cors.enabled: true
http.cors.allow-origin: "*"
cluster.name: es
node.name: es2

network.host: 0.0.0.0
node.master: true
node.data: true

discovery.zen.ping.unicast.hosts: ["127.0.0.1","172.17.0.2","172.17.0.4","172.17.0.5"]
discovery.zen.minimum_master_nodes: 2

-----------------------es3-----------------------
http.cors.enabled: true
http.cors.allow-origin: "*"
cluster.name: es
node.name: es3

network.host: 0.0.0.0
node.master: true
node.data: true

discovery.zen.ping.unicast.hosts: ["127.0.0.1","172.17.0.2","172.17.0.4","172.17.0.5"]
discovery.zen.minimum_master_nodes: 2

6.配置好後,重啓全部的es實例容器:

[root@study-01 ~]# docker restart 2dc233622dcb
[root@study-01 ~]# docker restart 81d5bcb5394a
[root@study-01 ~]# docker restart e354f31b7785

7.重啓完成以後,執行以下命令確認一下集羣情況:

[root@study-01 ~]# curl '192.168.190.129:9200/_cluster/health?pretty'
{
  "cluster_name" : "es",
  "status" : "green",  # 爲green則表明健康沒問題,若是是yellow或者red則是集羣有問題
  "timed_out" : false,  # 是否有超時
  "number_of_nodes" : 3,  # 集羣中的節點數量 
  "number_of_data_nodes" : 2,  # 集羣中data節點的數量
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}
[root@study-01 ~]#

若是須要配置其餘配置項的話,能夠參考以下說明進行配置:

#集羣的名稱
cluster.name: es6.2
#節點名稱,其他兩個節點分別爲node-2 和node-3
node.name: node-1
#指定該節點是否有資格被選舉成爲master節點,默認是true,es是默認集羣中的第一臺機器爲master,若是這臺機掛了就會從新選舉master
node.master: true
#容許該節點存儲數據(默認開啓)
node.data: true
#索引數據的存儲路徑
path.data: /usr/local/elk/elasticsearch/data
#日誌文件的存儲路徑
path.logs: /usr/local/elk/elasticsearch/logs
#設置爲true來鎖住內存。由於內存交換到磁盤對服務器性能來講是致命的,當jvm開始swapping時es的效率會下降,因此要保證它不swap
bootstrap.memory_lock: true
#綁定的ip地址
network.host: 0.0.0.0
#設置對外服務的http端口,默認爲9200
http.port: 9200
# 設置節點間交互的tcp端口,默認是9300 
transport.tcp.port: 9300
#Elasticsearch將綁定到可用的環回地址,並將掃描端口9300到9305以嘗試鏈接到運行在同一臺服務器上的其餘節點。
#這提供了自動集羣體驗,而無需進行任何配置。數組設置或逗號分隔的設置。每一個值的形式應該是host:port或host
#(若是沒有設置,port默認設置會transport.profiles.default.port 回落到transport.tcp.port)。
#請注意,IPv6主機必須放在括號內。默認爲127.0.0.1, [::1]
discovery.zen.ping.unicast.hosts: ["192.168.8.101:9300", "192.168.8.103:9300", "192.168.8.104:9300"]
#若是沒有這種設置,遭受網絡故障的集羣就有可能將集羣分紅兩個獨立的集羣 - 分裂的大腦 - 這將致使數據丟失
discovery.zen.minimum_master_nodes: 3

安裝es-head可視化插件

1.這一小節咱們來安裝es-head,一樣的,先在鏡像倉庫中搜索相應的鏡像:
使用docker安裝elasticsearch僞分佈式集羣以及安裝ik中文分詞插件

2.拉取鏡像:

docker pull mobz/elasticsearch-head:5

3.啓動鏡像爲容器:

[root@study-01 ~]# docker run -d --name es-head -p 9100:9100 mobz/elasticsearch-head:5

4.一樣須要進入到容器裏安裝一下vim命令:

[root@study-01 ~]# docker exec -it 85f03139f1ba bash
root@85f03139f1ba:/usr/src/app# apt-get update
root@85f03139f1ba:/usr/src/app# apt-get install vim -y

若是執行apt-get update時,報以下錯誤的話:

W: Failed to fetch http://deb.debian.org/debian/dists/jessie/main/binary-amd64/Packages  Hash Sum mismatch

E: Some index files failed to download. They have been ignored, or old ones used instead.

則須要更換安裝源,因爲沒有vi及vim命令,只能使用echo來重定向了,以下示例:

root@85f03139f1ba:/usr/src/app# mv /etc/apt/sources.list /etc/apt/sources.list.bak
root@85f03139f1ba:/usr/src/app# echo -e "deb http://mirrors.aliyun.com/debian wheezy main contrib non-free\ndeb-src http://mirrors.aliyun.com/debian wheezy main contrib non-free\ndeb http://mirrors.aliyun.com/debian wheezy-updates main contrib non-free\ndeb-src http://mirrors.aliyun.com/debian wheezy-updates main contrib non-free\ndeb http://mirrors.aliyun.com/debian-security wheezy/updates main contrib non-free\ndeb-src http://mirrors.aliyun.com/debian-security wheezy/updates main contrib non-free" > /etc/apt/sources.list
root@85f03139f1ba:/usr/src/app#

5.es-head使用的是grunt server做爲服務器,而grunt server默認監聽的是localhost,因此咱們須要修改Gruntfile.js文件,增長一段配置,否則外部是沒法訪問的,以下:

root@85f03139f1ba:/usr/src/app# vim Gruntfile.js
connect: {
        server: {
                options: {
                        hostname: '0.0.0.0',  # 增長這段
                        port: 9100,
                        base: '.',
                        keepalive: true
                }
        }
}
root@85f03139f1ba:/usr/src/app#

6.配置好後,重啓容器:

[root@study-01 ~]# docker restart 85f03139f1ba

7.使用瀏覽器訪問9100端口,訪問結果以下則是正常的,能夠看到es集羣的狀態:
使用docker安裝elasticsearch僞分佈式集羣以及安裝ik中文分詞插件


安裝ik中文分詞插件

中文分詞就是將一句話的語義,分紅一個個的詞,之因此要分詞是由於須要保證搜索的準確度。es默認對於英文分詞的支持較好,畢竟是老外開發的,而且英文自己的語言特性也利於分詞,只須要按空格、逗號、分號隔開便可。但中文不同,es對中文分詞的時候,也是和英文同樣,一個個詞的分,因此就會致使搜索的準確度較差。例如我想搜中國這個詞,卻會返回學習中、開車中、出國事項等包含中字和國字的數據。所以咱們須要使用一些中文的分詞插件來解決這種問題。

es有許多中文分詞的插件,其中較爲流行的是elasticsearch-analysis-ik,GitHub地址以下:

https://github.com/medcl/elasticsearch-analysis-ik

咱們來安裝一下這個插件,這裏以es1節點爲例,首先進入容器並下載該插件到容器中:

[root@study-01 ~]# docker exec -it es1  # 進入es1容器
root@2dc233622dcb:/usr/share/elasticsearch# wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.6.11/elasticsearch-analysis-ik-5.6.11.zip   # 下載壓縮包

而後在es的plugins目錄下建立ik目錄,並解壓下載的安裝包到該目錄下:

root@2dc233622dcb:/usr/share/elasticsearch# mkdir ./plugins/ik   # 建立ik目錄
root@2dc233622dcb:/usr/share/elasticsearch# unzip elasticsearch-analysis-ik-5.6.11.zip  # 解壓
root@2dc233622dcb:/usr/share/elasticsearch# mv elasticsearch/* plugins/ik/  # 移動解壓後的文件
root@2dc233622dcb:/usr/share/elasticsearch# rm -rf elasticsearch   # 刪除空目錄
root@2dc233622dcb:/usr/share/elasticsearch# cd plugins/ik/
root@2dc233622dcb:/usr/share/elasticsearch/plugins/ik# ls   # 該插件所包含的文件以下
commons-codec-1.9.jar    elasticsearch-analysis-ik-5.6.11.jar  plugin-descriptor.properties
commons-logging-1.2.jar  httpclient-4.5.2.jar
config           httpcore-4.4.4.jar
root@2dc233622dcb:/usr/share/elasticsearch/plugins/ik#

我這裏的es版本是5.6.12的,可是ik並無5.6.12對應的版本可下載,因而我就下載了5.6.11版本。因爲版本不符,因此還需編輯配置文件以下,手動修改一下版本:

root@1c2a4dbc8de6:/usr/share/elasticsearch/plugins/ik# vim plugin-descriptor.properties
version=5.6.12
elasticsearch.version=5.6.12
root@1c2a4dbc8de6:/usr/share/elasticsearch/plugins/ik#

其餘節點也是和上面同樣的步驟,這裏就不贅述了。最後需重啓es容器:

[root@study-01 ~]# docker restart es1
[root@study-01 ~]# docker restart es2
[root@study-01 ~]# docker restart es3
相關文章
相關標籤/搜索