一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

如何使用一個(gè)IP搭建ES集群——Docker如你所愿

 openlabzeng 2017-01-02

版權(quán)聲明:本文為CSDN博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處(@http://blog.csdn.net/gamer_gyt


隨著業(yè)務(wù)的發(fā)展,elasticsearch部署在一臺(tái)機(jī)子上顯然會(huì)不夠用,那么我們?cè)撊绾翁幚砟?,幸運(yùn)的elasticsearch支持橫向擴(kuò)展,即集群模式,這樣無(wú)論數(shù)據(jù)量增長(zhǎng)多大,我們只需要擴(kuò)展我們的es集群即可。


背景說(shuō)明


  • Ubuntu16.04 

  • Docker 1.9 

  • Elasticsearch 2.4


假設(shè)現(xiàn)在就一臺(tái)服務(wù)器,我們要用這臺(tái)服務(wù)器來(lái)部署一個(gè)ES的集群,那么最好的解決辦法便是Docker了,我們可以利用Docker啟動(dòng)兩個(gè)容器,在兩個(gè)容器內(nèi)各部署一個(gè)ElasticSearch,總而組成一個(gè)2個(gè)節(jié)點(diǎn)的ES集群


  • Linux下Docker的部署:

  • http://blog.csdn.net/gamer_gyt/article/details/52769294 

  • 終端安裝Docker:

  • http://bbs.csdn.net/topics/392063910 

  • 我的Docker專(zhuān)欄:

  • http://blog.csdn.net/column/details/13159.html


Docker網(wǎng)絡(luò)模式解釋


1.host模式


眾所周知,Docker使用了Linux的Namespaces技術(shù)來(lái)進(jìn)行資源隔離,如PID Namespace隔離進(jìn)程,Mount Namespace隔離文件系統(tǒng),Network Namespace隔離網(wǎng)絡(luò)等。一個(gè)Network Namespace提供了一份獨(dú)立的網(wǎng)絡(luò)環(huán)境,包括網(wǎng)卡、路由、Iptable規(guī)則等都與其他的Network Namespace隔離。一個(gè)Docker容器一般會(huì)分配一個(gè)獨(dú)立的Network Namespace。但如果啟動(dòng)容器的時(shí)候使用host模式,那么這個(gè)容器將不會(huì)獲得一個(gè)獨(dú)立的Network Namespace,而是和宿主機(jī)共用一個(gè)Network Namespace。容器將不會(huì)虛擬出自己的網(wǎng)卡,配置自己的IP等,而是使用宿主機(jī)的IP和端口。


例如,我們?cè)?0.10.101.105/24的機(jī)器上用host模式啟動(dòng)一個(gè)含有web應(yīng)用的Docker容器,監(jiān)聽(tīng)tcp80端口。當(dāng)我們?cè)谌萜髦袌?zhí)行任何類(lèi)似ifconfig命令查看網(wǎng)絡(luò)環(huán)境時(shí),看到的都是宿主機(jī)上的信息。而外界訪(fǎng)問(wèn)容器中的應(yīng)用,則直接使用10.10.101.105:80即可,不用任何NAT轉(zhuǎn)換,就如直接跑在宿主機(jī)中一樣。但是,容器的其他方面,如文件系統(tǒng)、進(jìn)程列表等還是和宿主機(jī)隔離的。


2.container模式


在理解了host模式后,這個(gè)模式也就好理解了。這個(gè)模式指定新創(chuàng)建的容器和已經(jīng)存在的一個(gè)容器共享一個(gè)Network Namespace,而不是和宿主機(jī)共享。新創(chuàng)建的容器不會(huì)創(chuàng)建自己的網(wǎng)卡,配置自己的IP,而是和一個(gè)指定的容器共享IP、端口范圍等。同樣,兩個(gè)容器除了網(wǎng)絡(luò)方面,其他的如文件系統(tǒng)、進(jìn)程列表等還是隔離的。兩個(gè)容器的進(jìn)程可以通過(guò)lo網(wǎng)卡設(shè)備通信。


3.none模式


這個(gè)模式和前兩個(gè)不同。在這種模式下,Docker容器擁有自己的Network Namespace,但是,并不為Docker容器進(jìn)行任何網(wǎng)絡(luò)配置。也就是說(shuō),這個(gè)Docker容器沒(méi)有網(wǎng)卡、IP、路由等信息。需要我們自己為Docker容器添加網(wǎng)卡、配置IP等。


4.bridge模式


bridge模式是Docker默認(rèn)的網(wǎng)絡(luò)設(shè)置,此模式會(huì)為每一個(gè)容器分配N(xiāo)etwork Namespace、設(shè)置IP等,并將一個(gè)主機(jī)上的Docker容器連接到一個(gè)虛擬網(wǎng)橋上



兩個(gè)容器以組播方式創(chuàng)建ES集群


組播配置示例如下,單播配置在最下邊,使用時(shí)只需替換加幾行配置即可


1.下載Ubuntu最近版鏡像


sudo docker pull ubuntu


2.配置基本環(huán)境


啟動(dòng)容器,進(jìn)入容器內(nèi)安裝基本環(huán)境vim,Java,和elasticsearch


sudo docker run -it -d –name esc1 ubuntu:latest 

sudo docker exec -it esc1 /bin/bash 

apt-get install vim 

apt install openjdk-8-jre


然后安裝es,下載安裝包(閱讀原文獲取下載鏈接


將其拷貝到docker內(nèi),安裝


dpkg -i elasticsearch-2.4.0.deb


至此基本環(huán)境已經(jīng)準(zhǔn)備的差不多了,然后便是退出容器,stop 容器,然后進(jìn)行commit 保存成兩個(gè)容器


sudo docker commit esc1 es1:1.0 

sudo docker commit esc1 es2:1.0


最后查看鏡像如圖所示: 



3.es環(huán)境配置


分別啟動(dòng)兩個(gè)容器


sudo docker run -it -d -p 9201:9201 -p 9301:9301 -p 5001:5001 -p 5602:5602 –name esc1 es1:1.0 

sudo docker run -it -d -p 9200:9200 -p 9300:9300 -p 5000:5000 -p 5601:5601 –name esc2 es2:1.0


進(jìn)入兩個(gè)容器進(jìn)行配置elasticsearch.ymal文件 


esc1:


cluster.name: xdstar

node.name: node-1

node.master: false

node.data: true

network.host: 0.0.0.0

http.port: 9201

transport.tcp.port: 9301


esc2:


cluster.name: xdstar

node.name: node-2

node.master: true

node.data: true

network.host: 0.0.0.0

http.port: 9200

transport.tcp.port: 9300


  • cluster.name:集群名字,配置必須一樣 

  • node.name:每個(gè)節(jié)點(diǎn)的名字,不能一樣 

  • node.master: true 代表可以被選舉為主節(jié)點(diǎn),false代表不能被選舉為主節(jié)點(diǎn)(這里我們?cè)O(shè)置esc2為主節(jié)點(diǎn)) 

  • ndoe.data:代表是否可以存儲(chǔ)數(shù)據(jù) 

  • network.host:表示訪(fǎng)問(wèn)的ip,0.0.0.0表示可以以IP訪(fǎng)問(wèn)或者localhost,127.0.0.1 

  • network.port:訪(fǎng)問(wèn)的端口


啟動(dòng)Elasticsearch


service elasticsearch start


細(xì)心的朋友會(huì)發(fā)現(xiàn)容器的啟動(dòng)端口轉(zhuǎn)發(fā)端口不一致,這是因?yàn)?,這里啟動(dòng)Docker容器默認(rèn)采用的橋接,和主機(jī)共享端口了,所以?xún)烧叨丝诓荒芤恢?,要不然?huì)重復(fù)


啟動(dòng)完es集群,瀏覽器輸入 https:192.168.1.250:9200/_plugin/head 


這里我安裝了head插件,插件安裝,參考之前的一篇文章,里邊有講到:

http://blog.csdn.net/gamer_gyt/article/details/52654263



4.安裝logstash配置rsyslog解析文件


logstash 2.4版本(閱讀原文獲取下載鏈接


更多版本:https://www./downloads/past-releases


dpkg -i logstash-all-plugins-2.4.0_all.deb


然后進(jìn)入配置文件目錄


cd /etc/logstash/conf.d 

vim rsyscon.conf


添加以下內(nèi)容


input {

   syslog{

    port => 5000

    type => syslog

  }

}

output {

  stdout {

    codec=> rubydebug

  }

  elasticsearch {

    hosts => ['localhost:9200']

  }

}


啟動(dòng)logstash


service logstash start


5.本地配置,產(chǎn)生syslog日志


編輯rsyslog的配置文件:


vim /etc/rsyslog.conf


最后添加


 *.*  @localhost:5000

 *.*  @@localhost:5000


重啟rsyslog服務(wù)


service rsyslog restart


ssh 本地,產(chǎn)生日志


ssh localhost


這個(gè)時(shí)候觀(guān)察elasticsearch界面: 



ES集群的多播與單播


以上的集群是采用組播的方式來(lái)構(gòu)建的,組播就是通過(guò)在你的網(wǎng)絡(luò)中發(fā)送UDP的ping請(qǐng)求以發(fā)現(xiàn)節(jié)點(diǎn),其它Elasticsearch會(huì)收到這些ping請(qǐng)求并且進(jìn)行響應(yīng),這樣隨后就會(huì)形成一個(gè)集群。 


多播對(duì)于開(kāi)發(fā)環(huán)境是很好的,你不需要做什么事情,打開(kāi)一些節(jié)點(diǎn),他們自然的會(huì)發(fā)現(xiàn)對(duì)方形成一個(gè)集群。 


正是因?yàn)檫@種易用性,你在生產(chǎn)環(huán)境中必須禁掉它。否在你得到的結(jié)果就是一個(gè)節(jié)點(diǎn)意外的加入到了你的生產(chǎn)環(huán)境,因?yàn)樗麄兪盏搅艘粋€(gè)錯(cuò)誤的組播信號(hào)。對(duì)于組播本身并沒(méi)有錯(cuò)。組播會(huì)導(dǎo)致一些愚蠢的問(wèn)題,并且導(dǎo)致集群變的脆弱(例如:一個(gè)網(wǎng)絡(luò)工程師正在搗鼓網(wǎng)絡(luò),而沒(méi)有告訴你,你會(huì)發(fā)現(xiàn)所有的節(jié)點(diǎn)突然發(fā)現(xiàn)不了對(duì)方了)。 


在生產(chǎn)環(huán)境中,建議使用單播代替組播,也就是說(shuō)為Elasticsearch提供一些它應(yīng)該去嘗試連接的節(jié)點(diǎn)列表。一旦這個(gè)節(jié)點(diǎn)聯(lián)系到組播列表中的一員,它就會(huì)得到整個(gè)集群所有節(jié)點(diǎn)的狀態(tài),然后它會(huì)聯(lián)系master節(jié)點(diǎn),并加入集群。 


這意味著你的單播列表不需要包含你的集群中的所有節(jié)點(diǎn),它只需要包含足夠一個(gè)新節(jié)點(diǎn)聯(lián)系上其中一個(gè)并且說(shuō)上話(huà)就ok了。


ES 是一個(gè) P2P 類(lèi)型(使用 gossip 協(xié)議)的分布式系統(tǒng),除了集群狀態(tài)管理以外,其他所有的請(qǐng)求都可以發(fā)送到集群內(nèi)任意一臺(tái)節(jié)點(diǎn)上,這個(gè)節(jié)點(diǎn)可以自己找到需要轉(zhuǎn)發(fā)給哪些節(jié)點(diǎn),并且直接跟這些節(jié)點(diǎn)通信。 


所以,從網(wǎng)絡(luò)架構(gòu)及服務(wù)配置上來(lái)說(shuō),構(gòu)建集群所需要的配置極其簡(jiǎn)單。在 Elasticsearch 2.0 之前,無(wú)阻礙的網(wǎng)絡(luò)下,所有配置了相同 cluster.name 的節(jié)點(diǎn)都自動(dòng)歸屬到一個(gè)集群中。 


2.0 版本之后,基于安全的考慮,Elasticsearch 稍作了調(diào)整,避免開(kāi)發(fā)環(huán)境過(guò)于隨便造成的麻煩。


ES 從 2.0 版本開(kāi)始,默認(rèn)的自動(dòng)發(fā)現(xiàn)方式改為了單播(unicast)方式。配置里提供幾臺(tái)節(jié)點(diǎn)的地址,ES 將其視作 gossip router 角色,借以完成集群的發(fā)現(xiàn)。由于這只是 ES 內(nèi)一個(gè)很小的功能,所以 gossip router 角色并不需要單獨(dú)配置,每個(gè) ES 節(jié)點(diǎn)都可以擔(dān)任。所以,采用單播方式的集群,各節(jié)點(diǎn)都配置相同的幾個(gè)節(jié)點(diǎn)列表作為 router 即可。 


此外,考慮到節(jié)點(diǎn)有時(shí)候因?yàn)楦哓?fù)載,慢 GC 等原因可能會(huì)有偶爾沒(méi)及時(shí)響應(yīng) ping 包的可能,一般建議稍微加大 Fault Detection 的超時(shí)時(shí)間。 


同樣基于安全考慮做的變更還有監(jiān)聽(tīng)的主機(jī)名?,F(xiàn)在默認(rèn)只監(jiān)聽(tīng)本地 lo 網(wǎng)卡上。所以正式環(huán)境上需要修改配置為監(jiān)聽(tīng)具體的網(wǎng)卡。


network.host: '0.0.0.0' 

discovery.zen.minimum_master_nodes: 3

discovery.zen.ping.timeout: 100s

discovery.zen.fd.ping_timeout: 100s

discovery.zen.ping.unicast.hosts: ['10.19.0.97','10.19.0.98','10.19.0.99','10.19.0.100']


上面的配置中,兩個(gè) timeout 可能會(huì)讓人有所迷惑。這里的 fd 是 fault detection 的縮寫(xiě)。也就是說(shuō): 


  • discovery.zen.ping.timeout 參數(shù)僅在加入或者選舉 master 主節(jié)點(diǎn)的時(shí)候才起作用; 

  • discovery.zen.fd.ping_timeout 參數(shù)則在穩(wěn)定運(yùn)行的集群中,master 檢測(cè)所有節(jié)點(diǎn),以及節(jié)點(diǎn)檢測(cè) master 是否暢通時(shí)長(zhǎng)期有用。 


既然是長(zhǎng)期有用,自然還有運(yùn)行間隔和重試的配置,也可以根據(jù)實(shí)際情況調(diào)整:


discovery.zen.fd.ping_interval: 10s

discovery.zen.fd.ping_retries: 10


單播配置


以上展示為組播方式,單播配置相對(duì)來(lái)說(shuō)只需要在配置文件里加幾行即可 


esc1:


discovery.zen.ping.unicast.hosts: ['localhost:9300','localhost:9301']


esc2:


discovery.zen.ping.unicast.hosts: ['localhost:9300','localhost:9301']


PS:我這里嘗試了很多次,增加了


discovery.zen.minimum_master_nodes: 3

discovery.zen.ping.timeout: 100s

discovery.zen.fd.ping_timeout: 100s


這三個(gè)屬性之后集群并不能啟動(dòng),所以這里只設(shè)置了discovery.zen.ping.unicast.hosts屬性。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多

    久久99热成人网不卡| 国产一区日韩二区欧美| 一区二区三区欧美高清| 少妇特黄av一区二区三区| 国产丝袜美女诱惑一区二区| 精品视频一区二区不卡| 欧洲精品一区二区三区四区| 日本不卡在线视频你懂的 | 亚洲超碰成人天堂涩涩| 草草草草在线观看视频| 日韩欧美一区二区久久婷婷| 亚洲精品深夜福利视频| 99久久精品午夜一区二区| 欧美激情区一区二区三区| 婷婷伊人综合中文字幕| 国产精品大秀视频日韩精品| 亚洲国产欧美精品久久| 国产亚洲欧美另类久久久| 国产成人国产精品国产三级| 久久久精品区二区三区| 人妻乱近亲奸中文字幕| 欧美一区二区日韩一区二区| 久久这里只精品免费福利| 亚洲伊人久久精品国产| 欧美激情床戏一区二区三| 国产高清精品福利私拍| 亚洲精品成人福利在线| 手机在线观看亚洲中文字幕| 久久99夜色精品噜噜亚洲av| 国产又猛又黄又粗又爽无遮挡 | 国产自拍欧美日韩在线观看| 久久大香蕉一区二区三区| 色哟哟国产精品免费视频| 国产精品久久久久久久久久久痴汉| 久久女同精品一区二区| 国产精品久久三级精品| 亚洲精品国产美女久久久99| 久热在线视频这里只有精品| 精品国产av一区二区三区不卡蜜 | 亚洲精品小视频在线观看| 中文字幕av诱惑一区二区|