Disconf使用說明

簡介


Distributed Configuration Management Platform(分佈式配置管理平臺)

專注於各種 分佈式系統配置管理 的通用組件/通用平臺, 提供統一的配置管理服務。

包括 百度滴滴打車銀聯網易拉勾網 等知名互聯網公司正在使用!


主要目標:

  • 部署極其簡單:同一個上線包,無須改動配置,即可在 多個環境中(RD/QA/PRODUCTION) 上線
  • 部署動態化:更改配置,無需重新打包或重啓,即可 實時生效
  • 統一管理:提供web平臺,統一管理 多個環境(RD/QA/PRODUCTION)、多個產品 的所有配置
  • 支持微服務架構

demos

https://github.com/knightliao/disconf-demos-java

disconf的模塊架構

每個模塊的簡單介紹如下:

  • Disconf-core
    • 分佈式通知模塊:支持配置更新的實時化通知
    • 路徑管理模塊:統一管理內部配置路徑URL
  • Disconf-client
    • 配置倉庫容器模塊:統一管理用戶實例中本地配置文件和配置項的內存數據存儲
    • 配置reload模塊:監控本地配置文件的變動,並自動reload到指定bean
    • 掃描模塊:支持掃描所有disconf註解的類和域
    • 下載模塊:restful風格的下載配置文件和配置項
    • watch模塊:監控遠程配置文件和配置項的變化
    • 主備分配模塊:主備競爭結束後,統一管理主備分配與主備監控控制
    • 主備競爭模塊:支持分佈式環境下的主備競爭
  • Disconf-web
    • 配置存儲模塊:管理所有配置的存儲和讀取
    • 配置管理模塊:支持配置的上傳、下載、更新
    • 通知模塊:當配置更新後,實時通知使用這些配置的所有實例
    • 配置自檢監控模塊:自動定時校驗實例本地配置與中心配置是否一致
    • 權限控制:web的簡單權限控制
  • Disconf-tools
    • context共享模塊:提供多實例間context的共享。

使用說明

1.導入jar包

            <dependency>
                <groupId>com.baidu.disconf</groupId>
                <artifactId>disconf-client</artifactId>
                <version> 2.6.30</version>
            </dependency>

2.在客戶端應用的classpath下新增disconf.properties文件

注:所有disconf.properties配置文件中的參數,所有配置均可以通過 命令行 -Dname=value 參數傳入。啓動參數方式進行覆蓋


Disconf啓動需要此文件,文件示例是:

# 是否使用遠程配置文件
# true(默認)會從遠程獲取配置 false則直接獲取本地配置
enable.remote.conf=true

#
# 配置服務器的 HOST,用逗號分隔  127.0.0.1:8000,127.0.0.1:8000
#
conf_server_host=127.0.0.1:8080

# 版本, 請採用 X_X_X_X 格式 
version=1_0_0_0

# APP 請採用 產品線_服務名 格式 
app=disconf_demo

# 環境
env=rd

# debug
debug=true

# 忽略哪些分佈式配置,用逗號分隔
ignore=

# 獲取遠程配置 重試次數,默認是3次
conf_server_url_retry_times=1
# 獲取遠程配置 重試時休眠時間,默認是5秒
conf_server_url_retry_sleep_seconds=1


配置相關說明可參考:

配置項 說明 是否必填 默認值
disconf.conf_server_host 配置服務器的 HOST,用逗號分隔 ,示例:127.0.0.1:8000,127.0.0.1:8000 必填
disconf.app APP 請採用 產品線_服務名 格式 優先讀取命令行參數,然後再讀取此文件的值
disconf.version 版本號, 請採用 X_X_X_X 格式 默認爲 DEFAULT_VERSION。優先讀取命令行參數,然後再讀取此文件的值,最後纔讀取默認值。
disconf.enable.remote.conf 是否使用遠程配置文件,true(默認)會從遠程獲取配置, false則直接獲取本地配置 false
disconf.env 環境 默認爲 DEFAULT_ENV。優先讀取命令行參數,然後再讀取此文件的值,最後纔讀取默認值
disconf.ignore 忽略的分佈式配置,用空格分隔
disconf.debug 調試模式。調試模式下,ZK超時或斷開連接後不會重新連接(常用於client單步debug)。非調試模式下,ZK超時或斷開連接會自動重新連接。 false
disconf.conf_server_url_retry_times 獲取遠程配置 重試次數,默認是3次 3
disconf.conf_server_url_retry_sleep_seconds 獲取遠程配置 重試時休眠時間,默認是5秒 5
disconf.user_define_download_dir 用戶定義的下載文件夾, 遠程文件下載後會放在這裏。注意,此文件夾必須有有權限,否則無法下載到這裏 ./disconf/download
disconf.enable_local_download_dir_in_class_path 下載的文件會被遷移到classpath根路徑下,強烈建議將此選項置爲 true(默認是true) true


詳細設計請參考:

http://disconf.readthedocs.io/zh_CN/latest/design/index.html


3 applicationContext.xml添加Disconf啓動支持

scanPackage是掃描標註了disconf註解類所在包路徑


4 配置項註解使用

配置項即K-V的形式,使用如下:

在類的get方法上添加註解 @DisconfFileItem 。添加標記 name, 表示配置文件中的KEY名,這是必填的。標記associateField是可選的,它表示此get方法相關連的域的名字,如果此標記未填,則系統會自動 分析get方法,猜測其相對應於域名。強烈建議添加associateField標記,這樣就可以避免Eclipse生成的Get/Set方法不符合 Java規範的問題。


實例,請參考   5 配置文件註解使用

5 配置文件註解使用


具體步驟是:

  1. 爲這個類定義 @DisconfFile 註解,指定文件名爲 code.properties 。
  2. 定義域codeError,並使用Eclipse爲其自動生成 get&set 方法。
  3. 爲該域的get方法上添加註解 @DisconfFileItem 。添加標記 name, 表示配置文件中的KEY名,這是必填的。標記associateField是可選的,它表示此get方法相關連的域的名字,如果此標記未填,則系統會自動 分析get方法,猜測其相對應於域名。強烈建議添加associateField標記,這樣就可以避免Eclipse生成的Get/Set方法不符合 Java規範的問題。
  4. 標記它爲Spring託管的類 (使用@Service),且 "scope" 都必須是singleton的。

注意:

Eclipse自動生成的get方法,可能與Java的規範不同。這會導致很多問題。因此,建議加上 associateField 標記。

在disconf-web上code.properties新增該配置文件(版本,環境,app與disconf.properties配置文件中相同)

6 配置更新回調

實現IDisconfUpdate接口,並且該類是由spring管理

註解@DisconfUpdateService, confFileKeys爲監控配置文件更新,itemKeys爲監控配置項更新

7 文件託管

配置文件沒有相應的配置註解類,此配置文件不會被注入到配置類中。disconf只是簡單的對其進行託管 啓動時下載配置文件;配置文件變化時,負責動態推送。程序不會自動reload配置,需要自己寫回調函數(實現IDisconfUpdate接口,並添加DisconfUpdateService註解)

<!-- 使用託管方式的disconf配置(無代碼侵入, 配置更改不會自動reload)-->
<bean id="configproperties_no_reloadable_disconf"
      class="com.baidu.disconf.client.addons.properties.ReloadablePropertiesFactoryBean">
    <property name="locations">
        <list>
            <value>myserver.properties</value>
        </list>
    </property>
</bean>

<bean id="propertyConfigurerForProject1"
      class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="ignoreResourceNotFound" value="true"/>
    <property name="ignoreUnresolvablePlaceholders" value="true"/>
    <property name="propertiesArray">
        <list>
            <ref bean="configproperties_no_reloadable_disconf"/>
        </list>
    </property>
</bean>

8 管理端disconf-web

8.1.環境配置

配置java、maven環境,並安裝mysql,reids,zookeeeper,Nginx

8.2.下載disconf

下載https://codeload.github.com/knightliao/disconf/zip/master
解壓:unzip disconf-master.zip

8.3.編譯打包

創建目錄

    mkdir /home/disconf/online-resources  
    mkdir /home/disconf/war  
    cd disconf-master  
    mvn clean install  
    ONLINE_CONFIG_PATH=/home/disconf/online-resources  
    WAR_ROOT_PATH=/home/disconf/war  
    export ONLINE_CONFIG_PATH  
    export WAR_ROOT_PATH  
    cd disconf-web  
    sh deploy/deploy.sh  


完成在/home/disconf/war目錄下產生文件
    -disconf-web.war    
    -html    
    -jpaas_control  
    -META-INF    
    -Release  
    -tmp  
    -WEB-INF  


8.4.修改配置

1)將配置文件放到此地址目錄下:/home/disconf/online-resources
配置文件包括:
- jdbc-MySQL.properties (數據庫配置)
- redis-config.properties (Redis配置)
- zoo.properties (Zookeeper配置)
- application.properties (應用配置)
注意,記得執行將application-demo.properties複製成application.properties:
cp application-demo.properties application.properties 

2)修改disconf配置
cd /home/disconf/war/WEB-INF/classes/
application.properties
jdbc-mysql.properties
redis-config.properties
zoo.properties
修改文件中的地址端口,調整日誌目錄
#log4j.properties
${catalina.home}/logs/disconf-log4j.log
#logback.xml
<property name="log.base" value="${catalina.home}/logs/disconf-web"/>
<property name="log.monitor" value="${catalina.home}/logs/monitor"/>

8.5.初始化數據庫

按照disconf-master/disconf-web/sql/readme.txt說明按照順序導入數據

8.6.配置tomcat

安裝tomcat配置server.xml配置war目錄
<Context path="" docBase="/home/disconf/disconf/war"></Context>

8.7.配置nginx

安裝nginx,並配置,安裝參考:http://blog.csdn.net/zhu_tianwei/article/details/17752581
配置:vi /home/disconf/nginx/conf/nginx.conf

    upstream disconf {  
        server 127.0.0.1:8080;  
    }  
      
    server {  
        listen   8000;  
        server_name localhost;  
        access_log logs/disconf_access.log;  
        error_log logs/disconf_error.log;  
      
        location / {  
            root /home/disconf/disconf/war/html;  
            if ($query_string) {  
                expires max;  
            }  
        }  
      
        location ~ ^/(api|export) {  
            proxy_pass_header Server;  
            proxy_set_header Host $http_host;  
            proxy_redirect off;  
            proxy_set_header X-Real-IP $remote_addr;  
            proxy_set_header X-Scheme $scheme;  
            proxy_pass http://disconf;  
        }  
    }  



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章