1. 程式人生 > >Apollo分布式配置中心簡易環境部署

Apollo分布式配置中心簡易環境部署

分布式配置中心 apoolo Java MySQL 阿波羅

Apollo(阿波羅)是攜程框架部門研發的分布式配置中心,能夠集中化管理應用不同環境、不同集群的配置,配置修改後能夠實時推送到應用端,並且具備規範的權限、流程治理等特性,適用於微服務配置管理場景。
github地址為:
https://github.com/ctripcorp/apollo
該項目提供了兩種部署方式:本地部署和分布式部署。生產環境建議使用“分布式部署”。
因最近項目有使用配置中心的需求,在綜合分析了apollo、Qconf、SpringCloud Config等一系列分布式配置中心後,初步選定apollo。
官方提供的分布式部署架構適合大規模集群環境。在其總體架構基礎上做了精簡,力求先跑起來,給開發部門提供環境,測試。

一、環境準備

1.服務器信息及節點介紹

主機名稱 IP 備註
hadoop02.ok.com 10.150.27.65 Portalserver/Configserver/adminserver and MySQL
APPCAN-T-APP-6 10.150.27.65 Configserver/adminserver and MySQL

軟件版本:
JAVA:

[root@appcan-t-app-7 scripts]# java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

MAVEN:

[root@appcan-t-app-7 scripts]# mvn -version
Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-25T03:49:05+08:00)
Maven home: /usr/local/apache-maven-3.5.3
Java version: 1.8.0_60, vendor: Oracle Corporation
Java home: /usr/local/jdk1.8.0_60/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-327.el7.x86_64", arch: "amd64", family: "unix"

MySQL:

[root@appcan-t-app-7 scripts]# mysql -uroot -p
mysql> select version(); 
+---------------+
| version()     |
+---------------+
| 5.7.19-17-log |
+---------------+
1 row in set (0.01 sec)

架構圖如下:
技術分享圖片

說明:

  • Portal部署在10.150.27.65上,通過它來直接管理DEV、PRO環境的配置,FAT和UAT環境暫沒使用到。
  • Meta Server、Config Service和Admin Service在DEV和PRO環境都單獨部署,使用獨立的數據庫。
  • Meta Server和Config Service部署在同一個JVM進程內,Admin Service部署在同一臺服務器的另一個JVM進程內。

二、部署步驟:

1.clone項目至本地目錄(/home/ok)

clone https://github.com/ctripcorp/apollo.git

2.創建數據庫

Apollo服務端共需要兩個數據庫:ApolloPortalDB和ApolloConfigDB,數據庫、表的創建和樣例數據的sql文件在項目當中(/home/ok/apollo/scripts/sql),只需要導入數據庫即可。
需要註意的是ApolloPortalDB只需要部署一個即可,而ApolloConfigDB需要在每個環境部署一套,如本案例中dev和pro分別部署兩套ApolloConfigDB。

3.創建ApolloPortalDB

導入sql文件:

mysql> source /home/ok/apollo/scripts/sql/apolloportaldb.sql;

驗證:

mysql> select `Id`, `Key`, `Value`, `Comment` from `ApolloPortalDB`.`ServerConfig` limit 1;
+----+--------------------+---------+--------------------------+
| Id | Key                | Value   | Comment                  |
+----+--------------------+---------+--------------------------+
|  1 | apollo.portal.envs | dev | 可支持的環境列表         |
+----+--------------------+---------+--------------------------+
1 row in set (0.00 sec)

4.創建ApolloConfigDB

導入sql文件:

mysql> source /home/ok/apollo/scripts/sql/apolloconfigdb.sql;

驗證:

mysql> select `Id`, `Key`, `Value`, `Comment` from `ApolloConfigDB`.`ServerConfig` limit 1;
+----+--------------------+-------------------------------+------------------------------------------------------+
| Id | Key                | Value                         | Comment                                              |
+----+--------------------+-------------------------------+------------------------------------------------------+
|  1 | eureka.service.url | http://localhost:8080/eureka/ | Eureka服務Url,多個service以英文逗號分隔             |
+----+--------------------+-------------------------------+------------------------------------------------------+
1 row in set (0.00 sec)
  • 註:ApolloConfigDB需要在每個環境部署一套,本例中如dev和pro分別部署ApolloConfigDB

    5.調整服務端配置

    5.1調整ApolloPortalDB配置
    apollo.portal.envs - 可支持的環境列表
    默認值是dev,本例需要增加pro環境。
    首先在數據庫apolloportaldb-serverconfig-apollo.portal.envs內新增pro。

    mysql> select `Id`, `Key`, `Value`, `Comment` from `ApolloPortalDB`.`ServerConfig` limit 1;
    +----+--------------------+---------+--------------------------+
    | Id | Key                | Value   | Comment                  |
    +----+--------------------+---------+--------------------------+
    |  1 | apollo.portal.envs | pro,dev | 可支持的環境列表         |
    +----+--------------------+---------+--------------------------+
    1 row in set (0.00 sec)

    其次配合修改/home/ok/apollo/scripts/build.sh文件才能生效:

#meta server url, different environments should have different meta server addresses
pro_meta=http://10.150.27.65:8080
dev_meta=http://10.160.27.67:8080

META_SERVERS_OPTS="-Ddev_meta=$dev_meta -Dpro_meta=$pro_meta"

organizations - 部門列表
在數據庫apolloportaldb-serverconfig-proorganizations內修改:

mysql> select `Id`, `Key`, `Value`, `Comment` from `ApolloPortalDB`.`ServerConfig` where Id=2;
+----+---------------+------------------------------------------------------------------------------------+--------------+
| Id | Key           | Value                                                                              | Comment      |
+----+---------------+------------------------------------------------------------------------------------+--------------+
|  2 | organizations | [{"orgId":"BACKEND","orgName":"JAVA"},{"orgId":"TEST2","orgName":"樣例部門2"}]     | 部門列表     |
+----+---------------+------------------------------------------------------------------------------------+--------------+
1 row in set (0.00 sec)

5.2調整ApolloConfigDB配置
配置項統一存儲在ApolloConfigDB.ServerConfig表中,需要註意每個環境的ApolloConfigDB.ServerConfig都需要單獨配置。
eureka.service.url - Eureka服務Url
每個環境只填入自己環境的eureka服務地址.
在DEV環境的ApolloConfigDB.ServerConfig表中設置eureka.service.url為:http://localhost:8080/eureka/
在PRO環境的ApolloConfigDB.ServerConfig表中設置eureka.service.url為:http://localhost:8080/eureka/

6.配置數據庫連接信息

編輯/home/ok/apollo/scripts/build.sh文件,修改ApolloPortalDB和ApolloConfigDB相關的數據庫連接串信息。
10.150.27.65:

#apollo config db info
apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=root
apollo_config_db_password=bobo365

#apollo portal db info
apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=root
apollo_portal_db_password=bobo365

10.150.27.67:

#apollo config db info
apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=root
apollo_config_db_password=bobo365

#apollo portal db info
apollo_portal_db_url=jdbc:mysql://10.160.27.65:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=root
apollo_portal_db_password=bobo365

7.配置各環境meta service地址

Portal和Apollo客戶端需要在不同的環境訪問不同的meta service(apollo-configservice)地址,所以需要在打包時提供這些信息。

#meta server url, different environments should have different meta server addresses
pro_meta=http://10.150.27.65:8080
dev_meta=http://10.160.27.67:8080

META_SERVERS_OPTS="-Ddev_meta=$dev_meta -Dpro_meta=$pro_meta"

8.執行編譯、打包

執行腳本:/home/ok/apollo/scripts/build.sh
該腳本會依次打包apollo-configservice, apollo-adminservice, apollo-portal和apollo-client。

9.部署apollo-configservice

將apollo-configservice/target/目錄下的apollo-configservice-x.x.x-github.zip上傳到服務器上,解壓後執行scripts/startup.sh即可。如需停止服務,執行scripts/shutdown.sh.

[root@appcan-t-app-7 target]# pwd
/home/ok/apollo/apollo-configservice/target
[root@appcan-t-app-7 target]# unzip apollo-configservice-0.9.1-SNAPSHOT-github.zip -d test

10.部署apollo-adminservice

將apollo-adminservice/target/目錄下的apollo-adminservice-x.x.x-github.zip上傳到服務器上,解壓後執行scripts/startup.sh即可。如需停止服務,執行scripts/shutdown.sh.

[root@appcan-t-app-7 target]# pwd 
/home/ok/apollo/apollo-adminservice/target
[root@appcan-t-app-7 target]# unzip apollo-adminservice-0.9.1-SNAPSHOT-github.zip -d test

11.部署apollo-portal

將apollo-portal/target/目錄下的apollo-portal-x.x.x-github.zip上傳到服務器上,解壓後執行scripts/startup.sh即可。如需停止服務,執行scripts/shutdown.sh.
apollo-portal的默認端口是8080,和apollo-configservice一致,所以如果需要在一臺機器上同時啟動apollo-portal和apollo-configservice的話,需要修改apollo-portal的端口。直接修改startup.sh中的SERVER_PORT即可,如SERVER_PORT=8070。

[root@appcan-t-app-7 target]# pwd
/home/ok/apollo/apollo-portal/target
[root@appcan-t-app-7 target]# unzip apollo-portal-0.9.1-SNAPSHOT-github.zip -d test

三、Portal 用戶登錄

登錄系統後在 http://{portal地址}/user-manage.html 頁面添加用戶,只有超級管理員才能添加用戶, 否則會報403錯誤。
系統默認賬號:apollo/admin.
Eureka(10.150.27.67)頁面如下:
技術分享圖片
Eureka(10.150.27.65)頁面如下:
技術分享圖片
Portal頁面如下:
技術分享圖片

以上僅僅是服務端的搭建和部署,真正使用需要結合客戶端使用。如下鏈接為Java客戶端使用指南,供後續研究。
JAVA客戶端使用指南

Apollo分布式配置中心簡易環境部署