ElasticSearch介紹
ElasticSearch下面簡稱ES,是一款分佈式全文搜索和分析引擎,它可用於商城的全文搜索引擎,也可用作小型實時日誌分析系統,著名的ELK中的E就是指的ElasticSearch。ElasticSearch基於Lucene基礎之上,用過Lucene的人可能知道,Lucene的API複雜,而且缺乏分佈式功能,而ElasticSearch天生提供分佈式功能,並且提供了基於JSON的REST API方便用戶使用。
我們開發過程中可能經常需要在單機上使用ElasticSearch集羣,但是在單機上部署多個ElasticSearch比較麻煩,所以這一篇文章主要講藉助Docker在單機上快速部署ElasticSearch集羣來幫助自己開發調試。Docker在這裏不做過多介紹,以後有機會會單獨介紹Docker。
環境和軟件版本
環境:windows10
Docker:3.0
ElasticSearch版本:7.4.2
部署步驟
1. docker安裝
省略,這裏不做介紹,安裝都很簡單,過程中直接下一步就ok。
2. 創建自定義網絡,用於部署ES集羣
docker network create --subnet=172.18.0.0/16 --gateway=172.18.0.1 esnet
執行命令後,我們查看一下當前docker的網絡
3. 拉取ES鏡像包
-
搜索鏡像包
docker search elasticsearch
選擇star最多的即官方的鏡像
-
pull拉取鏡像包
docker pull elasticsearch:7.4.2
這裏如果不帶上tag,會默認拉取latest,ES官方沒有這個tag,會導致找不到鏡像包,所以帶上版本號。想查看鏡像包的tag,可以官方鏡像倉庫這個網站查詢。
4. 配置和啓動
-
創建配置文件目錄和數據目錄
我的環境是windows,所以在E盤下創建了docker文件夾,在docker文件夾下創建了config文件夾和data文件夾,data文件夾下創建data1和data2文件夾
-
配置ES配置文件
我們部署兩臺,因爲第一步創建的子網爲172.18.0.0/16,網關爲172.18.0.1,現在把第一個節點ip固定設置爲172.18.0.2,第二臺設置爲172.18.0.3,在config文件夾創建es1.yml和es2.ymles1.yml #集羣名稱 cluster.name: elasticsearch-cluster #節點名稱 node.name: es-node1 #設置綁定的ip地址,可以使ipv4或者ipv6 #綁定這臺機器的任何一個ip network.bind_host: 172.18.0.2 #設置其他節點和該節點交互的ip地址,如果不設置它會自動判斷,值必須是個真是的ip地址 network.publish_host: 172.18.0.2 #設置對外服務的http端口,默認爲9200 http.port: 9200 #設置節點之間的tcp端口,默認是9300 transport.tcp.port: 9300 #是否允許跨域REST請求 http.cors.enabled: true #允許REST請求來自何處 http.cors.allow-origin: "*" #初始master節點 cluster.initial_master_nodes: es-node1 #節點角色設置 node.master: true node.data: true #集羣的節點列表 discovery.zen.ping.unicast.hosts: ["172.18.0.2","172.18.0.3"] #集羣中一直正常運行的,有成爲master節點資格的最少節點數,默認爲1 #(total number of master-eligible nodes / 2 + 1) discovery.zen.minimum_master_nodes: 1
cluster.initial_master_nodes: es-node1 這個配置不要忘記不然啓動後會因爲沒有matser節點,無法組成集羣,第二臺ES配置:
#集羣名稱 cluster.name: elasticsearch-cluster # 節點名稱 node.name: es-node2 # 設置綁定的ip地址,可以使ipv4或者ipv6 # 綁定這臺機器的任何一個ip network.bind_host: 172.18.0.3 # 設置其他節點和該節點交互的ip地址,如果不設置它會自動判斷,值必須是個真是的ip地址 network.publish_host: 172.18.0.3 # 設置對外服務的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: ["172.18.0.2","172.18.0.3"] # 集羣中一直正常運行的,有成爲master節點資格的最少節點數,默認爲1 # (total number of master-eligible nodes / 2 + 1) discovery.zen.minimum_master_nodes: 1
-
啓動
# 啓動第一臺 docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 -v E:/docker/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v E:/docker/data/data1:/usr/share/elasticsearch/data --network=esnet --ip 172.18.0.2 --name ES01 elasticsearch:7.4.2 #啓動第二臺 docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9201:9200 -p 9301:9300 -v E:/docker/config/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v E:/docker/data/data2:/usr/share/elasticsearch/data --network=esnet --ip 172.18.0.3 --name ES02 elasticsearch:7.4.2
參數解釋
- -e: 設置環境變量參數
- -d: 後臺運行
- -p: 9200:9200, 宿主機和容器端口映射,分別是 宿主機port:容器port
- -v: 目錄掛載 -v E:/docker/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml 把宿主機的E:/docker/config/es1.yml掛載到容器的/usr/share/elasticsearch/config/elasticsearch.yml
- –network: 指定子網
- –ip: 指定靜態ip
- –name: 指定容器名
5. 驗證
啓動之後http://127.0.0.1:9200/_cat/nodes?v 鏈接可以查看節點信息
我的是這樣的,*代表master節點,如果你的信息是這樣,那麼恭喜你,成功了。
文章首發地址:IkanのBolg