市長ポストメール検索サービス:DockerにElasticsearchクラスタをインストールしてサービス


市長ポストメール検索サービス:DockerにElasticsearchをサービスとしてインストール
前章では、Mysqlに代わるElasticsearchの作業を完了しました.これまでの計画通り、ESをDockerに移行する時だ.
なぜDockerに移行するのですか?
  • は、Elasticsearchの弾力性を後続に示すために準備されており、dockerを使用することでマルチノードを容易に配置することができる.
  • dockerはとても怒っています.

  • 私の開発機はMac Proで、macでdockerを使うにはdocker-machineをインストールする必要があります.
    docker-machineの原理は、macにLinux仮想マシン(VisualBox)をインストールし、Dockerコンテナのホストとして、異なるプラットフォーム(Mac、Windows)でdockerコンテナの作成をサポートすることである.インストールが完了すると、以下のコマンドを実行するとdockerを実行できます.
    docker-machine start
    eval "$(docker-machine env default)"

    実行:docker-machine ipコマンドによりdockerホストのipを得ることができる.その後のESサービスへのアクセスは、このIPにアクセスする必要がある、一般的には192.168である.99.100
    Docker Hub公式にはelasticsearchのミラーがあります.私たちは現地で運転すればいいです.
    docker run -p 9200:9200 -p 9300:9300 -v "$home/.esdata/node1":/usr/share/elasticsearch/data elasticsearch:2.3.3 -Des.node.name="node1"

    パラメータの説明:-pホストポート:dockerコンテナポート-v「ローカルマウントパス」:dockerコンテナディレクトリパス-Des.node.name esノード名
    ここでは-pを用いるdockerコンテナ内部のESサービスポート(開発機が直接アクセスできない)をdockerシンクホストポートにマッピングする(開発機が直接アクセスできる)、すなわち192.168.99.100:9200と192.168.99.100:9300-vローカルマウントパスマッピングの目的は、ESのデータを永続化することである、そうでないとdockerコンテナが再起動すると、ESのデータが失われる.
    次にブラウザでアクセスします.http://192.168.99.100:9200/_cluster/health?pretty=trueESの状態は、「number_of_nodes」の値が1である、ESクラスタに1つのノードしかないことを示す.
    Dockerを用いることで、単一ノードESをマルチノードESクラスタに容易に拡張することができる.
    ここで私はdocker-composeを使ってこの任務を完成します.docker-composeを作成します.ymlファイル:
    elasticsearch_master:
        image: elasticsearch:2.3.3
        command: "elasticsearch -Des.cluster.name=elasticsearch -Des.node.master=true"
        ports:
          - "9200:9200"
          - "9300:9300"
        volumes:
          - /.esdata/node1:/usr/share/elasticsearch/data
    
    elasticsearch1:
        image: elasticsearch:2.3.3
        command: "elasticsearch -Des.cluster.name=elasticsearch -Des.discovery.zen.ping.unicast.hosts=elasticsearch_master"
        links:
          - elasticsearch_master
        volumes:
          - /.esdata/node2:/usr/share/elasticsearch/data
          
    elasticsearch2:
        image: elasticsearch:2.3.3
        command: "elasticsearch -Des.cluster.name=elasticsearch -Des.discovery.zen.ping.unicast.hosts=elasticsearch_master"
        links:
          - elasticsearch_master
        volumes:
          - /.esdata/node3:/usr/share/elasticsearch/data

    パラメータの説明:-Des.discovery.zen.ping.unicast.hosts=elasticsearch_マスターESのクラスタ検出メカニズムをクエリーelasticsearch_として指定マスターマスターマスター(マルチキャスト発見メカニズムは生産環境に推奨されない)
    クラスタは3つのESノードを起動し、そのうちの1つはメインノードであり、サービスポートを外部に露出する.クラスタを起動するにはdocker-composeだけが必要です.ymlの現在のディレクトリは「docker-compose up」を実行すればよい.
    参考資料:http://www.tuicool.com/articles/AnIVJnhttp://stackoverflow.com/questions/28632977/elasticsearch-in-docker-container-clusterhttps://docs.docker.com/compose/overview/