您好,登錄后才能下訂單哦!
今天小編給大家分享一下如何使用docker部署Elasticsearch集群的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
注意,6.x
版本已經不能通過 -epath.config
參數去指定配置文件的加載位置,文檔說明:
for the archive distributions, the config directory location defaults to$es_home/config
. the location of the >config directorycan be changed
via thees_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 做個加速安裝:
#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
數據目錄
#創建數據/日志目錄 這里我們部署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
,掛載如下:
volumes: - path/to/local/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
docker-compose.yml
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
通過容器管理通信。
如果需要多機部署,則將es
的transport.tcp.port: 9300
端口映射至宿主機xxxx
端口,discovery.zen.ping.unicast.hosts
填寫各主機代理的地址即可:
#比如其中一臺宿主機為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
創建并啟動服務
[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
即可查看集群狀態:
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
通過集群接口查看狀態
模擬主節點下線,集群開始選舉新的主節點,并對數據進行遷移,重新分片。
[root@localhost elasticsearch]# docker-compose stop elasticsearch_n0 stopping elasticsearch_n0 ... done
集群狀態(注意換個http端口 原主節點下線了),down掉的節點還在集群中,等待一段時間仍未恢復后就會被剔出
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
等待一段時間
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
[root@localhost elasticsearch]# docker-compose start elasticsearch_n0 starting elasticsearch_n0 ... done
等待一段時間
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 插件觀察
git clone git://github.com/mobz/elasticsearch-head.git cd elasticsearch-head npm install npm run start
集群狀態圖示更容易看出數據自動遷移的過程
1、集群正常 數據安全分布在3個節點上
2、下線 node1 主節點 集群開始遷移數據
遷移中
遷移完成
3、恢復 node1 節點
問題小記
elasticsearch watermark
部署完后創建索引發現有些分片處于 unsigned 狀態,是由于 elasticsearch watermark:low,high,flood_stage的限定造成的,默認硬盤使用率高于85%
就會告警,開發嘛,手動關掉好了,數據會分片到各節點,生產自行決斷。
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}}'
以上就是“如何使用docker部署Elasticsearch集群”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。