使用Docker搭建ES5.6.16集羣

ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。Elasticsearch是用Java開發的,並做爲Apache許可條款下的開放源碼發佈,是當前流行的企業級搜索引擎。設計用於雲計算中,可以達到實時搜索,穩定,可靠,快速,安裝使用方便(後續用ES代替)

ES官網:www.elastic.co/cn/ Docker安裝ES官網教程:www.elastic.co/guide/en/el… ES配置文件詳解(參考博客):www.cnblogs.com/sunxucool/p…html

1.jdk安裝:es的安裝時必需要有java的環境,因此咱們要先安裝jdk,版本咱們選擇1.8,這樣對es的版本兼容更多,若是之後想換其餘的es版本比較方便java

(1)在Linux系統下安裝jdk1.8,使用MobaXterm做爲鏈接工具,由於他能夠直接選擇文件夾進行文件的上傳,咱們這裏上傳jdk-8u171-linux-x64.tar.gz(目前下載jdk好像須要註冊Oracle帳號)node

①在usr下建立java文件夾linux

mkdir javaweb

②將上傳的壓縮包移動到/usr/java下docker

mv jdk-8u171-linux-x64.tar.gz /usr/javabootstrap

③解壓文件vim

tar zxvf jdk-8u121-linux-x64.tar.gz跨域

具體操做後的效果以下:bash

image

④使用vi編輯器,配置java環境變量

sudo vi /etc/profile

在文件最後,添加以下配置,設置java環境變量

#Java Env

export JAVA_HOME=/usr/jdk1.8.0_121

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$PATH:$JAVA_HOME/bin
複製代碼

效果以下:

image

⑤退出vi編輯器,使環境變量設置當即生效: source /etc/profile

⑥查看jdk版本: java -version

image

2.安裝ES:安裝ES能夠從官網下載壓縮包進行安裝,可是目前docker比較流行方便,拉取相對應的鏡像,因此採用docker進行ES集羣的安裝,ES的版本咱們選擇5.6.16,須要注意的是ES的集羣至少須要三臺才能達到集羣效果

(1)拉取ES鏡像:

docker pull elasticsearch:5.6.16

命令執行結束後,可使用docker images 查詢鏡像是否下載成功,以下

image

(2)使用docker安裝ES時,爲了方便之後修改配置文件相關的東西,咱們使用文件掛載的方式啓動docker,因此咱們要準備一些文件夾存放數據,而後對文件夾的權限進行修改,爲啓動ES作準備

①建立docker文件掛載目錄,並開發端口通訊

進入勽目錄下: cd /usr

建立ES配置的文件夾: mkdir -p jayes/ES/config

進入ES目錄: cd ES

建立ES數據存放的文件

mkdir data1

mkdir data2

mkdir data3
複製代碼

image

開發端口通訊:後續ES配置文件中所須要的端口,否則ES之間沒法進行通訊

firewall-cmd --add-port=9300/tcp

firewall-cmd --add-port=9301/tcp

firewall-cmd --add-port=9302/tcp
複製代碼

將data一、data二、data3文件夾開啓777權限,防止啓動ES時出現沒有權限操做文件夾的報錯: chmod 777 data1 data2 data3

(3)建立ES的配置文件,由於以後使用docker啓動可使用目錄掛載,因此咱們在/usr/jayes/ES/config下建立相應的配置文件便可(配置文件中是做者的服務器IP,使用時須要根據實際狀況修改)

es-master.yml

#集羣名
cluster.name: jay-es

#節點名
node.name: jay-master

#設置綁定的ip地址,能夠是ipv4或ipv6的,默認爲0.0.0.0,指綁定這臺機器的任何一個ip
network.bind_host: 0.0.0.0

#設置其它節點和該節點交互的ip地址,若是不設置它會自動判斷,值必須是個真實的ip地址
network.publish_host: 118.25.153.239

#設置對外服務的http端口,默認爲9200
http.port: 9200

#設置節點之間交互的tcp端口,默認是9300
transport.tcp.port: 9300

#是否容許跨域REST請求
http.cors.enabled: true

#容許 REST 請求來自何處
http.cors.allow-origin: "*"

#節點角色設置
node.master: true 
node.data: true  

#有成爲主節點資格的節點列表
discovery.zen.ping.unicast.hosts: ["118.25.153.239:9300","118.25.153.239:9301","118.25.153.239:9302"]

#集羣中一直正常運行的,有成爲master節點資格的最少節點數(默認爲1) 
# (totalnumber of master-eligible nodes / 2 + 1)
discovery.zen.minimum_master_nodes: 2
複製代碼

es-nodeone.yml

#集羣名
cluster.name: jay-es

#節點名
node.name: jay-nodeone

#設置綁定的ip地址,能夠是ipv4或ipv6的,默認爲0.0.0.0,指綁定這臺機器的任何一個ip
network.bind_host: 0.0.0.0

#設置其它節點和該節點交互的ip地址,若是不設置它會自動判斷,值必須是個真實的ip地址
network.publish_host: 118.25.153.239

#設置對外服務的http端口,默認爲9200,該節點爲9201
http.port: 9201

#設置節點之間交互的tcp端口,默認是9300,該es的ip端口爲9301
transport.tcp.port: 9301

#是否容許跨域REST請求
http.cors.enabled: true

#容許 REST 請求來自何處
http.cors.allow-origin: "*"

#節點角色設置
node.master: true 
node.data: true  

#有成爲主節點資格的節點列表
discovery.zen.ping.unicast.hosts: ["118.25.153.239:9300","118.25.153.239:9301","118.25.153.239:9302"]

#集羣中一直正常運行的,有成爲master節點資格的最少節點數(默認爲1) 
# (totalnumber of master-eligible nodes / 2 + 1)
discovery.zen.minimum_master_nodes: 2
複製代碼

es-nodetwo.yml

#集羣名
cluster.name: jay-es

#節點名
node.name: jay-nodetwo

#設置綁定的ip地址,能夠是ipv4或ipv6的,默認爲0.0.0.0,指綁定這臺機器的任何一個ip
network.bind_host: 0.0.0.0

#設置其它節點和該節點交互的ip地址,若是不設置它會自動判斷,值必須是個真實的ip地址
network.publish_host: 118.25.153.239

#設置對外服務的http端口,默認爲9200,該節點爲9202
http.port: 9202

#設置節點之間交互的tcp端口,默認是9300,該es的ip端口爲9302
transport.tcp.port: 9302

#是否容許跨域REST請求
http.cors.enabled: true

#容許 REST 請求來自何處
http.cors.allow-origin: "*"

#節點角色設置
node.master: true 
node.data: true  

#有成爲主節點資格的節點列表
discovery.zen.ping.unicast.hosts: ["118.25.153.239:9300","118.25.153.239:9301","118.25.153.239:9302"]

#集羣中一直正常運行的,有成爲master節點資格的最少節點數(默認爲1) 
# (totalnumber of master-eligible nodes / 2 + 1)
discovery.zen.minimum_master_nodes: 2
複製代碼

(3)調高JVM線程數限制數量:ES對JVA的線程數有最低要求,若是不配置的話在啓動時會報錯,報出以下錯誤: bootstrap checks failed max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144] ①修改配置文件:sysctl.conf vim /etc/sysctl.conf ②在配置文件加入以下配置值 vm.max_map_count=262144 ③啓用修改後的配置 sysctl -p (4)啓動ES集羣

docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -di -p 9200:9200 -p 9300:9300 -v /usr/jayes/ES/config/es-master.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/jayes/ES/data1:/usr/share/elasticsearch/data --name ES01 docker.elastic.co/elasticsearch/elasticsearch:5.6.16
 
 docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -di -p 9201:9201 -p 9301:9301 -v /usr/jayes/ES/config/es-nodeone.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/jayes/ES/data2:/usr/share/elasticsearch/data --name ES02 docker.elastic.co/elasticsearch/elasticsearch:5.6.16

 docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -di -p 9202:9202 -p 9302:9302 -v /usr/jayes/ES/config/es-nodetwo.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/jayes/ES/data3:/usr/share/elasticsearch/data --name ES03 docker.elastic.co/elasticsearch/elasticsearch:5.6.16
複製代碼

注意:設置-e ES_JAVA_OPTS="-Xms256m -Xmx256m" 是由於/etc/elasticsearch/jvm.options 默認jvm最大最小內存是2G,啓動容器後 可用docker stats命令查看 (5)檢測ES集羣搭建是否成功 http://118.25.153.239:9200/_cat/nodes?pretty

image.png
注意:輸入上訴地址後可能會在頁面顯示以下報錯, { "error" : { "root_cause" : [ { "type" : "master_not_discovered_exception", "reason" : null } ], "type" : "master_not_discovered_exception", "reason" : null }, "status" : 503 },由於使用docker安裝ES時,會自動去下載x-pack,它至關於一個權限攔截使用,具體不在這裏說明,由於使用它須要收費,因此咱們選擇不使用,將其卸載,卸載後就能夠正常顯示圖片所示,操做以下

a.查看全部容器
docker ps
b.進入es容器
docker exec -it 容器名or容器id /bin/bash
c.卸載x-pack插件
./bin/elasticsearch-plugin remove x-pack
d.刪除配置文件(因爲配置文件保護,須要手動刪除)
cd /usr/share/elasticsearch/config
rm -rf x-pack
複製代碼

(6)安裝ES圖形化操做工具:elasticsearch-head ①拉取elasticsearch-head鏡像 docker pull mobz/elasticsearch-head:5 ②使用docker啓動 docker run -di -p 9100:9100 --name es-manager mobz/elasticsearch-head:5

image.png
注意:* 爲master節點,服務器內存過小,只能啓動兩個es容器,第三個會報錯,因此展現中只有兩個,可是ES集羣最低是三個
相關文章
相關標籤/搜索