一、前端通過 Rest 接口提交配置修改請求:
接口:[PUT] /api/v1/clusters/{clustername}
請求:
[ { "Clusters": { "desired_config": [ { "type": "zoo.cfg", "tag": "version1488444158642", "properties": { "autopurge.purgeInterval": "24", "autopurge.snapRetainCount": "30", "clientPort": "2181", "dataDir": "/data01/hadoop/zookeeper", "initLimit": "10", "syncLimit": "5", "tickTime": "2000" }, "service_config_version_note": "Initial configurations for ZooKeeper" } ... ] } } ]
二、服務端操作數據庫
1、clusterconfig 表記錄(參考 Ambari Server 配置多版本功能實現分析)
2、serviceconfig 表記錄(參考 Ambari Server 配置多版本功能實現分析)
3、serviceconfigmapping 表記錄(參考 Ambari Server 配置多版本功能實現分析)
4、clusterconfigmapping 表記錄,標記當前期望的配置
三、周期性判斷:期望配置和實際配置是否一致,如不一致則提示用戶更新
期望配置:clusterconfigmapping 表,selected=1 的記錄為 當前期望的配置
實際配置:存儲在 Agent 端 /var/lib/ambari-agent/data/ 目錄下,Agent 通過心跳 ComponentStatus 字段,匯報當前主機的實際配置
注意點:
1、期望配置和實際配置的對比邏輯:ConfigHelper.java 類的 isStaleConfigs()方法
2、集成服務文件 metainfo.xml 的 configuration-dependencies 配置項,如:
<configuration-dependencies>
<config-type>hdfs-core-site</config-type>
</configuration-dependencies>
只有在 configuration-dependencies 中定義的配置文件,修改之后才會提示用戶更新。而且 config-type 字段填寫配置文件名的時候,不要加 .xml 擴展名,否則照樣不會提示用戶更新。