目前生產環境的es版本是1.0版本,需要升級到最新的2.2版本,於是在測試環境進行部署集群測試,在測試過程中遇到的坑相當多,下面詳細介紹下。
1. 版本升級到2.2后,必須建一個單獨的賬號用於啟動elasticsearch,不可以使用root賬號進行啟動,否則會報以下錯誤
Exception in thread "main" java.lang.RuntimeException: don't run elasticsearch as root.
2. 如果需要通過ip進行訪問es集群,必須修改elasticsearch.yml中的network.host節點。es 1.0版本的默認配置是 "0.0.0.0",所以不綁定ip也可訪問,但是es 2.2版本如果采用默認配置,只能通過 localhost 和 "127.0.0.1"進行訪問。network.host節點可以配置多個值,如下:
network.host: [_local_, 192.168.87.77]
3. es1.0 版本的集群的discovery默認采用的是組播(multicast)模式,但是在es2.2版本中已去除該模式,雖然提供了multicast的插件,但是官方說不建議采用multicast的模式,故我們只能采用單播(unicast)模式。同時我們還必須顯示指明“network.publish_host”節點的內容,否則該節點會動態綁定ip,導致你設置的unicast地址不正確,以下是我的一些配置:
network.publish_host: 192.168.87.76discovery.zen.ping.unicast.hosts: ["192.168.87.77","192.168.87.87.78"]
關於節點“discovery.zen.ping.unicast.hosts”的值可以是單值也可以是多值,在不同的服務器之間部署es節點可以不指明ip端口,但是在同一服務器中部署,ip最好是加上檢測的端口號,否則可能檢測不到要加入的節點,如下配置:
network.publish_host: 192.168.87.76discovery.zen.ping.unicast.hosts: ["192.168.87.77:9300"]
4. 在同一台服務器上部署多個節點,最好顯示指明節點間通信的端口號,這樣有利於第3點進行節點發現的ip+端口號的綁定操作,修改如下節點:
transport.tcp.port: 9310
5. 介紹下排錯的過程,可以在es啟動后,用tail命令監控es的日志文件,在es的node節點分配了標識之后,會進行節點探測才操作。

該圖在分配標識后,打印了new_master操作,說明沒有探測到要加入的集群,可能是第3點的單播的host配置有錯誤

該圖在分配標識后,打印了detected_master操作,說明探測到了要加入的集群
參考內容