使用docker安裝elasticsearch偽分布式集群
阿新 • • 發佈:2018-09-26
net img free som docke packages search ssi gin docker安裝elasticsearch偽分布式集群
0.在安裝es之前,首先編輯一下宿主機的內核參數,否則配置es集群的時候極有可能啟動不成功:
[root@study-01 ~]# vim /etc/sysctl.conf
vm.max_map_count=655360
[root@study-01 ~]# sysctl -p # 加載參數
1.搜索es的鏡像,如下第一個就是官方鏡像:
2.拉取鏡像:
[root@study-01 ~]# docker pull elasticsearch
3.啟動鏡像為容器:
[root@study-01 ~]# docker run -d --name es1 -p 9200:9200 -p 9300:9300 elasticsearch
使用瀏覽器訪問9200端口,看看是否正常返回如下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
啟動成功後,此時會有三個實例正在運行:
4.由於我們需要編輯配置文件來完成es偽分布式集群的配置,但該容器默認不自帶vi或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: master # 是否為主節點 node.master: true # 是否為數據節點 node.data: false # 允許任何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"] root@2dc233622dcb:/usr/share/elasticsearch#
es2和es3的配置文件配置的內容則如下:
-----------------------es2-----------------------
http.cors.enabled: true
http.cors.allow-origin: "*"
cluster.name: es
node.name: slave1
network.host: 0.0.0.0
node.master: false
node.data: true
discovery.zen.ping.unicast.hosts: ["127.0.0.1","172.17.0.2","172.17.0.4","172.17.0.5"]
-----------------------es3-----------------------
http.cors.enabled: true
http.cors.allow-origin: "*"
cluster.name: es
node.name: slave2
network.host: 0.0.0.0
node.master: false
node.data: true
discovery.zen.ping.unicast.hosts: ["127.0.0.1","172.17.0.2","172.17.0.4","172.17.0.5"]
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 ~]#
安裝es-head可視化插件
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集群的狀態:
使用docker安裝elasticsearch偽分布式集群