Elastic:用Docker部署Elastic棧


安裝

因為我們需要使用docker來進行安裝,我們必須安裝:

  • docker:根據不同的操作系統,請按照要求安裝docker。可以到網站https://docs.docker.com/去安裝
  • docker-compose。這個可以到網站https://docs.docker.com/compose/install/#install-using-pip去安裝

用docker來安裝Elasticsearch

下載docker image

獲取Docker的Elasticsearch就像對Elastic Docker注冊表發出docker pull命令一樣簡單。

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.3.2

上面是以Elasticsearch 7.3.2為例來示范的。在實際的使用中,可以替換它用自己喜歡的版本。

開發或測試環境

從命令行運行Elasticsearch。使用以下命令可以快速啟動Elasticsearch以進行開發或測試:

docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.3.2

請注意single-node discovery,該發現允許繞過單節點開發集群中的bootstrap checks 檢查。

生產環境

vm.max_map_count內核設置需要設置為至少262144才能用於生產環境。
vm.max_map_count設置應該在/etc/sysctl.conf中永久設置:

$ grep vm.max_map_count /etc/sysctl.conf
vm.max_map_count=262144

要在實時系統上應用該設置,請執行以下操作:

sysctl -w vm.max_map_count = 262144

用docker來安裝Kibana

下載docker image

docker pull docker.elastic.co/kibana/kibana:7.3.2

開發或測試環境

可以使用以下命令快速啟動Kibana並將其連接到本地Elasticsearch容器以進行開發或測試:

docker run --link YOUR_ELASTICSEARCH_CONTAINER_NAME_OR_ID:elasticsearch -p 5601:5601 {docker-repo}:{version}

針對我們的情況,我們首先按照上面的步驟把Elasticsearch的docker運行起來,然后執行如下的命令:

docker ps

顯示的結果如下:

    CONTAINER ID        IMAGE                                                 COMMAND                  CREATED             STATUS              PORTS                                            NAMES
    3839f34c1d2d        docker.elastic.co/elasticsearch/elasticsearch:7.3.2   "/usr/local/bin/dock…"   7 minutes ago       Up 7 minutes        0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   admiring_matsumoto

上面的docker信息是已經安裝好的的Elasticsearch的docker信息。我們然后執行如下的命令:

docker run --link 3839f34c1d2d:elasticsearch -p 5601:5601 docker.elastic.co/kibana/kibana:7.3.2

這樣我們的Kibana docker就起來了。

使用docker-compose來啟動Elasticsearch和Kibana

在這一步,我們假定我們已經下載好Elasticsearch和Kibana的docker image。如果你還沒有這么做,可以執行如下的命令下載:

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.3.2
docker pull docker.elastic.co/kibana/kibana:7.3.2

緊接着下來,我們來創建一個叫做docker的目錄,並在這個目錄里創建一個叫做docker-compose.yml的文件。它的內容如下:

    version: '2.2'
    services:
      es01:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.3.2
        container_name: es01
        environment:
          - node.name=es01
          - discovery.seed_hosts=es02
          - cluster.initial_master_nodes=es01,es02
          - cluster.name=docker-cluster
          - bootstrap.memory_lock=true
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - esdata01:/usr/share/elasticsearch/data
        ports:
          - 9200:9200
        networks:
          - esnet
      es02:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.3.2
        container_name: es02
        environment:
          - node.name=es02
          - discovery.seed_hosts=es01
          - cluster.initial_master_nodes=es01,es02
          - cluster.name=docker-cluster
          - bootstrap.memory_lock=true
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - esdata02:/usr/share/elasticsearch/data
        networks:
          - esnet
     
      kibana:
        image: docker.elastic.co/kibana/kibana:7.3.2
        container_name: kibana
        ports: ['5601:5601']    
        networks: ['esnet']
        environment:
          - SERVER_NAME=kibana.localhost
          - ELASTICSEARCH_HOSTS=http://es01:9200
          - I18N_LOCALE=zh-CN
          - ELASTICSEARCH_USERNAME=elastic
          - ELASTICSEARCH_PASSWORD=mypasword
        depends_on: ['es01']
     
    volumes:
      esdata01:
        driver: local
      esdata02:
        driver: local
     
    networks:
      esnet:

在這個配置中,我們創建了兩個Elasticsearch的node:es01及es02。節點es01偵聽localhost:9200,而es02通過Docker網絡與es01對話。同時我們也創建了另外一個kibana的docker。我們可以在environment中配置它所需要的參數。

等我們創建好這個docker-compose.yml文件后,我們在當前的目錄下,打入如下的命令:

docker-compose up

或者:

docker-compose up -d

這里的-d選項表示在detached模式下,運行容器在后台。

我們最終可以在瀏覽器中看見我們的Kibana被啟動的樣子

如同我們之前的設置一樣, 它運行起來的Locale設置的是中文。我們也可以同時看到兩個被啟動的Elasticsearch的節點:

一旦docker啟動后,我們可以通過docker的命令來執行一些命令,比如

docker exec es01 ls /usr/share/elasticsearch

我們可以通過如下的命令進入到docker進行安裝等:

docker exec -it es01 /bin/bash

    $ docker exec -it es01 /bin/bash
    [root@ec4d19f59a7d elasticsearch]# ls
    LICENSE.txt  README.textile  config  jdk  logs     plugins
    NOTICE.txt   bin             data    lib  modules
    [root@ec4d19f59a7d elasticsearch]# 

這里的es01是我們的Elasticsearch實例的名稱。

我們也可以通過如下的方式來配置Kibana。我們可以在docker-compose.yml的目錄下創建另外一個叫做kibana.yml的文件:

kibana.yml

    #
    # ** THIS IS AN AUTO-GENERATED FILE **
    #
     
    # Default Kibana configuration for docker target
    server.name: kibana
    server.host: "0"
    elasticsearch.hosts: [ "http://elasticsearch:9200" ]
    i18n.locale: "zh-CN"
    xpack.monitoring.ui.container.elasticsearch.enabled: true

這里我們做了一些簡單的設置,比如我們配置了locale為中文。我們可以修改我們的docker-compose.yml文件如下:

docker-compose.yml

    version: '2.2'
    services:
      es01:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.3.2
        container_name: es01
        environment:
          - node.name=es01
          - discovery.seed_hosts=es02
          - cluster.initial_master_nodes=es01,es02
          - cluster.name=docker-cluster
          - bootstrap.memory_lock=true
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - esdata01:/usr/share/elasticsearch/data
        ports:
          - 9200:9200
        networks:
          - esnet
      es02:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.3.2
        container_name: es02
        environment:
          - node.name=es02
          - discovery.seed_hosts=es01
          - cluster.initial_master_nodes=es01,es02
          - cluster.name=docker-cluster
          - bootstrap.memory_lock=true
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - esdata02:/usr/share/elasticsearch/data
        networks:
          - esnet
      kibana:
        image: docker.elastic.co/kibana/kibana:7.3.2
        container_name: kibana
        networks: ['esnet']
        ports: ['5601:5601']
        environment:
          - ELASTICSEARCH_HOSTS=http://es01:9200
        volumes:
          - ./kibana.yml:/usr/share/kibana/config/kibana.yml            
     
    volumes:
      esdata01:
        driver: local
      esdata02:
        driver: local
     
    networks:
      esnet:

在這里,我們通過在kibana中的volumes來把本地的kibana.yml文件bind mount到我們的docker之中的image里。這樣它代替docker里的/usr/share/kibana/config/kibana.yml文件從而使用我們在本地設置的kibana.yml文件。

當docker把所有的容器都跑起來后,我們可以通過如下的命令來查看:

    $ docker-compose ps
     Name               Command               State               Ports             
    --------------------------------------------------------------------------------
    es01     /usr/local/bin/docker-entr ...   Up      0.0.0.0:9200->9200/tcp,       
                                                      9300/tcp                      
    es02     /usr/local/bin/docker-entr ...   Up      9200/tcp, 9300/tcp            
    kibana   /usr/local/bin/dumb-init - ...   Up      0.0.0.0:5601->5601/tcp     

它顯示了所有的端口的使用情況。

我們可以通過如下的辦法把docker實例都停下來:

docker-compose down

這樣我們很快地部署我們的Elasticsearch集群。

參考:

【1】https://www.elastic.co/guide/en/kibana/7.3/docker.html

【2】https://www.elastic.co/guide/en/elasticsearch/reference/7.3/install-elasticsearch.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM