DevOps.Elasticsearch

Elasticsearch 集群配置與容器部署
摘要:本文屬于原創(chuàng)怕磨,歡迎轉(zhuǎn)載,轉(zhuǎn)載請保留出處: https://github.com/jasonGeng88/blog
本文所有服務(wù)均采用docker容器化方式部署
當(dāng)前環(huán)境
Mac OS 10.11.x
Docker >= 1.12
elasticsearch 5.3

技術(shù)說明
Elasticsearch(ES) 是一個分布式可擴展的實時搜索和分析引擎胡嘿。底層基于的是 Apache Lucene 的搜索引擎按傅。
目錄
配置文件講解
容器化配置
總結(jié)

簡介
寫這篇文章的主要原因是之前部署 ES 集群的過程中遇到了一些問題含末,后來在看了官方文檔后,發(fā)現(xiàn)和網(wǎng)上類似的文章還是所有差別。網(wǎng)上基本都是版本比較早的羔飞,而且沒有用容器化來部署肺樟。尤其是在 版本5 之后引入了 Bootstrap Check 機制,下面來給大家講講我的理解逻淌。
配置文件
ES 有兩個配置文件么伯,分別是:
elasticsearch.yml :ES 的具體配置。
log4j2.properties :ES 日志文件卡儒。( 順便提一下田柔,ES 是由 JAVA 實現(xiàn)的,所以寫 JAVA 的同學(xué)看到這文件應(yīng)該很熟悉骨望,這里就不展開了 )硬爆。

elasticsearch.yml 配置
路徑
path.data: ES 數(shù)據(jù)的存儲地址;
path.logs: ES 日志地址擎鸠;

網(wǎng)絡(luò)
ES 在網(wǎng)絡(luò)方面主要提供兩種協(xié)議:
http: 用于 REST API 的使用缀磕;
tcp:用于節(jié)點間通信;

其對應(yīng)的模塊是 http 與 transport劣光,詳情可查看 模塊列表 袜蚕。
http.host:設(shè)置 HTTP 的服務(wù)地址;
http.port:設(shè)置 HTTP 端口赎线,默認(rèn)端口 9200-9300廷没;
transport.host:設(shè)置 TCP 的服務(wù)地址糊饱;
transport.tcp.port:設(shè)置 TCP 端口垂寥,默認(rèn)端口 9300-9400;

ES 還提供了一個 network.host 設(shè)置另锋,http 與 tcp 的 host 默認(rèn)是綁定在它上面的滞项,所以大多數(shù)情況下,上面參數(shù)可不進(jìn)行配置夭坪。
network.host:默認(rèn)為本地回環(huán)地址文判。 當(dāng)定義該屬性時,程序環(huán)境默認(rèn)切換至生產(chǎn)環(huán)境(即開啟 Bootstrap Checks) 室梅。

集群
ES 中的集群是根據(jù)集群名稱來關(guān)聯(lián)的戏仓,它會將集群名稱相同的節(jié)點自動關(guān)聯(lián)成一個集群,并通過節(jié)點名稱來做區(qū)分亡鼠。
節(jié)點常用的分為 集群管理節(jié)點(master) 與 數(shù)據(jù)操作節(jié)點(data)赏殃,默認(rèn)情況下是兩者都是。
cluster.name:集群名稱间涵,默認(rèn)名稱 elasticsearch仁热;
node.name:節(jié)點名稱,同一集群下勾哩,節(jié)點名稱不能重復(fù)抗蠢;

發(fā)現(xiàn)機制
上面講了集群的組成举哟,但是節(jié)點與節(jié)點之間是如何發(fā)現(xiàn)的呢?
這里采用的是 ES 自帶的 Zen Discovery 發(fā)現(xiàn)機制迅矛,
discovery.zen.ping.unicast.hosts:需要發(fā)現(xiàn)的節(jié)點地址妨猩,支持 IP 和 domain,在不指定端口的情況下诬乞,會默認(rèn)掃描端口 9300 - 9305册赛。

discovery.zen.ping.unicast.hosts: - 192.168.1.10:9300 - 192.168.1.11 - seeds.mydomain.com
discovery.zen.minimum_master_nodes:master 節(jié)點最少可用數(shù),當(dāng)節(jié)點數(shù)小于該值震嫉,服務(wù)將不可用森瘪。這也是為了避免集群中出現(xiàn)多個中心,導(dǎo)致數(shù)據(jù)不一致票堵;

計算公式:(master 節(jié)點數(shù) / 2) + 1# 例子:(3 / 2) + 1discovery.zen.minimum_master_nodes: 2

Bootstrap Checks(生產(chǎn)環(huán)境)
上面講到了 Bootstrap Checks扼睬,這也是它區(qū)別之前老版本的一個地方,在以前的版本中悴势,也有這些警告窗宇,但有時會被人忽視,造成了服務(wù)的不穩(wěn)定性特纤。在版本 5.0 之后军俊,對這些在啟動時做了強校驗,來保證在生產(chǎn)環(huán)境下的穩(wěn)定性捧存。
這些校驗主要涉及有內(nèi)存粪躬、線程數(shù)、文件句柄等昔穴,
JVM heap:

建議將最小堆與最大堆設(shè)置為一樣镰官,當(dāng)設(shè)置bootstrap.memory_lock時,在程序啟動就會對內(nèi)存進(jìn)行鎖定吗货。
ES_JAVA_OPTS=-Xms512m -Xmx512m
內(nèi)存鎖定泳唠,禁止內(nèi)存與磁盤的置換

bootstrap.memory_lock: true
取消文件數(shù)限制

ulimit -n unlimited
取消線程數(shù)限制

ulimit -l unlimited
容器化配置
關(guān)于容器化還是通過 docker 技術(shù)來實現(xiàn),這里為了簡單起見宙搬,以 Docker Cli 的方式進(jìn)行部署笨腥。
es1.yml

cluster.name: my-applicationnode.name: node-1# 可以選擇宿主機地址,網(wǎng)絡(luò)模式選擇 --net=hostnetwork.host: 172.17.0.2bootstrap.memory_lock: truediscovery.zen.ping.unicast.hosts: ["172.17.0.3"]discovery.zen.minimum_master_nodes: 2
es2.yml

cluster.name: my-applicationnode.name: node-2network.host: 172.17.0.3bootstrap.memory_lock: truediscovery.zen.ping.unicast.hosts: ["172.17.0.2"]discovery.zen.minimum_master_nodes: 2
docker cli

啟動 es1docker run -d --name=es1 -p 9200:9200 -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" --ulimit memlock=-1:-1 --ulimit nofile=65536:65536 -v ${YOUR_PATH}/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v ${YOUR_PATH}/data:/usr/share/elasticsearch/data -v ${YOUR_PATH}/logs:/usr/share/elasticsearch/logs \elasticsearch:5.3# 啟動 es2docker run -d --name=es2 -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" --ulimit memlock=-1:-1 --ulimit nofile=65536:65536 -v ${YOUR_PATH}/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v ${YOUR_PATH}/data:/usr/share/elasticsearch/data -v ${YOUR_PATH}/logs:/usr/share/elasticsearch/logs \elasticsearch:5.3

查看結(jié)果:
容器情況


集群情況(GET: /_cat/health?v)


內(nèi)存鎖定情況(GET: /_nodes?filter_path=**.mlockall)


坑:在容器化中勇垛,由于沒鎖定內(nèi)存脖母。每次在節(jié)點加入時,容器總是意外崩潰窥摄,查看容器相關(guān)日志也沒有任何說明镶奉。后來在系統(tǒng)日志中發(fā)現(xiàn)內(nèi)存溢出的問題。所以再次強調(diào),一定要設(shè)置 bootstrap.memory_lock: true哨苛,并且查看是否生效鸽凶。
總結(jié)
本文從 ES 的配置文件開頭,從 文件路徑建峭、網(wǎng)絡(luò)情況玻侥、集群配置以及生產(chǎn)環(huán)境的校驗等方面講述了配置文件的主要內(nèi)容,最后以 docker 容器化的方式進(jìn)行了集群的部署亿蒸。雖然文章寫的比較簡單凑兰,但涉及的面還是比較多的,包括節(jié)點間發(fā)現(xiàn)的網(wǎng)絡(luò)單播傳輸边锁、集群最小節(jié)點個數(shù)的算法姑食、jvm的內(nèi)存限制、內(nèi)存與磁盤的置換限制等茅坛。有興趣的同學(xué)音半,可以自行去研究下。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贡蓖,一起剝皮案震驚了整個濱河市曹鸠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌斥铺,老刑警劉巖彻桃,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異晾蜘,居然都是意外死亡邻眷,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門笙纤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耗溜,“玉大人组力,你說我怎么就攤上這事省容。” “怎么了燎字?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵腥椒,是天一觀的道長。 經(jīng)常有香客問我候衍,道長笼蛛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任蛉鹿,我火速辦了婚禮滨砍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己惋戏,他們只是感情好领追,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著响逢,像睡著了一般绒窑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上舔亭,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天些膨,我揣著相機與錄音,去河邊找鬼钦铺。 笑死订雾,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的矛洞。 我是一名探鬼主播葬燎,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼缚甩!你這毒婦竟也來了谱净?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤擅威,失蹤者是張志新(化名)和其女友劉穎壕探,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體郊丛,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡李请,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了厉熟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片导盅。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖揍瑟,靈堂內(nèi)的尸體忽然破棺而出白翻,到底是詐尸還是另有隱情,我是刑警寧澤绢片,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布滤馍,位于F島的核電站,受9級特大地震影響底循,放射性物質(zhì)發(fā)生泄漏巢株。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一熙涤、第九天 我趴在偏房一處隱蔽的房頂上張望阁苞。 院中可真熱鬧困檩,春花似錦、人聲如沸那槽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽倦炒。三九已至显沈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間逢唤,已是汗流浹背拉讯。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鳖藕,地道東北人魔慷。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像著恩,于是被迫代替她去往敵國和親院尔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容