Ubuntu下Elasticsearch 2.1集群部署過程與遇到的問題及解決方法(開機自啟動、root用戶啟動)


SEO:ES 2.0 2.1 Elastic Elasticsearch Linux Ubuntu root start stop 開機啟動 開機自啟動  安裝 部署 使用 腦裂 無法 不能 發現 集群 節點

 (本文適合有一定Linux基礎的讀者閱讀。由於幾乎是按流水賬過程記錄,而不是教程,建議操作之前讀完一遍)

 

本人在部署ES2.1集群時,遇到了諸多問題,花了很大功夫,才解決,特在此記錄解決過程及方法,希望幫到有需要的人。

據使用者的討論,ES在2.0版本之后發生了很大變化,因此網上的一些資料已經不再適用,在查閱資料時需要根據版本判斷,靈活變通方法。

 

操作系統:Ubuntu 14.04.1 64位

jdk:1.8.0_20 64位

Elasticsearch 2.1

 

ES部署步驟:
(1)下載目前(2015年12月18日)最新版的ES 2.1的tar.gz包,解壓,放至wsn用戶目錄,修改config\elasticsearch.yml配置文件,添加(或對已有的但被注釋掉的語句,取消注釋並修改)以下語句:

cluster.name: groupname(設定的集群名稱)
node.name: node_10.10.2.145(設定的當前節點名稱)
network.host: 10.10.2.145(可以理解為監聽/綁定的IP,本人設置為本機在局域網中的IP,嘗試過如果設置127.0.0.1,之后在本機可以訪問ES但在局域網中不能訪問)
index.number_of_shards: 9(分片數量)
http.max_content_length: 2000mb(使用中發現,如果使用默認值,使用curl post插入300M以上的txt時會報錯)
http.compression: true

【注意】每行語句前不能有空格,冒號后必須有一個空格,否則可能啟動報錯

【注意】可使用 bin/elasticsearch 啟動,此時不是服務形式。root用戶不能以此方式啟動,否則會報錯
其中node.name network.host需要根據每台機器的IP等修改(本人是在一台服務器部署好之后將該服務器復制為3台,復制后需要根據機器修改部分配置)

(2)(也可以不進行此步驟,詳見下)將elasticsearch添加入系統服務service
/etc/init.d/ 下建立軟連接,操作步驟為:

使用cd命令進入/etc/init.d/ ,然后

ln -s /home/wsn/wshare/es/elasticsearch-2.1.0/bin/elasticsearch elasticsearch
sudo update-rc.d elasticsearch defaults 95 10 //按照官方說法,這是適用於Ubuntu的方法,猜測為加入服務,參考Running as a Service on Linux https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-service.html#using-systemd

加入服務后,經過測試,仍然無法使用start stop等命令,報錯(如下圖):

需使用service elasticsearch 啟動服務,與直接使用bin/elasticsearch效果相同。

因此,本人決定不使用將其加入服務的方法(加入服務除了啟動時輸命令方便,別的好像沒什么卵用),采用手動配置啟動腳本與開機自啟動方式,因此加入服務部分的操作(2)可不進行。

(3)配置開機自啟動

【2016-5-26更新:發現root用戶也可以啟動ElasticSearch,方法是在啟動時添加Des.insecure.allow.root參數,如下:

bin/elasticsearch -Des.insecure.allow.root=true(參考 How to run Elasticsearch 2.1.1 as root user in Linux machine - Stack Overflow http://stackoverflow.com/questions/34920801/how-to-run-elasticsearch-2-1-1-as-root-user-in-linux-machine)】

本人使用的Ubuntu中,語句放入/etc/init.d/rc.local文件中,即可在開機時運行。
/etc/init.d/rc.local 文件,最后一行后加入:

sh /home/wsn/wshare/auto_start.sh

便能夠開機啟動auto_start.sh


在/home/wsn/wshare/auto_start.sh中寫入:

sh /home/wsn/wshare/es/elasticsearch-2.1.0/start_es.sh

便能夠開機時執行start_es.sh。

 

start_es.sh是啟動Elasticsearch並后台運行的腳本,內容為:

su -c “/home/wsn/wshare/es/elasticsearch-2.1.0/bin/elasticsearch &” – wsn
# ↑ 臨時切換為wsn用戶執行-c后的命令,執行后切換為原用戶

(wsn用戶是Ubuntu系統中建立的另一個用戶)

即臨時切換為wsn用戶並執行”-c”后的命令語句,因此root用戶可使用此腳本啟動ES(注意第一行后可能需要添加空格,否則有報錯)。

通過以上操作,部署ES和開機自啟動便完成了。同時,root用戶也可使用如上的start_es.sh腳本啟動ES,一定程度地避免了root不能直接啟動ES帶來的不便。

 

停止ES使用查找進程並kill的方法(ps -ef|grep elastic),尚未找到更好的方法。但使用kill進程方法停止時,ES能感知到並寫入ES關閉的日志,因此推測kill進程時ES可以正常退出而非被強制結束。

(4)其它注意事項
①期間遇到的問題:開機啟動無法成功,並且看不到腳本執行過程的輸出,因此將輸出重定向到/tmp/debug3.log(tmp目錄下不易產生權限問題),即/etc/init.d/rc.local中加入的語句改為

sh /home/wsn/wshare/auto_start.sh < /tmp/debug3.log

之后,如果開機時執行上述命令有報錯,便可以在/tmp/debug3.log文件中看到運行過程的輸出。

 

②另外,jdk配置需要位於/etc/profile文件中,對所有用戶都生效。配置方法為,在/etc/profile文件末尾添加

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_20
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

(具體的JAVA_HOME路徑需要按實際情況填寫)

如果配置jdk的方法是將上述語句添加到針對某個用戶的~/.bashrc(使用vim ~/.bashrc編輯添加),則ES無法開機啟動,錯誤為啟動時沒有JAVA環境變量。

 

③ES啟動時有關於log4j的日志文件權限報錯,因此將logs文件夾及其子目錄權限設置為777(chmod -R 777 logs 針對所有人都可讀可寫可執行,是個懶方法),啟動時不再有報錯。

 

④一定程度地防止腦裂(無法發現部分節點)問題,因此ES配置文件中加入:

discovery.zen.minimum_master_nodes: 2
discovery.zen.ping_timeout: 10s

即最少需要2個節點才會選舉master節點即產生集群)。在配置文件的注釋中看到官方的建議是,數字設置為【節點個數/2+1】,向上取整,本人的是3個節點,因此設置為2;

發現集群的超時時間為10s。

配置啟用多播discovery.zen.ping.multicast.enabled: true,但無效,無法發現節點,因此使用單播,添加配置

discovery.zen.ping.unicast.hosts: [“10.10.2.143″, “10.10.2.144”, “10.10.2.145”, “10.10.2.10”]

如此配置之后,該節點便會訪問列表中的幾個IP,找到這幾個IP的機器中的節點,組成集群。

(后查證為ES2.0之后版本已刪除了多播功能,如果使用需要安裝multicast插件)

 

本人使用ES也是新手,只是總結了一些自己的經驗,文中如有錯誤、不准確、遺漏之處,希望各位不吝賜教指出,或者解答本人遇到的一些疑慮,以及共同討論探討,謝謝! 

 

轉載時請注明出處:

Ubuntu下Elasticsearch 2.1集群部署過程與遇到的問題及解決方法(開機自啟動、root用戶啟動) - 張冬 - 博客園

http://www.cnblogs.com/zhangdong92/p/5056344.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM