Elasticsearch6.2叢集搭建
原文地址,轉載請註明出處:https://blog.csdn.net/qq_34021712/article/details/79330028 ©王賽超
環境介紹
伺服器 | 是否可以成為主節點 | 是否為資料節點 |
192.168.8.101 | true | true |
192.168.8.103 | true | true |
192.168.8.104 | true | true |
前提是安裝java環境,ELK6.2版本需要jdk為1.8,官方推薦安裝OracleJDK 最好不要安裝OpenJDK.安裝jdk參考:linux安裝jdk 只需要將安裝包換成1.8的就行。
Elasticsearch安裝
①解壓檔案
tar -zxvf elasticsearch-6.2.1.tar.gz
②重新命名mv elasticsearch-6.2.1 /usr/local/elk/elasticsearch
③建立資料存放路徑(應將設定配置為在Elasticsearch主目錄之外定位資料目錄,以便在不刪除資料的情況下刪除主目錄!)mkdir /usr/local/elk/elasticsearch/data
④建立日誌存放路徑(已存在不用建立)mkdir /usr/local/elk/elasticsearch/logs
⑤建立使用者並授權(es不能用root執行)#新增使用者
useradd es
#賦予資料夾許可權
chown -R es:es /usr/local/elk/elasticsearch
⑥修改elasticsearch配置檔案vim /usr/local/elk/elasticsearch/config/elasticsearch.yml 將配置檔案以下內容進行修改:
#叢集的名稱
cluster.name: es6.2
#節點名稱,其餘兩個節點分別為node-2 和node-3
node.name: node-1
#指定該節點是否有資格被選舉成為master節點,預設是true,es是預設叢集中的第一臺機器為master,如果這臺機掛了就會重新選舉master
node.master: true
#允許該節點儲存資料(預設開啟)
node.data: true
#索引資料的儲存路徑
path.data: /usr/local/elk/elasticsearch/data
#日誌檔案的儲存路徑
path.logs: /usr/local/elk/elasticsearch/logs
#設定為true來鎖住記憶體。因為記憶體交換到磁碟對伺服器效能來說是致命的,當jvm開始swapping時es的效率會降低,所以要保證它不swap
bootstrap.memory_lock: true
#繫結的ip地址
network.host: 0.0.0.0
#設定對外服務的http埠,預設為9200
http.port: 9200
# 設定節點間互動的tcp埠,預設是9300
transport.tcp.port: 9300
#Elasticsearch將繫結到可用的環回地址,並將掃描埠9300到9305以嘗試連線到執行在同一臺伺服器上的其他節點。
#這提供了自動叢集體驗,而無需進行任何配置。陣列設定或逗號分隔的設定。每個值的形式應該是host:port或host
#(如果沒有設定,port預設設定會transport.profiles.default.port 回落到transport.tcp.port)。
#請注意,IPv6主機必須放在括號內。預設為127.0.0.1, [::1]
discovery.zen.ping.unicast.hosts: ["192.168.8.101:9300", "192.168.8.103:9300", "192.168.8.104:9300"]
#如果沒有這種設定,遭受網路故障的叢集就有可能將叢集分成兩個獨立的叢集 - 分裂的大腦 - 這將導致資料丟失
discovery.zen.minimum_master_nodes: 3
修改完之後使用命令檢視具體修改了哪些值grep '^[a-z]' /usr/local/elk/elasticsearch/config/elasticsearch.yml
⑦調整jvm記憶體
vim /usr/local/elk/elasticsearch/config/jvm.options
#預設是1g官方建議對jvm進行一些修改,不然很容易出現OOM,參考官網改引數配置最好不要超過記憶體的50%
-Xms1g
-Xmx1g
分別啟動三臺Elasticsearch
注意:請使用es使用者啟動 su - es
第一個坑:日誌檔案會以叢集名稱命名,檢視es6.2.log檔案,日誌報以下異常:
切回root使用者su - root,修改配置
注意:請使用es使用者啟動 su - es
/usr/local/elk/elasticsearch/bin/elasticsearch -d
使用ps -ef|grep elasticsearc檢視程式是否啟動,發現並沒有啟動,什麼原因呢?檢視一下日誌在我們配置的日誌路徑下:第一個坑:日誌檔案會以叢集名稱命名,檢視es6.2.log檔案,日誌報以下異常:
[2018-02-14T23:40:16,908][ERROR][o.e.b.Bootstrap ] [node-1] node validation exception
[3] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
[2]: memory locking requested for elasticsearch process but memory is not locked
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[2018-02-14T23:40:16,910][INFO ][o.e.n.Node ] [node-1] stopping ...
[2018-02-14T23:40:17,016][INFO ][o.e.n.Node ] [node-1] stopped
[2018-02-14T23:40:17,016][INFO ][o.e.n.Node ] [node-1] closing ...
[2018-02-14T23:40:17,032][INFO ][o.e.n.Node ] [node-1] closed
解決方法:切回root使用者su - root,修改配置
① vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 2048
* hard nproc 4096
#我選擇鎖住swapping因此需要在這個配置檔案下再增加兩行程式碼
es soft memlock unlimited
es hard memlock unlimited
以上引數介紹參考:https://my.oschina.net/987openlab/blog/94634② vim /etc/sysctl.conf
vm.max_map_count=655360
fs.file-max=655360
注意:之後需要執行一句命令sysctl -p使系統配置生效(使用root使用者)。再次重啟三臺Elasticsearch
使用ps -ef|grep elasticsearch程式檢視命令已啟動,使用netstat -ntlp檢視9200埠也被佔用了。
但是我們發現,3個節點都正常started了,但是就是無法形成叢集,使用Elasticsearch Head外掛缺發現沒有連線上叢集,
但是我們發現,3個節點都正常started了,但是就是無法形成叢集,使用Elasticsearch Head外掛缺發現沒有連線上叢集,
Head外掛安裝參考:Elasticsearch-head外掛安裝
第二個坑:檢視日誌報以下錯誤:
關於discovery.zen.minimum_master_nodes引數介紹,參考:
再次啟動
第二個坑:檢視日誌報以下錯誤:
[2018-02-15T21:15:06,352][INFO ][rest.suppressed ] /_cat/health Params: {h=node.total}
MasterNotDiscoveredException[waited for [30s]]
at org.elasticsearch.action.support.master.TransportMasterNodeAction$4.onTimeout(TransportMasterNodeAction.java:160)
at org.elasticsearch.cluster.ClusterStateObserver$ObserverClusterStateListener.onTimeout(ClusterStateObserver.java:239)
at org.elasticsearch.cluster.service.InternalClusterService$NotifyTimeout.run(InternalClusterService.java:630)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
原因:將discovery.zen.minimum_master_nodes的值設定為了3,總共3個節點,都充當主節點是不行的,將discovery.zen.minimum_master_nodes將這個配置改為2。關於discovery.zen.minimum_master_nodes引數介紹,參考:
再次啟動
第三個坑:使用Head外掛檢視,發現只有192.168.8.101為主節點,其他兩個節點並沒有連線上來,檢視日誌發現報以下異常
[2018-02-15T21:53:58,084][INFO ][o.e.d.z.ZenDiscovery ] [node-3] failed to send join request to master [{node-1}{SVrW6URqRsi3SShc1PBJkQ}{y2eFQNQ_TRenpAPyv-EnVg}{192.168.8.101}{192.168.8.101:9300}], reason [RemoteTransportException[[node-1][192.168.8.101:9300][internal:discovery/zen/join]]; nested: IllegalArgumentException[can't add node {node-3}{SVrW6URqRsi3SShc1PBJkQ}{uqoktM6XTgOnhh5r27L5Xg}{192.168.8.104}{192.168.8.104:9300}, found existing node {node-1}{SVrW6URqRsi3SShc1PBJkQ}{y2eFQNQ_TRenpAPyv-EnVg}{192.168.8.101}{192.168.8.101:9300} with the same id but is a different node instance]; ]
原因:可能是之前啟動的時候報錯,並沒有啟動成功,但是data檔案中生成了其他節點的資料。將三個節點的data目錄清空再次重新啟動,成功!
相關文章
- 搭建zookeeper叢集(偽叢集)
- zookeeper叢集及kafka叢集搭建Kafka
- linux下搭建ZooKeeper叢集(偽叢集)Linux
- Redis系列:搭建Redis叢集(叢集模式)Redis模式
- 搭建ELK叢集
- Ambari叢集搭建
- kafka叢集搭建Kafka
- Hadoop搭建叢集Hadoop
- zookeeper 叢集搭建
- 搭建 Redis 叢集Redis
- nacos 叢集搭建
- mysql叢集搭建MySql
- redis叢集搭建Redis
- Hadoop叢集搭建Hadoop
- Zookeeper叢集搭建
- RabbitMQ叢集搭建MQ
- HBASE叢集搭建
- 【環境搭建】RocketMQ叢集搭建MQ
- 4.4 Hadoop叢集搭建Hadoop
- Redis(5.0) 叢集搭建Redis
- MySQL 5.7 叢集搭建MySql
- 搭建spark on yarn 叢集SparkYarn
- ZooKeeper 搭建 solr 叢集Solr
- 搭建Redis原生叢集Redis
- 搭建MongoDB分片叢集MongoDB
- MySQL MGR 叢集搭建MySql
- 【greenplum】greenplum叢集搭建
- Kubernetes 叢集搭建(上)
- Kubernetes 叢集搭建(下)
- MongoDB 分片叢集搭建MongoDB
- ElasticSearch 7.8.1叢集搭建Elasticsearch
- Redis--叢集搭建Redis
- Docker 搭建叢集 MongoDBDockerMongoDB
- zookeeper叢集的搭建
- Hadoop叢集搭建(一)Hadoop
- Kubernetes叢集搭建(vagrant)
- ONOS叢集的搭建
- 搭建redis cluster叢集Redis