一、前端通過 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 擴展名,否則照樣不會提示用戶更新。
