pollo分布式配置中心部署以及使用(轉發)
pollo分布式配置中心部署以及使用
2018年06月12日 16:38:46 閱讀數:1427一、簡介
Apollo(阿波羅)是攜程框架部門研發的分布式配置中心,能夠集中化管理應用不同環境、不同集群的配置,配置修改後能夠實時推送到應用端,並且具備規範的權限、流程治理等特性,適用於微服務配置管理場景。
官方github:https://github.com/ctripcorp/apollo
作者對Apollo對介紹:https://github.com/ctripcorp/apollo/wiki/Apollo%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83%E4%BB%8B%E7%BB%8D
二、安裝部署
基礎設施
本次部署環境為DEV(開發環境)、FAT(測試環境)、UAT(預生產)、PRO(生產)
應用服務器:
環境 | 服務器 | 服務 | 端口 |
---|---|---|---|
/ | 192.168.35.206 | apollo-portal | 9102 |
DEV | 192.168.35.207 | apollo-configservice apollo-adminservice |
9100 9101 |
FAT | 192.168.35.208 | apollo-configservice apollo-adminservice |
9100 9101 |
UAT | 192.168.35.209 | apollo-configservice apollo-adminservice | 9100 9101 |
PRO | 192.168.35.210 | apollo-configservice apollo-adminservice |
9100 9101 |
數據庫服務器:
環境 | 服務器 | 服務 | 數據庫 | 端口 |
---|---|---|---|---|
/ | 192.168.35.226 | apollo-portal | ApolloPortalDB | 3306 |
DEV | 192.168.35.227 | apollo-configservice apollo-adminservice |
ApolloConfigDB | 3306 |
FAT | 192.168.35.228 | apollo-configservice apollo-adminservice | ApolloConfigDB | 3306 |
UAT | 192.168.35.229 | apollo-configservice apollo-adminservice |
ApolloConfigDB | 3306 |
PRO | 192.168.35.230 | apollo-configservice apollo-adminservice |
ApolloConfigDB | 3306 |
配置
下載代碼:
git clone https://github.com/ctripcorp/apollo.git
- 1
比較重要的幾個項目:
- apollo-configservice:提供配置獲取接口,提供配置更新推送接口,接口服務對象為Apollo客戶端
- apollo-adminservice:提供配置管理接口,提供配置修改、發布等接口,接口服務對象為Portal,以及Eureka
- apollo-portal:提供Web界面供用戶管理配置
- apollo-client:Apollo提供的客戶端程序,為應用提供配置獲取、實時更新等功能
上圖簡要描述了配置發布的大致過程:
- 用戶在Portal操作配置發布
- Portal調用Admin Service的接口操作發布
- Admin Service發布配置後,發送ReleaseMessage給各個Config Service
- Config Service收到ReleaseMessage後,通知對應的客戶端
數據庫初始化:
下面的sql為大寫格式,註意數據庫的大小寫敏感設置
- ApolloPortalDB:執行
apollo\scripts\sql\apolloportaldb.sql
- ApolloConfigDB:DEV FAT UAT PRO 環境執行
apollo\scripts\sql\apolloconfigdb.sql
調整配置並打包:
在Apollo
項目中找到目錄apollo\scripts\
的配置文件build.bat
或者build.bat
1. 數據庫配置
修改數據庫配置,上面的是ApolloConfigDB
配置,下面的是ApolloPortalDB
配置:
# apollo config db info 該數據庫配置只需要配置一次,不同環境無需修改
apollo_config_db_url=jdbc:mysql://192.168.35.227:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=XXXX
apollo_config_db_password=XXXX
# apollo portal db info 該數據庫依據不同環境配置對應的數據庫連接,並且需要多次打對應環境的JAR包
apollo_portal_db_url=jdbc:mysql://192.168.35.226:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=XXXX
apollo_portal_db_password=XXXX
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- apollo config db info 該數據庫配置只需要配置一次,不同環境無需修改
-
apollo portal db info 該數據庫依據不同環境配置對應的數據庫連接,並且需要多次打
- 修改環境調用地址
# meta server url, different environments should have different meta server addresses
dev_meta=http://192.168.35.207:9100
fat_meta=http://192.168.35.208:9100
uat_meta=http://192.168.35.209:9100
pro_meta=http://192.168.35.210:9100
- 1
- 2
- 3
- 4
- 5
- 修改數據庫數據
在DEV FAT UAT PRO 對應的ApolloConfigDB
數據庫中,找到表ServerConfig
中的eureka.service.url
配置項:
UPDATE apolloconfigdb.ServerConfig SET ServerConfig.`Value`=‘http://localhost:9100/eureka/‘ WHERE `Key`=‘eureka.service.url‘;
- 1
具體eureka
配置,可以查看官網:https://github.com/ctripcorp/apollo/wiki/%E5%88%86%E5%B8%83%E5%BC%8F%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97
- 編譯、打包
./build.sh
- 1
- 該腳本會依次打包apollo-configservice, apollo-adminservice, apollo-portal和apollo-client。
- 由於ApolloConfigDB在每個環境都有部署,所以對不同環境的config-service和admin-service需要使用不同的數據庫連接信息打不同的包,portal和client只需要打一次包即可
開始部署
部署程序到對應的服務器
- 部署apollo-configservice
將apollo-configservice/target/
目錄下的apollo-configservice-x.x.x-github.zip
上傳到服務器上,解壓
修改scripts/startup.sh
:
LOG_DIR=/opt/logs/100003171
SERVER_PORT=9100
- 1
- 2
執行scripts/startup.sh
即可
如需停止服務,執行scripts/shutdown.sh.
- 部署apollo-adminservice
將apollo-adminservice/target/
目錄下的apollo-adminservice-x.x.x-github.zip
上傳到服務器上,解壓
修改scripts/startup.sh
:
LOG_DIR=/opt/logs/100003172
SERVER_PORT=9101
- 1
- 2
執行scripts/startup.sh
即可
如需停止服務,執行scripts/shutdown.sh.
- 部署apollo-portal
將apollo-portal/target/
目錄下的apollo-portal-x.x.x-github.zip
上傳到服務器上,解壓
修改scripts/startup.sh
:
LOG_DIR=/opt/logs/100003173
SERVER_PORT=9102
- 1
- 2
執行scripts/startup.sh
即可
如需停止服務,執行scripts/shutdown.sh.
訪問測試
上面部署完成,可以測試
訪問不同環境的eureka
,查看服務註冊情況是否正確:
http://192.168.35.207:9100/
- 1
如果可以看到:
192.168.35.207:apollo-adminservice:9101
192.168.35.207:apollo-configservice:9100
- 1
- 2
兩個服務都為UP,正常!
訪問客戶端:
http://192.168.35.206:9102/
- 1
登錄,默認用戶名密碼為:apollo/admin
新建項目測試。
三、使用配置中心配置信息
- maven引入上面步驟編譯打包成功的
apollo-core
和apollo-client
包:
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-core</artifactId>
<version>0.11.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>0.11.0-SNAPSHOT</version>
</dependency>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 創建app.properties
請確保classpath:/META-INF/app.properties文件存在,並且其中內容為自己的項目名稱,而且要保持唯一:
app.id=demo
- 1
- 環境變量配置
本地開發
如果是本地開發,可以在開發工具添加Environment:
env=DEV
- 1
線上環境配置方式:
- 使用Java啟動參數添加java -Denv=YOUR-ENVIRONMENT -jar xxx.jar
- 通過操作系統的System Environment
- 通過配置文件:
對於Mac/Linux,文件位置為/opt/settings/server.properties
對於Windows,文件位置為C:\opt\settings\server.properties
- 配置apollo-env.properties
在項目中引用apollo-core
和apollo-client
包,在apollo-core
包中可以看到apollo-env.properties
配置文件,默認配置為打包前配置的信息:
local.meta=http://localhost:8080
dev.meta=http://192.168.35.207:9100
fat.meta=http://192.168.35.208:9100
uat.meta=http://192.168.35.209:9100
lpt.meta=${lpt_meta}
pro.meta=http://192.168.35.210:9100
- 1
- 2
- 3
- 4
- 5
- 6
如果需要修改或者覆蓋的話,在項目的resources
從上面復制一個apollo-env.properties
文件,修改對應環境信息就可以了
- 啟用配置
在啟動類添加@EnableApolloConfig
註解即可:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author chihiro.zhang
*/
@EnableApolloConfig
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 測試
添加一個測試的類DemoConfiguration
,當然配置中心要有下面配置的配置信息:
@Configuration
@EnableAutoConfiguration
public class DemoConfiguration {
@Value("${demo}")
private String demo;
}
- 1
- 2
- 3
- 4
- 5
- 6
完成!
四、部署方案
這個圖是計劃部署的方案,並不是上面寫的例子的方案
pollo分布式配置中心部署以及使用(轉發)