95_es生產(chǎn)集群部署之部署3個ES 5.5節(jié)點以及zen discovery集群發(fā)現(xiàn)機制

95_es生產(chǎn)集群部署之部署3個ES 5.5節(jié)點以及zen discovery集群發(fā)現(xiàn)機制

生產(chǎn)環(huán)境集群部署

一點一點講解的,生產(chǎn)環(huán)境去部署的時候球昨,涉及到很多的配置,還有牽扯到了很多的es的知識點

我們先下載es 5.5(7月6號為止)的壓縮包,部署到3個節(jié)點上面去介褥,但是不啟動,因為我們接下來要花費很多講的時間來講解各種生產(chǎn)環(huán)境的參數(shù)的配置

es模擬生產(chǎn)環(huán)境的3節(jié)點的集群給啟動起來递惋,停止es進程柔滔,curl,kibana

1萍虽、在三個節(jié)點上都下載es

如果要安裝es睛廊,首先就要從官網(wǎng)下載es的安裝包,并且最新es版本要求有JDK 8以上的版本

es安裝包的目錄結構大致如下:

bin:存放es的一些可執(zhí)行腳本杉编,比如用于啟動進程的elasticsearch命令超全,以及用于安裝插件的elasticsearch-plugin插件

conf:用于存放es的配置文件咆霜,比如elasticsearch.yml

data:用于存放es的數(shù)據(jù)文件,就是每個索引的shard的數(shù)據(jù)文件

logs:用于存放es的日志文件

plugins:用于存放es的插件

script:用于存放一些腳本文件

2嘶朱、zen discovery集群發(fā)現(xiàn)機制

你會在多臺機器上蛾坯,每臺機器部署一個es進程,每臺機器都啟動一個es進程疏遏,你怎么讓多臺機器上的多個es進程偿衰,互相發(fā)現(xiàn)對方,然后完美的組成一個生產(chǎn)環(huán)境的es集群呢改览?下翎??宝当。视事。。庆揩。

默認情況下俐东,es進程會綁定在自己的回環(huán)地址上,也就是127.0.0.1订晌,然后掃描本機上的9300~9305端口號虏辫,嘗試跟那些端口上啟動的其他es進程進行通信,然后組成一個集群锈拨。這對于在本機上搭建es集群的開發(fā)環(huán)境是很方便的砌庄。但是對于生產(chǎn)環(huán)境下的集群是不行的,需要將每臺es進程綁定在一個非回環(huán)的ip地址上奕枢,才能跟其他節(jié)點進行通信娄昆,同時需要使用集群發(fā)現(xiàn)機制來跟其他節(jié)點上的es node進行通信。

大家還記不記得缝彬,我們?nèi)绻趙indows上自己玩兒的話萌焰,是不是說,你直接啟動多個es進程谷浅,他們自己就會組成一個集群

在生產(chǎn)環(huán)境中的多臺機器上部署es集群扒俯,就涉及到了es的discovery機制,也就是集群中各個節(jié)點互相發(fā)現(xiàn)然后組成一個集群的機制一疯,同時discovery機制也負責es集群的master選舉撼玄,關于master,一會兒會講解s

master node和data node兩種角色

es是一種peer to peer违施,也就是p2p點對點的分布式系統(tǒng)架構互纯,不是hadoop生態(tài)普遍采用的那種master-slave主從架構的分布式系統(tǒng)瑟幕。集群中的每個node是直接跟其他節(jié)點進行通信的磕蒲,而不是hadoop生態(tài)系統(tǒng)中的那種master-slave分布式系統(tǒng)架構留潦。幾乎所有的API操作,比如index辣往,delete兔院,search,等等站削,都不是說client跟master通信坊萝,而是client跟任何一個node進行通信,那個node再將請求轉發(fā)給對應的node來進行執(zhí)行许起。這塊的原理十偶,路由,讀寫原理园细,在入門篇都講解過了惦积。

兩個角色,master node猛频,data node狮崩。正常情況下,就只有一個master node鹿寻。master node的責任就是負責維護整個集群的狀態(tài)信息睦柴,也就是一些集群元數(shù)據(jù)信息,同時在node加入集群或者從集群中下限覅按時毡熏,重新分配shard坦敌,或者是創(chuàng)建或刪除了一個索引。包括每次cluster state如果有改變的化痢法,那么master都會負責將集群狀態(tài)同步給所有的node恬试。

master node負責接收所有的cluster state相關的變化信息,然后將這個改變后的最新的cluster state推動給集群中所有的data node疯暑,集群中所有的node都有一份完整的cluster state训柴。只不過master node負責維護而已。其他的node妇拯,除了master之外的node幻馁,就是負責數(shù)據(jù)的存儲和讀寫的,寫入索引越锈,搜索數(shù)據(jù)仗嗦,data node。

如果要讓多個node組成一個es集群甘凭,首先第一個要設置的參數(shù)稀拐,就是cluster.name,多個node的cluster.name如果一樣丹弱,才滿足組成一個集群的基本條件德撬。

這個cluster.name的默認值是elasticsearch铲咨,在生產(chǎn)環(huán)境中,一定要修改這個值蜓洪,否則可能會導致未知的node無端加入集群纤勒,造成集群運行異常。

而es中默認的discovery機制隆檀,就是zen discovery機制

zen discovery機制提供了unicast discovery集群發(fā)現(xiàn)機制摇天,集群發(fā)現(xiàn)時的節(jié)點間通信是依賴的transport module,也就是es底層的網(wǎng)絡通信模塊和協(xié)議恐仑。

es默認配置為使用unicast集群發(fā)現(xiàn)機制泉坐,以讓經(jīng)過特殊配置的節(jié)點可以組成一個集群,而不是隨便哪個節(jié)點都可以組成一個集群裳仆。但是默認配置下坚冀,unicast是本機,也就是localhost鉴逞,因此只能在一臺機器上啟動多個node來組成一個集群记某。雖然es還是會提供multicast plugin作為一個發(fā)現(xiàn)機制,但是已經(jīng)不建議在生產(chǎn)環(huán)境中使用了构捡。雖然我們可能想要multicast的簡單性液南,就是所有的node可以再接收到一條multicast ping之后就立即自動加入集群。但是multicast機制有很多的問題勾徽,而且很脆弱滑凉,比如網(wǎng)絡有輕微的調整,就可能導致節(jié)點無法發(fā)現(xiàn)對方喘帚。因此現(xiàn)在建議在生產(chǎn)環(huán)境中用unicast機制畅姊,提供一個es種子node作為中轉路由節(jié)點就可以了。

(0)master node吹由、data node若未、network.host

給集群規(guī)劃出專門的master eligible node和data node

master node,master eligible node倾鲫,data node

你配置的時候粗合,是配置多個node變成master eligible node,但是只是說乌昔,從這些master eligible node選舉一個node出來作為master node隙疚,其他master eligible node只是接下來有那個master node故障的時候,接替他的資格磕道,但是還是作為data node去使用的

一般建議master eligible node給3個即可:node.master: true供屉,node.data: false

剩下的node都設置為data node:node.master: false,node.data: true

但是如果一個小集群,就10個以內(nèi)的節(jié)點伶丐,那就所有節(jié)點都可以作為master eligible node以及data node即可悼做,超過10個node的集群再單獨拆分master和data node吧

如果你的節(jié)點數(shù)量小于10個,小集群撵割,那所有的node贿堰,就不要做額外的配置了辙芍,master eligible node啡彬,同時也是data node

默認情況下,es會將自己綁定到127.0.0.1上故硅,對于運行一個單節(jié)點的開發(fā)模式下的es是ok的庶灿。但是為了讓節(jié)點間可以互相通信以組成一個集群,需要讓節(jié)點綁定到一個ip地址上吃衅,非會換的地址往踢,一般會配置:network.host: 192.168.1.10。一旦我們配置了network.host徘层,那么es就會認為我們從開發(fā)模式遷移到生產(chǎn)模式峻呕,同時會啟用一系列的bootstrap check。

(1)ping

ping是一個node用discovery機制來發(fā)現(xiàn)其他node的一個過程

(2)unicast

unicast discovery集群發(fā)現(xiàn)機制是要求配置一個主機列表趣效,用來作為gossip(流言式)通信協(xié)議的路由器瘦癌。這些機器如果通過hostname來指定,那么在ping的時候會被解析為ip地址跷敬。unicast discovery機制最重要的兩個配置如下所示:

hosts:用逗號分割的主機列表

hosts.resolve_timeout:hostname被DNS解析為ip地址的timeout等待時長

簡單來說讯私,如果要讓多個節(jié)點發(fā)現(xiàn)對方并且組成一個集群,那么就得有一個中間的公共節(jié)點西傀,然后不同的節(jié)點就發(fā)送請求到這些公共節(jié)點斤寇,接著通過這些公共節(jié)點交換各自的信息,進而讓所有的node感知到其他的node存在拥褂,并且進行通信娘锁,最后組成一個集群。這就是基于gossip流言式通信協(xié)議的unicast集群發(fā)現(xiàn)機制饺鹃。

當一個node與unicast node list中的一個成員通信之后致盟,就會接收到一份完整的集群狀態(tài),這里會列出集群中所有的node尤慰。接著那個node再通過cluster state跟master通信馏锡,并且加入集群中。這就意味著伟端,我們的unicast list node是不需要列出集群中的所有節(jié)點的杯道。只要提供少數(shù)幾個node,比如3個,讓新的node可以連接上即可党巾。如果我們給集群中分配了幾個節(jié)點作為專門的master節(jié)點萎庭,那么只要列出我們那三個專門的master節(jié)點即可。用如下的配置即可:discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]齿拂。

cluster.name

node.name

network.host

discovery.zen.ping.unicast.hosts

(1)已經(jīng)初步配置好了驳规,各個節(jié)點,首先通過network.host綁定到了非回環(huán)的ip地址署海,從而可以跟其他節(jié)點通信

(2)通過discovery.zen.ping.unicast.hosts配置了一批unicast中間路由的node

(3)所有node都可以發(fā)送ping消息到路由node吗购,再從路由node獲取cluster state回來

(4)接著所有node會選舉出一個master

(5)所有node都會跟master進行通信,然后加入master的集群

(6)要求cluster.name必須一樣砸狞,才能組成一個集群

(7)node.name就標識出了每個node我們自己設置的一個名稱

image.png

(3)master選舉

在ping發(fā)現(xiàn)過程中捻勉,為集群選舉出一個master也是很重要的,es集群會自動完成這個操作刀森。這里建議設置discovery.zen.ping_timeout參數(shù)(默認是3s)踱启,如果因為網(wǎng)絡慢或者擁塞,導致master選舉超時研底,那么可以增加這個參數(shù)埠偿,確保集群啟動的穩(wěn)定性。

在完成一個集群的master選舉之后榜晦,每次一個新的node加入集群冠蒋,都會發(fā)送一個join request到master node,可以設置discovery.zen.join_timeout保證node穩(wěn)定加入集群芽隆,增加join的timeout等待時長浊服,如果一次join不上,默認會重試20次胚吁。

如果master node被停止了腕扶,或者自己宕機了半抱,那么集群中的node會再次進行一次ping過程,并且選舉出一個新的master炼幔。如果discovery.zen.master_election.ignore_non_master_pings設置為了true乃秀,那么會強制區(qū)分master候選節(jié)點跺讯,如果node的node.master設置為了false刀脏,還來發(fā)送ping請求參與master選舉愈污,那么這些node會被忽略掉,因為他們沒有資格參與茫陆。

discovery.zen.minimum_master_nodes參數(shù)用于設置對于一個新選舉的master擎析,要求必須有多少個master候選node去連接那個新選舉的master揍魂。而且還用于設置一個集群中必須擁有的master候選node棚瘟。如果這些要求沒有被滿足,那么master node就會被停止庄蹋,然后會重新選舉一個新的master迷雪。這個參數(shù)必須設置為我們的master候選node的quorum數(shù)量章咧。一般避免說只有兩個master候選node赁严,因為2的quorum還是2疼约。如果在那個情況下程剥,任何一個master候選節(jié)點宕機了,集群就無法正常運作了茎活。

(4)集群故障的探查

es有兩種集群故障探查機制载荔,第一種是通過master進行的懒熙,master會ping集群中所有的其他node,確保它們是否是存活著的普办。第二種,每個node都會去ping master node來確保master node是存活的衔蹲,否則就會發(fā)起一個選舉過程。

有下面三個參數(shù)用來配置集群故障的探查過程:

ping_interval:每隔多長時間會ping一次node舆驶,默認是1s

ping_timeout:每次ping的timeout等待時長是多長時間橱健,默認是30s

ping_retries:如果一個node被ping多少次都失敗了沙廉,就會認為node故障拘荡,默認是3次

(5)集群狀態(tài)更新

master node是集群中唯一一個可以對cluster state進行更新的node。master node每次會處理一個集群狀態(tài)的更新事件撬陵,應用這次狀態(tài)更新,然后將更新后的狀態(tài)發(fā)布到集群中所有的node上去蟋定。每個node都會接收publish message垢夹,ack這個message,但是不會應用這個更新而晒。如果master沒有在discovery.zen.commit_timeout指定的時間內(nèi)(默認是30s),從至少discovery.zen.minimum_master_nodes個節(jié)點獲取ack響應迅耘,那么這次cluster state change事件就會被reject贱枣,不會應用。

但是一旦在指定時間內(nèi)颤专,指定數(shù)量的node都返回了ack消息纽哥,那么cluster state就會被commit,然后一個message會被發(fā)送給所有的node栖秕。所有的node接收到那個commit message之后春塌,接著才會將之前接收到的集群狀態(tài)應用到自己本地的狀態(tài)副本中去。接著master會等待所有節(jié)點再次響應是否更新自己本地副本狀態(tài)成功簇捍,在一個等待超時時長內(nèi)只壳,如果接收到了響應,那么就會繼續(xù)處理內(nèi)存queue中保存的下一個更新狀態(tài)暑塑。discovery.zen.publish_timeout默認是30s吼句,這個超時等待時長是從plublish cluster state開始計算的。

(6)不因為master宕機阻塞集群操作

如果要讓集群正常運轉事格,那么必須有一個master惕艳,還有discovery.zen.minimum_master_nodes指定數(shù)量的master候選node,都在運行分蓖。discovery.zen.no_master_block可以控制當master宕機時尔艇,什么樣的操作應該被拒絕尔许。有下面兩個選項:

all:一旦master當即么鹤,那么所有的操作都會被拒絕

write:這是默認的選項,所有的寫操作都會被拒絕味廊,但是讀操作是被允許的

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蒸甜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子余佛,更是在濱河造成了極大的恐慌柠新,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辉巡,死亡現(xiàn)場離奇詭異恨憎,居然都是意外死亡,警方通過查閱死者的電腦和手機郊楣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門憔恳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人净蚤,你說我怎么就攤上這事钥组。” “怎么了今瀑?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵程梦,是天一觀的道長点把。 經(jīng)常有香客問我,道長屿附,這世上最難降的妖魔是什么郎逃? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮挺份,結果婚禮上衣厘,老公的妹妹穿的比我還像新娘。我一直安慰自己压恒,他們只是感情好影暴,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著探赫,像睡著了一般型宙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上伦吠,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天妆兑,我揣著相機與錄音,去河邊找鬼毛仪。 笑死搁嗓,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的箱靴。 我是一名探鬼主播腺逛,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼衡怀!你這毒婦竟也來了棍矛?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤抛杨,失蹤者是張志新(化名)和其女友劉穎够委,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怖现,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡茁帽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了屈嗤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片潘拨。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖恢共,靈堂內(nèi)的尸體忽然破棺而出战秋,到底是詐尸還是另有隱情,我是刑警寧澤讨韭,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布脂信,位于F島的核電站癣蟋,受9級特大地震影響,放射性物質發(fā)生泄漏狰闪。R本人自食惡果不足惜疯搅,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望埋泵。 院中可真熱鬧幔欧,春花似錦、人聲如沸丽声。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雁社。三九已至浴井,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間霉撵,已是汗流浹背磺浙。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留徒坡,地道東北人撕氧。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像喇完,于是被迫代替她去往敵國和親伦泥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

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