市長ポストメール検索サービス:DockerにElasticsearchクラスタをインストールしてサービス
2803 ワード
市長ポストメール検索サービス: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 ipコマンドによりdockerホストのipを得ることができる.その後のESサービスへのアクセスは、このIPにアクセスする必要がある、一般的には192.168である.99.100
Docker Hub公式にはelasticsearchのミラーがあります.私たちは現地で運転すればいいです.
パラメータの説明:-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ファイル:
パラメータの説明:-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/
前章では、Mysqlに代わるElasticsearchの作業を完了しました.これまでの計画通り、ESを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/