這天因為某件工作來到了es官網某個參數配置相關的頁面,注意到了下圖圓圈里的“Dynamic”:
鏈接:https://www.elastic.co/guide/en/elasticsearch/reference/8.1/modules-cluster.html#misc-cluster-settings
顯然這是對配置項的一個描述,點擊鏈接,就能了解到集群/節點的配置分為動態和靜態:
頁面上的內容很好懂,鏈接在這里:
https://www.elastic.co/guide/en/elasticsearch/reference/8.1/settings.html#cluster-setting-types,然后我這里還是自己看懂多少寫多少了,隨意一點。
dynamic settings,動態配置項,就是可以通過cluster update settings API(集群設置更新API)、在運行著的集群上做修改的那些配置項;這些配置項也可以在集群未打開或關閉的狀態下通過elasticsearch.yml來配置。
通過cluster update settings API更新的配置項,
可以是永久的(persistent),也可以是臨時的(transient)。
永久的會在集群重啟后仍然有效;臨時的在集群下次重啟后即失效;
還可以用給null的方式調用cluster update settings API來重置永久/臨時配置項;
這是8.1版本的文檔,頁面上面說到已經不再推薦使用臨時配置項了,因為如果集群不夠穩定,臨時配置項就會失效,這經常導致一個“用戶實際上并沒有得到自己想要的集群”這樣的狀態;文檔上還給了臨時配置項的遷移指引。
如果實際操作中通過不同的方式修改了同一個配置項,那么es按這個優先級生效:
1. 臨時配置
2. 永久配置
3. 配置文件elasticsearch.yml
4. 默認值
這里頁面上給出了一些建議:
如果使用Elasticsearch Service,使用user settings特性來配置集群,這樣Elasticsearch Service會自動拒絕不安全的配置操作;
如果是從本地硬件上運行Elasticsearch,那么建議使用cluster update settings API來配置動態配置項,配置文件elasticsearch.yml只用來管理集群/節點的靜態配置項,
因為API不需要重啟,并且保證所有節點上的配置一致。
static settings就是那些只能在集群還沒啟動或者已經關閉時,通過elasticsearch.yml來配置的項,必須在集群的每一個節點上都做配置。
好了,現在看看這個cluster update settings API怎么用。頁面在這里:
鏈接是這:
https://www.elastic.co/guide/en/elasticsearch/reference/8.1/cluster-update-settings.html
【先說如何查詢得事情】
頁面上沒說如何查詢,問了下deepseek,試試這樣:
curl?-k?-XGET? -H "Content-Type: application/json"?\
"https://localhost:9200/_cluster/settings?include_defaults=true&flat_settings=true&pretty"
這是把所有的配置都打出來了啊,讀起來不友好,假設想要看"cluster.max_shards_per_node"是個什么值,加上-s,還有grep試試:
curl?-s -k?-XGET? -H "Content-Type: application/json"?\
"https://localhost:9200/_cluster/settings?include_defaults=true&flat_settings=true&pretty" | grep "cluster.max_shards_per_node"
這效果可以,雖然這個查詢方式無法直觀得顯示是個永久配置or臨時配置or系統默認值,但這個不難,先繼續。
上邊命令里的“include_defaults=true&flat_settings=true”意味著什么,頁面上也說了:
【如何更新某個配置項】
還是以cluster.max_shards_per_node為例吧,假設要永久得改為2000:
curl?-s -k?-XPUT?https://localhost:9200/_cluster/settings?flat_settings=true&pretty" \
-H 'Content-Type: application/json' -d' \
{
????"persistent" : {
???????????"cluster.max_shards_per_node" : 2000
????}
}'
查一下看看,生效了:
不打印默認值看看,很穩:
curl?-s -k?-XGET? ?-H "Content-Type: application/json"?\
"https://localhost:9200/_cluster/settings?flat_settings=true&pretty"
歐。