elasticsearch 小總結
elasticsearch 小總結
0. 起因
距離初次寫關於es的文章https://blog.csdn.net/aca_jingru/article/details/44488703 已經過去4年多了。。有必要更新一下了。把小tips總結一下。比較淺顯。
1. 安裝規劃配置
規劃分軟體配置和硬體配置,
首先硬體,記憶體方面推薦是8g 的heap size ,那麼整個系統就考慮16G的了。
現在用雲的話不夠就可以升級了,但是還是要憑經驗規劃好,重啟一次節點可是非常耗時的。硬碟推薦ssd或者高效雲盤。
硬碟最好做lvm,這樣可以無感擴磁碟。es是支援對資料節點多目錄的,但是沒試過,不知道有沒有什麼坑。
作業系統建議centos7 ,都9102年了,你再用個centos6,那就真的無話可說了。
jdk方面openjdk8 就可以很順暢的跑了。jdk的gc 不要亂改。這是官方一再強調的。
軟體方面,詳細配置可以看官網https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html
最後貼一個es maser節點的配置
cluster.name: my-ems node.name: master-1 path.data: /vdb/lib/elasticsearch path.logs: /vdb/log/elasticsearch http.host: 0.0.0.0 discovery.zen.ping.unicast.hosts: ["ip1,"ip2"] transport.host: 0.0.0.0 node.master: true node.data: false discovery.zen.minimum_master_nodes: 2
資料節點跟他類似,不說了。
2. es滾動升級
這個非常重要,總不可能中斷服務升級吧。
英文原文https://www.elastic.co/guide/en/elasticsearch/reference/current/rolling-upgrades.html
適用於升級的情況,主要點是在關節點前禁止shard allocation
預設情況下,關了es節點,經過index.unassigned.node_left.delayed_timeout(預設是一分鐘) 後會進行
curl -X PUT "localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d' { "persistent": { "cluster.routing.allocation.enable": "primaries" } } '
stop elasticsearch, 然後 設定
curl -X PUT "localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d' { "persistent": { "cluster.routing.allocation.enable": null } } '
注意要等一個節點完全起來了再操作另外節點,不然可是會有丟資料的情況。
4. data節點master節點分離
實踐下來最好分開,這樣每次node節點重啟並不會發生master 選舉的情況,而且master 和data 節點都要用heap 記憶體,之前的實踐來看如果記憶體不夠大,會頻繁gc ,影響master效率。
5. 運維工具使用
salt,ansible,fabric,puppet,chef等 這種挑一種熟練掌握就行了,官方提供了3個解決方案,https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html ,puppet,chef,ansible 。個人覺得有點重,喜歡自己寫。
6. 佇列使用
之前還是使用redis, 確實方便除錯,但是現在是9102年,不用kafka這種神器有點說不過去了,
kafka 的使用上面我的經驗是手動建立topic ,指定大一點的分割槽。為了ha 最好是3節點的叢集。硬體無特別注意之處。kafka對硬體的要求真的很小。
redis的話很容易爆記憶體。redis也沒啥特別好的ha方案。
7. 監控
kibana 自帶的一個es的監控非常好用,可以看index速度,jdk gc情況。
另外如果使用了kafka的話最好接入promethues+grafana+alertmanager 。