Docker搭建es集群

why use docker

  1. 學(xué)習(xí)docker
  2. 快,配置和宿主機環(huán)境無關(guān),很方便的遷移埋市,也就是說,看我這篇文章的人命贴,能在幾分鐘內(nèi)啟動一個es集群

requirement

  1. 需要對docker有一定的了解道宅,看這篇文章的人食听,肯定滿足這個要求
  2. 對es有一定的了解

start

首先我們要明確一點的是,我們使用docker來啟動es污茵,我們需要將es的配置以及存儲路徑映射到宿主機上樱报,不然我們無法修改es配置或容器關(guān)閉后會丟失存儲的內(nèi)容。

所以省咨,我們第一步做的事是肃弟,建立每個es節(jié)點的配置文件以及存儲路徑。就像以下的文件目錄結(jié)構(gòu)零蓉。


es1.yml內(nèi)容如下

cluster.name: elasticsearch-cluster
node.name: es-node1
network.bind_host: 0.0.0.0
network.publish_host: _eth0_
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.seed_hosts: ["ES01:9300","ES02:9301","ES03:9302"]
cluster.initial_master_nodes: ["es-node1","es-node2","es-node3"]
discovery.zen.minimum_master_nodes: 1

對應(yīng)的es2.yml和es3.yml只需要修改node.name為es-node2es-node3即可笤受。

接下來就是本文最核心的部分了,使用docker-compose啟動es集群敌蜂。

在任意目錄下箩兽,新建一個docker-compose.yml或docker-compose.yaml文件。(必須為這個名字)

文件內(nèi)容如下

version: '3.7'
services:
  es1:
    image: es:4.0
    container_name: ES01
    environment:
      - ES_JAVA_OPTS=-Xms256m -Xmx256m
    ports:
      - "9200:9200"
      - "9300:9300"
    volumes:
      - /Users/chengchaojie/docker/es/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - /Users/chengchaojie/docker/es/data1:/usr/share/elasticsearch/data
    networks:
      - es-net
  es2:
    image: es:4.0
    container_name: ES02
    environment:
      - ES_JAVA_OPTS=-Xms256m -Xmx256m
    ports:
      - "9201:9200"
      - "9301:9300"
    volumes:
      - /Users/chengchaojie/docker/es/config/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - /Users/chengchaojie/docker/es/data2:/usr/share/elasticsearch/data
    networks:
      - es-net
  es3:
    image: es:4.0
    container_name: ES03
    environment:
      - ES_JAVA_OPTS=-Xms256m -Xmx256m
    ports:
      - "9202:9200"
      - "9302:9300"
    volumes:
      - /Users/chengchaojie/docker/es/config/es3.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - /Users/chengchaojie/docker/es/data3:/usr/share/elasticsearch/data
    networks:
      - es-net
  es-head:
    image: tobias74/elasticsearch-head
    ports:
      - "9100:9100"

networks:
  es-net:
    driver: bridge

es:4.0替換為你本地所擁有的的es鏡像章喉,把Users/chengchaojie/docker替換為你配置所在的路徑

然后運行docker-compose up -d就運行了一個es集群以及es-head應(yīng)用,可以看到以下輸出

Creating network "es_compose_es-net" with driver "bridge"
Creating network "es_compose_default" with the default driver
Creating ES01                 ... done
Creating ES03                 ... done
Creating ES02                 ... done
Creating es_compose_es-head_1 ... done

相對的,關(guān)閉只需要在同一個目錄下運行docker-compose down即可

最后打開http://localhost:9100/查看你的es集群狀態(tài)

看到上面的圖汗贫,其實我還真不確認是不是集群部署成功,那么創(chuàng)建一個索引試試

curl -X PUT "localhost:9200/twitter?pretty" -H 'Content-Type: application/json' -d'
{
    "settings" : {
        "index" : {
            "number_of_shards" : 3,
            "number_of_replicas" : 2
        }
    }
}
'

可以看到es-head界面變?yōu)?/p>

就代表成功了秸脱。

文章到此還沒結(jié)束落包,我們學(xué)習(xí)es最主要的是想用到它的全文索引功能,默認的es不支持中文分詞摊唇,所以我們需要安裝一個中文的分詞器-ik分詞器咐蝇。

我們可以有兩種方式來實現(xiàn)它。

第一種巷查,通過docker exec -it <container> bash 進入容器有序,然后使用安裝命令安裝分詞器,然后使用docker commit <container> [repo:tag]把該容器固化為一個新的鏡像岛请。

第二種旭寿,我們通過Dockerfile來構(gòu)建這個安裝了ik的es鏡像。這也是我選擇的方式崇败,感覺專業(yè)一點盅称。

首先創(chuàng)建一個目錄,在這個目錄下建立一個Dockerfile文件后室。內(nèi)容如下

FROM docker.elastic.co/elasticsearch/elasticsearch:7.3.1
COPY ik/ /usr/share/elasticsearch/plugins/ik/

從上面的代碼可以看出給es安裝插件的原理很簡單微渠,其實就是把插件的內(nèi)容拷貝到plugins目錄下即可。

接下來我們在Dockerfile同級目錄下新建ik目錄咧擂,然后在ik目錄中通過wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-6.3.0.zip下載ik插件逞盆。

注意,把6.3.0替換為你es鏡像的版本

然后unzip elasticsearch-analysis-ik-6.3.0.zip && rm elasticsearch-analysis-ik-6.3.0.zip

最后通過docker build -t es:4.0 .構(gòu)建新的鏡像松申,使用該鏡像的名字替換到上面的docker-compose.yml中的鏡像名云芦。

conclusion

我相信這種方式比傳統(tǒng)搭建并且重復(fù)啟動一個es集群方便多了俯逾,不過前提是你得稍微了解一下docker。不過docker或者云原生是未來大勢所趨舅逸,大家還是需要掌握的桌肴。
我相信未來的開發(fā)是配置即代碼的。在云的環(huán)境下琉历,以后這些中間件或者我們自己項目的配置部署運行我們開發(fā)工作的一部分坠七,運維系統(tǒng)只需要執(zhí)行docker-compose up這些類似的指令即可。

reference

docker-compose文件結(jié)構(gòu)
docker常用命令
ik插件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末旗笔,一起剝皮案震驚了整個濱河市彪置,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蝇恶,老刑警劉巖拳魁,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異撮弧,居然都是意外死亡潘懊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門贿衍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來授舟,“玉大人,你說我怎么就攤上這事贸辈∈褪鳎” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵裙椭,是天一觀的道長。 經(jīng)常有香客問我署浩,道長揉燃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任筋栋,我火速辦了婚禮炊汤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘弊攘。我一直安慰自己抢腐,他們只是感情好,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布襟交。 她就那樣靜靜地躺著迈倍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捣域。 梳的紋絲不亂的頭發(fā)上啼染,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天宴合,我揣著相機與錄音,去河邊找鬼迹鹅。 笑死卦洽,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的斜棚。 我是一名探鬼主播阀蒂,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼弟蚀!你這毒婦竟也來了蚤霞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤粗梭,失蹤者是張志新(化名)和其女友劉穎争便,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體断医,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡滞乙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鉴嗤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斩启。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖醉锅,靈堂內(nèi)的尸體忽然破棺而出兔簇,到底是詐尸還是另有隱情,我是刑警寧澤硬耍,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布垄琐,位于F島的核電站,受9級特大地震影響经柴,放射性物質(zhì)發(fā)生泄漏狸窘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一坯认、第九天 我趴在偏房一處隱蔽的房頂上張望翻擒。 院中可真熱鬧,春花似錦牛哺、人聲如沸陋气。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巩趁。三九已至,卻和暖如春淳附,著一層夾襖步出監(jiān)牢的瞬間晶渠,已是汗流浹背凰荚。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留褒脯,地道東北人便瑟。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像番川,于是被迫代替她去往敵國和親到涂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355