一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

云服務器|WEB服務器|FTP服務器|郵件服務器|虛擬主機|服務器安全|DNS服務器|服務器知識|Nginx|IIS|Tomcat|

服務器之家 - 服務器技術 - 服務器知識 - 使用docker快速部署Elasticsearch集群的方法

使用docker快速部署Elasticsearch集群的方法

2021-03-23 18:25big_cat 服務器知識

這篇文章主要介紹了使用docker快速部署Elasticsearch集群的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

本文將使用docker容器(使用docker-compose編排)快速部署elasticsearch 集群,可用于開發環境(單機多實例)或生產環境部署。

注意,6.x版本已經不能通過 -epath.config 參數去指定配置文件的加載位置,文檔說明:

for the archive distributions, the config directory location defaults to $es_home/config. the location of the >config directory can be changed via the es_path_conf environment variable as follows:
es_path_conf=/path/to/my/config ./bin/elasticsearch
alternatively, you can export the es_path_conf environment variable via the command line or via your shell profile.

即交給環境變量 es_path_conf 來設定了(官方文檔),單機部署多個實例且不使用容器的同學多多注意。

準備工作

安裝 docker & docker-compose

這里推進使用 daocloud 做個加速安裝:

?
1
2
3
4
5
6
7
8
9
10
11
12
#docker
curl -ssl https://get.daocloud.io/docker | sh
 
#docker-compose
curl -l \
https://get.daocloud.io/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` \
> /usr/local/bin/docker-compose
 
chmod +x /usr/local/bin/docker-compose
 
#查看安裝結果
docker-compose -v

數據目錄

?
1
2
3
4
5
6
7
8
9
10
#創建數據/日志目錄 這里我們部署3個節點
mkdir /opt/elasticsearch/data/{node0,nod1,node2} -p
mkdir /opt/elasticsearch/logs/{node0,nod1,node2} -p
cd /opt/elasticsearch
#權限我也很懵逼啦 給了 privileged 也不行 索性0777好了
chmod 0777 data/* -r && chmod 0777 logs/* -r
 
#防止jvm報錯
echo vm.max_map_count=262144 >> /etc/sysctl.conf
sysctl -p

docker-compse 編排服務

創建編排文件

vim docker-compose.yml

參數說明

- cluster.name=elasticsearch-cluster

集群名稱

- node.name=node0
- node.master=true
- node.data=true

節點名稱、是否可作為主節點、是否存儲數據

- bootstrap.memory_lock=true

鎖定進程的物理內存地址避免交換(swapped)來提高性能

- http.cors.enabled=true
- http.cors.allow-origin=*

開啟cors以便使用head插件

- "es_java_opts=-xms512m -xmx512m"

jvm內存大小配置

- "discovery.zen.ping.unicast.hosts=elasticsearch_n0,elasticsearch_n1,elasticsearch_n2"
- "discovery.zen.minimum_master_nodes=2"

由于5.2.1后的版本是不支持多播的,所以需要手動指定集群各節點的tcp數據交互地址,用于集群的節點發現failover,默認缺省9300端口,如設定了其它端口需另行指定,這里我們直接借助容器通信,也可以將各節點的9300映射至宿主機,通過網絡端口通信。

設定failover選取的quorum = nodes/2 + 1

當然,也可以掛載自己的配置文件,es鏡像的配置文件是/usr/share/elasticsearch/config/elasticsearch.yml,掛載如下:

?
1
2
volumes:
 - path/to/local/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro

docker-compose.yml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
version: '3'
services:
 elasticsearch_n0:
  image: elasticsearch:6.6.2
  container_name: elasticsearch_n0
  privileged: true
  environment:
   - cluster.name=elasticsearch-cluster
   - node.name=node0
   - node.master=true
   - node.data=true
   - bootstrap.memory_lock=true
   - http.cors.enabled=true
   - http.cors.allow-origin=*
   - "es_java_opts=-xms512m -xmx512m"
   - "discovery.zen.ping.unicast.hosts=elasticsearch_n0,elasticsearch_n1,elasticsearch_n2"
   - "discovery.zen.minimum_master_nodes=2"
  ulimits:
   memlock:
    soft: -1
    hard: -1
  volumes:
   - ./data/node0:/usr/share/elasticsearch/data
   - ./logs/node0:/usr/share/elasticsearch/logs
  ports:
   - 9200:9200
 elasticsearch_n1:
  image: elasticsearch:6.6.2
  container_name: elasticsearch_n1
  privileged: true
  environment:
   - cluster.name=elasticsearch-cluster
   - node.name=node1
   - node.master=true
   - node.data=true
   - bootstrap.memory_lock=true
   - http.cors.enabled=true
   - http.cors.allow-origin=*
   - "es_java_opts=-xms512m -xmx512m"
   - "discovery.zen.ping.unicast.hosts=elasticsearch_n0,elasticsearch_n1,elasticsearch_n2"
   - "discovery.zen.minimum_master_nodes=2"
  ulimits:
   memlock:
    soft: -1
    hard: -1
  volumes:
   - ./data/node1:/usr/share/elasticsearch/data
   - ./logs/node1:/usr/share/elasticsearch/logs
  ports:
   - 9201:9200
 elasticsearch_n2:
  image: elasticsearch:6.6.2
  container_name: elasticsearch_n2
  privileged: true
  environment:
   - cluster.name=elasticsearch-cluster
   - node.name=node2
   - node.master=true
   - node.data=true
   - bootstrap.memory_lock=true
   - http.cors.enabled=true
   - http.cors.allow-origin=*
   - "es_java_opts=-xms512m -xmx512m"
   - "discovery.zen.ping.unicast.hosts=elasticsearch_n0,elasticsearch_n1,elasticsearch_n2"
   - "discovery.zen.minimum_master_nodes=2"
  ulimits:
   memlock:
    soft: -1
    hard: -1
  volumes:
   - ./data/node2:/usr/share/elasticsearch/data
   - ./logs/node2:/usr/share/elasticsearch/logs
  ports:
   - 9202:9200

這里我們分別為node0/node1/node2開放宿主機的9200/9201/9202作為http服務端口,各實例的tcp數據傳輸用默認的9300通過容器管理通信。

如果需要多機部署,則將estransport.tcp.port: 9300端口映射至宿主機xxxx端口,discovery.zen.ping.unicast.hosts填寫各主機代理的地址即可:

?
1
2
3
4
5
6
7
#比如其中一臺宿主機為192.168.1.100
  ...
  - "discovery.zen.ping.unicast.hosts=192.168.1.100:9300,192.168.1.101:9300,192.168.1.102:9300"
  ...
ports:
 ...
 - 9300:9300

創建并啟動服務

?
1
2
3
4
5
6
7
8
9
10
11
[root@localhost elasticsearch]# docker-compose up -d
[root@localhost elasticsearch]# docker-compose ps
   name          command        state        ports      
--------------------------------------------------------------------------------------------
elasticsearch_n0  /usr/local/bin/docker-entr ...  up   0.0.0.0:9200->9200/tcp, 9300/tcp
elasticsearch_n1  /usr/local/bin/docker-entr ...  up   0.0.0.0:9201->9200/tcp, 9300/tcp
elasticsearch_n2  /usr/local/bin/docker-entr ...  up   0.0.0.0:9202->9200/tcp, 9300/tcp
 
#啟動失敗查看錯誤
[root@localhost elasticsearch]# docker-compose logs
#最多是一些訪問權限/jvm vm.max_map_count 的設置問題

查看集群狀態

192.168.20.6 是我的服務器地址

訪問http://192.168.20.6:9200/_cat/nodes?v即可查看集群狀態:

?
1
2
3
4
ip     heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.25.0.3      36     98 79  3.43  0.88   0.54 mdi    *   node0
172.25.0.2      48     98 79  3.43  0.88   0.54 mdi    -   node2
172.25.0.4      42     98 51  3.43  0.88   0.54 mdi    -   node1

驗證 failover

通過集群接口查看狀態

模擬主節點下線,集群開始選舉新的主節點,并對數據進行遷移,重新分片。

?
1
2
[root@localhost elasticsearch]# docker-compose stop elasticsearch_n0
stopping elasticsearch_n0 ... done

集群狀態(注意換個http端口 原主節點下線了),down掉的節點還在集群中,等待一段時間仍未恢復后就會被剔出

?
1
2
3
4
ip     heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.25.0.2      57     84  5  0.46  0.65   0.50 mdi    -   node2
172.25.0.4      49     84  5  0.46  0.65   0.50 mdi    *   node1
172.25.0.3                            mdi    -   node0

等待一段時間

?
1
2
3
ip     heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.25.0.2      44     84  1  0.10  0.33   0.40 mdi    -   node2
172.25.0.4      34     84  1  0.10  0.33   0.40 mdi    *   node1

恢復節點 node0

?
1
2
[root@localhost elasticsearch]# docker-compose start elasticsearch_n0
starting elasticsearch_n0 ... done

等待一段時間

?
1
2
3
4
ip     heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.25.0.2      52     98 25  0.67  0.43   0.43 mdi    -   node2
172.25.0.4      43     98 25  0.67  0.43   0.43 mdi    *   node1
172.25.0.3      40     98 46  0.67  0.43   0.43 mdi    -   node0

配合 head 插件觀察

?
1
2
3
4
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start

集群狀態圖示更容易看出數據自動遷移的過程

1、集群正常 數據安全分布在3個節點上

使用docker快速部署Elasticsearch集群的方法

2、下線 node1 主節點 集群開始遷移數據

遷移中

使用docker快速部署Elasticsearch集群的方法

遷移完成

使用docker快速部署Elasticsearch集群的方法

3、恢復 node1 節點

使用docker快速部署Elasticsearch集群的方法

問題小記

elasticsearch watermark

部署完后創建索引發現有些分片處于 unsigned 狀態,是由于 elasticsearch watermark:low,high,flood_stage的限定造成的,默認硬盤使用率高于85%就會告警,開發嘛,手動關掉好了,數據會分片到各節點,生產自行決斷。

?
1
2
3
curl -x put http://192.168.20.6:9201/_cluster/settings \
-h 'content-type':'application/json' \
-d '{"transient":{"cluster.routing.allocation.disk.threshold_enabled": false}}'

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://segmentfault.com/a/1190000018606414

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产成人久久久精品一区二区三区 | 国产亚洲自愉自愉 | 大陆男男gayxxxxvideo | 国产午夜精品福利 | avtt天堂在线 | 成人区精品一区二区毛片不卡 | 毛片免费视频观看 | 亚洲国产精品无码中文字满 | 东京干福利 | 4455永久在线视频观看 | 亚洲欧美日韩成人一区在线 | 爱福利视频一区 | 小小水蜜桃视频高清在线播放 | 免费午夜影片在线观看影院 | 美女脱得一二净无内裤全身的照片 | 好湿好紧太硬了我太爽了网站 | 久久中文字幕综合不卡一二区 | 国产激情久久久久影院小草 | 亚洲热在线视频 | 成人小视频在线免费观看 | 禁止的爱善良的未删减版hd | 狠狠插综合网 | 97精品国产高清在线看入口 | 999jjj在线播放 | 欧美日韩一区二区三在线 | 99国产高清久久久久久网站 | 肉色欧美久久久久久久蜜桃 | 99久久精品国产片久人 | 欧美一区二区三区高清不卡tv | 韩国黄色片网站 | 国产麻豆流白浆在线观看 | 亚洲AV无码偷拍在线观看 | 精品欧美日韩一区二区三区 | 亚洲免费视频一区 | 成人蜜桃网| 狠狠燥 | 午夜免费无码福利视频麻豆 | 欧美一级xxx | 国产福利资源 | 国产久热香蕉在线观看 | 国产播放器一区 |