1. 程式人生 > >使用docker安裝elasticsearch偽分布式集群

使用docker安裝elasticsearch偽分布式集群

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偽分布式集群