在安裝中,感覺有點困難,因es的版本6與7還是挺有區別的。
非docker版本在之前有寫過一篇文章,介紹安裝es集群。 https://www.cnblogs.com/a393060727/p/12111542.html
1、docker軟件下載相關鏡像
下載軟件,全部統一一個版本:7.1.1。
| // 文件收集logstash # docker pull logstash:7.1.1 // 存儲,搜索引擎 elasticsearch # docker pull elasticsearch:7.1.1 // 視圖管理 # docker pull kibana:7.1.1 // 日志搬運工 Filebeat # docker pull filebeat:7.1.1 |
確認下載完成
| # docker images |

1、docker安裝相關軟件
3.1、創建自定義網絡network
在所有安裝的軟件,都使用該自定義網絡,用於連接到連接到同一網絡的其他服務。
| # docker network create esnetwork // 查看網絡有哪些 # docker network ls // 刪除網絡 # docker network rm 網絡ID // 查看一個網絡的信息 # docker network inspect ec876e3251a7 |
3.2、調高JVM線程數限制數量
| // 編輯文件,增加內容 # vi /etc/sysctl.conf // 增加如下內容 vm.max_map_count=262144
// 讓配置生效 # sysctl -p |
| 注:這一步是為了防止啟動容器時,報出如下錯誤: bootstrap checks failed max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144] |
1、掛在文件配置
elasticsearch.yml配置說明:
| 參數 |
說明 |
| cluster.name |
集群名稱,相同名稱為一個集群 |
| node.name |
節點名稱,集群模式下每個節點名稱唯一 |
| node.master |
當前節點是否可以被選舉為master節點,是:true、否:false |
| node.data |
當前節點是否用於存儲數據,是:true、否:false |
| path.data |
索引數據存放的位置 |
| path.logs |
日志文件存放的位置 |
| bootstrap.memory_lock |
需求鎖住物理內存,是:true、否:false |
| bootstrap.system_call_filter |
SecComp檢測,是:true、否:false |
| network.host |
監聽地址,用於訪問該es |
| network.publish_host |
可設置成內網ip,用於集群內各機器間通信 |
| http.port |
es對外提供的http端口,默認 9200 |
| discovery.seed_hosts |
es7.x 之后新增的配置,寫入候選主節點的設備地址,在開啟服務后可以被選為主節點 |
| cluster.initial_master_nodes |
es7.x 之后新增的配置,初始化一個新的集群時需要此配置來選舉master |
| http.cors.enabled |
是否支持跨域,是:true,在使用head插件時需要此配置 |
| http.cors.allow-origin |
"*" 表示支持所有域名 |
4.1 elasitsearch 高可用配置
現固定一個目錄是用用於保存ES集群數據、日志、配置文件的。
目前我使用的是:
| // 新建目錄 # mkdir -p /home/soft/ES/ // 配置文件目錄 # mkdir -p /home/soft/ES/config // 數據目錄 # mkdir -p /home/soft/ES/data // 日志目錄 # mkdir -p /home/soft/ES/logs
|
4.2.0 創建IK分詞器目錄
在宿主機下載分詞器,找到相應版本7.1.1分詞器。
因為是集群,而為了分詞器之間互不影響,所以建立文件夾不同的文件夾,將7.1下載的zip包復制到這些目錄下,解壓,即可。
| 在與config同級目錄下新建目錄 # mkdir -p /home/soft/ES/plugins/plugins04 # mkdir -p /home/soft/ES/plugins/plugins05 # mkdir -p /home/soft/ES/plugins/plugins06 3個目錄都這樣操作再講壓縮包復制到這些目錄內,進入目錄解壓 # cd /home/soft/ES/plugins/plugins04 # unzip elasticsearch-analysis-ik-7.1.1.zip 縮短目錄名稱 # mv elasticsearch-analysis-ik-7.1.1 ik |
4.2.1創建數據存儲掛載目錄在ES目錄下data創建目錄用於掛載數據
| # mkdir -p /home/soft/ES/data/data04 # mkdir -p /home/soft/ES/data/data05 # mkdir -p /home/soft/ES/data/data06 |
4.2.2創建數據存儲掛載目錄在ES目錄下logs創建目錄用於掛載日志
| # mkdir -p /home/soft/ES/logs/logs04 # mkdir -p/home/soft/ES/logs/logs05 # mkdir -p /home/soft/ES/logs/logs06 |
4.2.3 配置文件信息
就是各個容器節點的配置文件,掛載時指定
節點es04.yml
# vi es04.yml
| cluster.name: esinner node.name: es04 node.master: true node.data: true bootstrap.memory_lock: false bootstrap.system_call_filter: false network.host: 172.19.0.14 http.port: 9200 transport.tcp.port: 9300 http.cors.enabled: true http.cors.allow-origin: "*" discovery.seed_hosts: ["172.19.0.14","172.19.0.15","172.19.0.16"] cluster.initial_master_nodes: ["172.19.0.14"] discovery.zen.minimum_master_nodes: 2 |
節點es05.yml
# vi es05.yml
| cluster.name: esinner node.name: es05 node.master: true node.data: true bootstrap.memory_lock: false bootstrap.system_call_filter: false network.host: 172.19.0.15 http.port: 9200 transport.tcp.port: 9300 http.cors.enabled: true http.cors.allow-origin: "*" discovery.seed_hosts: ["172.19.0.14","172.19.0.15","172.19.0.16"] cluster.initial_master_nodes: ["172.19.0.14"] discovery.zen.minimum_master_nodes: 2 |
節點es06.yml
# vi es07.yml
| cluster.name: esinner node.name: es06 node.master: true node.data: true bootstrap.memory_lock: false bootstrap.system_call_filter: false network.host: 172.19.0.16 http.port: 9200 transport.tcp.port: 9300 http.cors.enabled: true http.cors.allow-origin: "*" discovery.seed_hosts: ["172.19.0.14","172.19.0.15","172.19.0.16"] cluster.initial_master_nodes: ["172.19.0.14"] discovery.zen.minimum_master_nodes: 2 |
4.2.4、安裝elasticsearch
將端口映射出來,通過參數 -p。
將es的端口原樣暴露出來,設置容器固定IP,配置文件使用config文件夾下的,將es插件(IK分詞器)、es日志、數據信息保存到宿主機。
| docker run --restart=always -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ docker run --restart=always -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ docker run --restart=always -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ |
測試
| # curl http://192.168.89.138:9204 # curl http://192.168.89.138:9205 # curl http://192.168.89.138:9206 返回結果: [root@localhost data]# curl http://192.168.89.138:9204 { "name" : "es04", "cluster_name" : "esinner", "cluster_uuid" : "QLo293zCRO-syPbY4kJCwg", "version" : { "number" : "7.1.1", "build_flavor" : "default", "build_type" : "docker", "build_hash" : "7a013de", "build_date" : "2019-05-23T14:04:00.380842Z", "build_snapshot" : false, "lucene_version" : "8.0.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" } |
驗證集群是否OK
| # curl http://192.168.89.137:9200/_cat/nodes?pretty 訪問任意的節點都會得到如下結果: [root@localhost data]# curl http://192.168.89.138:9206/_cat/nodes?pretty 172.19.0.16 74 93 5 0.03 0.07 0.11 mdi * es06 172.19.0.15 60 93 5 0.03 0.07 0.11 mdi - es05 172.19.0.14 55 93 5 0.03 0.07 0.11 mdi - es04 |
查看集群相應:
| { "error" : { "root_cause" : [ { "type" : "master_not_discovered_exception", "reason" : null } ], "type" : "master_not_discovered_exception", "reason" : null }, "status" : 503 } |
解決:
| 配置錯誤。初始化節點要配置成一樣的。都指向同一個機器就可以了。 配置信息增加節點,指定初始化默認master節點: cluster.initial_master_nodes |
集群測試:
訪問任意一個節點都是

如果關閉掉其中的master節點。集群會自動選舉出現的節點作為主節點。如圖。

再次恢復節點后,節點將作為從節點加入進來。

至此,集群成功。
