1. 環境准備
本次部署為單機部署三節點集群, 3maser節點, 同時也是數據節點.
#docker安裝略,拉取es鏡像
#cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) #docker pull elasticsearch:7.1.1 #docker pull kibana:7.1.1
新建數據持久化目錄:
mkdir -p /data/elasticsearch/{data,logs,conf,plugins} mkdir /data/elasticsearch/data/node{1,2,3} mkdir /data/elasticsearch/logs/node{1,2,3} mkdir /data/elasticsearch/plugins/node{1,2,3}
添加配置文件模板:
node1節點配置: vim /data/elasticsearch/conf/node1.yml
# 設置集群名稱,集群內所有節點的名稱必須一致。 cluster.name: myes # 設置節點名稱,集群內節點名稱必須唯一。 node.name: node1 # 表示該節點會不會作為主節點,true表示會;false表示不會 node.master: true # 當前節點是否用於存儲數據,是:true、否:false node.data: true # 監聽地址,用於訪問該es network.host: 0.0.0.0 # es對外提供的http端口,默認 9200 http.port: 9200 # TCP的默認監聽端口,默認 9300 transport.tcp.port: 9300 # es7.x 之后新增的配置,寫入候選主節點的設備地址,在開啟服務后可以被選為主節點 discovery.seed_hosts: ["172.19.1.11", "172.19.1.12","172.19.1.13"] discovery.zen.fd.ping_timeout: 1m discovery.zen.fd.ping_retries: 5 # es7.x 之后新增的配置,初始化一個新的集群時需要此配置來選舉master cluster.initial_master_nodes: ["172.19.1.11", "172.19.1.12","172.19.1.13"] # 是否支持跨域,是:true,在使用head插件時需要此配置 http.cors.enabled: true # “*” 表示支持所有域名 http.cors.allow-origin: "*"
node2節點配置node2.yml:
cluster.name: myes # 設置節點名稱,集群內節點名稱必須唯一。 node.name: node2 # 表示該節點會不會作為主節點,true表示會;false表示不會 node.master: true # 當前節點是否用於存儲數據,是:true、否:false node.data: true # 監聽地址,用於訪問該es network.host: 0.0.0.0 # es對外提供的http端口,默認 9200 http.port: 9200 # TCP的默認監聽端口,默認 9300 transport.tcp.port: 9300 # es7.x 之后新增的配置,寫入候選主節點的設備地址,在開啟服務后可以被選為主節點 discovery.seed_hosts: ["172.19.1.11", "172.19.1.12","172.19.1.13"] discovery.zen.fd.ping_timeout: 1m discovery.zen.fd.ping_retries: 5 # es7.x 之后新增的配置,初始化一個新的集群時需要此配置來選舉master cluster.initial_master_nodes: ["172.19.1.11", "172.19.1.12","172.19.1.13"] # 是否支持跨域,是:true,在使用head插件時需要此配置 http.cors.enabled: true # “*” 表示支持所有域名 http.cors.allow-origin: "*"
node3節點配置node3.yml:
cluster.name: myes # 設置節點名稱,集群內節點名稱必須唯一。 node.name: node3 # 表示該節點會不會作為主節點,true表示會;false表示不會 node.master: true # 當前節點是否用於存儲數據,是:true、否:false node.data: true # 監聽地址,用於訪問該es network.host: 0.0.0.0 # es對外提供的http端口,默認 9200 http.port: 9200 # TCP的默認監聽端口,默認 9300 transport.tcp.port: 9300 # es7.x 之后新增的配置,寫入候選主節點的設備地址,在開啟服務后可以被選為主節點 discovery.seed_hosts: ["172.19.1.11", "172.19.1.12","172.19.1.13"] discovery.zen.fd.ping_timeout: 1m discovery.zen.fd.ping_retries: 5 # es7.x 之后新增的配置,初始化一個新的集群時需要此配置來選舉master cluster.initial_master_nodes: ["172.19.1.11", "172.19.1.12","172.19.1.13"] # 是否支持跨域,是:true,在使用head插件時需要此配置 http.cors.enabled: true # “*” 表示支持所有域名 http.cors.allow-origin: "*"
kibana配置文件:
server.name: kibana server.host: "0" elasticsearch.hosts: [ "http://172.19.1.11:9200" ] xpack.monitoring.ui.container.elasticsearch.enabled: true
2. 網絡配置
Docker創建容器時默認采用bridge網絡,自行分配ip,不允許自己指定。
在實際部署中,我們需要指定容器ip,不允許其自行分配ip,尤其是搭建集群時,固定ip是必須的。
我們可以創建自己的bridge網絡 : mynet,創建容器的時候指定網絡為mynet並指定ip即可。
查看網絡模式: docker network ls
創建一個新的bridge類型網絡:
docker network create --driver bridge --subnet=172.19.0.0/16 --gateway=172.19.1.1 mynet
通過選項--network=mynet --ip 172.19.1.x 可以為新建容器指定ip地址
3. 創建並啟動容器
#節點1啟動
docker run -d --network=mynet --ip 172.19.1.11 --privileged=true \ -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -p 9200:9200 \ --name node1 -e TAKE_FILE_OWNERSHIP=true \ -v /data/elasticsearch/config/node1.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /data/elasticsearch/data/node1:/usr/share/elasticsearch/data \ -v /data/elasticsearch/logs/node1:/usr/share/elasticsearch/logs \ -v /data/elasticsearch/plugins/node1:/usr/share/elasticsearch/plugins elasticsearch:7.1.1
#節點2啟動
docker run -d --network=mynet --ip 172.19.1.12 --privileged=true \ -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -p 9201:9200 \ --name node2 -e TAKE_FILE_OWNERSHIP=true \ -v /data/elasticsearch/config/node2.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /data/elasticsearch/data/node2:/usr/share/elasticsearch/data \ -v /data/elasticsearch/logs/node2:/usr/share/elasticsearch/logs \ -v /data/elasticsearch/plugins/node2:/usr/share/elasticsearch/plugins elasticsearch:7.1.1
#節點3啟動
docker run -d --network=mynet --ip 172.19.1.13 --privileged=true \ -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -p 9202:9200 \ --name node3 -e TAKE_FILE_OWNERSHIP=true \ -v /data/elasticsearch/config/node3.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /data/elasticsearch/data/node3:/usr/share/elasticsearch/data \ -v /data/elasticsearch/logs/node3:/usr/share/elasticsearch/logs \ -v /data/elasticsearch/plugins/node3:/usr/share/elasticsearch/plugins elasticsearch:7.1.1
#kibana啟動
docker run -d --network=mynet --ip 172.19.1.99 --privileged=true \
-p 5601:5601 -v /data/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml \
-e ES_JAVA_OPTS="-Xms256m -Xmx256m" -e TAKE_FILE_OWNERSHIP=true \
--name kibana kibana:7.1.1
4. 登錄kibana網頁客戶端
瀏覽器輸入http://宿主機ip:5601可登錄kibana, 可進行管理es集群操作