0.在安裝es以前,首先編輯一下宿主機的內核參數,不然配置es集羣的時候極有可能啓動不成功:node
[root@study-01 ~]# vim /etc/sysctl.conf vm.max_map_count=655360 [root@study-01 ~]# sysctl -p # 加載參數
1.搜索es的鏡像,以下第一個就是官方鏡像: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
能返回圖中的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
啓動成功後,此時會有三個實例正在運行: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
1.這一小節咱們來安裝es-head,一樣的,先在鏡像倉庫中搜索相應的鏡像:
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集羣的狀態:
中文分詞就是將一句話的語義,分紅一個個的詞,之因此要分詞是由於須要保證搜索的準確度。es默認對於英文分詞的支持較好,畢竟是老外開發的,而且英文自己的語言特性也利於分詞,只須要按空格、逗號、分號隔開便可。但中文不同,es對中文分詞的時候,也是和英文同樣,一個個詞的分,因此就會致使搜索的準確度較差。例如我想搜中國這個詞,卻會返回學習中、開車中、出國事項等包含中字和國字的數據。所以咱們須要使用一些中文的分詞插件來解決這種問題。
es有許多中文分詞的插件,其中較爲流行的是elasticsearch-analysis-ik,GitHub地址以下:
咱們來安裝一下這個插件,這裏以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