總體架構
- 用戶在Portal操作配置發佈
- Portal調用Admin Service的接口操作發佈
- Admin Service發佈配置後,發送ReleaseMessage給各個Config Service
- Config Service收到ReleaseMessage後,通知對應的客戶端
實現原理 上圖簡要描述了Apollo客戶端的實現原理:
- 客戶端和服務端保持了一個長連接,從而能第一時間獲得配置更新的推送。(通過Http Long Polling實現)
- 客戶端還會定時從Apollo配置中心服務端拉取應用的最新配置。 這是一個fallback機制,爲了防止推送機制失效導致配置不更新 客戶端定時拉取會上報本地版本,所以一般情況下,對於定時拉取的操作,服務端都會返回304 - Not Modified 定時頻率默認爲每5分鐘拉取一次,客戶端也可以通過在運行時指定System Property: apollo.refreshInterval來覆蓋,單位爲分鐘。
- 客戶端從Apollo配置中心服務端獲取到應用的最新配置後,會保存在內存中
- 客戶端會把從服務端獲取到的配置在本地文件系統緩存一份 在遇到服務不可用,或網絡不通的時候,依然能從本地恢復配置
- 應用程序可以從Apollo客戶端獲取最新的配置、訂閱配置更新通知
MySQL安裝 版本要求:5.6.5+ 主機:10.2.42.28 清除mysql依賴包
- rpm -qa | grep mysql
- yum remove mysql-libs
安裝mysql5.7:安裝順序:common→libs→client→server
- rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
- rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
- rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
- rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
安裝成功界面:
- [root@DCA-APP-COM-apollo02 mysql]# rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm warning: mysql-community-common-5.7.26-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY Preparing... ################################# [100%] Updating / installing... 1:mysql-community-common-5.7.26-1.e################################# [100%] [root@DCA-APP-COM-apollo02 mysql]# rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm warning: mysql-community-libs-5.7.26-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY Preparing... ################################# [100%] Updating / installing... 1:mysql-community-libs-5.7.26-1.el7################################# [100%] [root@DCA-APP-COM-apollo02 mysql]# rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm warning: mysql-community-client-5.7.26-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY Preparing... ################################# [100%] Updating / installing... 1:mysql-community-client-5.7.26.1.e################################# [100%] [root@DCA-APP-COM-apollo02 mysql]# rpm -ivh mysql-community-server-5.7.26.1.el7.x86_64.rpm warning: mysql-community-server-5.7.26-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY Preparing... ################################# [100%] Updating / installing... 1:mysql-community-server-5.7.26.1.e################################# [100%]
啓動mysql:
- service mysqld start
mysql初始化:
-
[root@DCA-APP-COM-apollo02 mysql]# grep 'temporary password' /var/log/mysqld.log
-
2019-07-17T14:10:02.559365Z 1 [Note] A temporary password is generated for root@localhost: %hNW)P3Ly,8v
-
[root@DCA-APP-COM-apollo02 mysql]# mysql -uroot -p
-
Enter password:
-
Welcome to the MySQL monitor. Commands end with ; or \g.
-
Your MySQL connection id is 2
-
Server version: 5.7.26
-
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
-
Oracle is a registered trademark of Oracle Corporation and/or its
-
affiliates. Other names may be trademarks of their respective
-
owners.
-
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
-
更改密碼長度
-
mysql> set global validate_password_length=1;
-
Query OK, 0 rows affected (0.00 sec)
-
更改密碼強度
-
mysql> set global validate_password_policy=0;
-
Query OK, 0 rows affected (0.00 sec)
-
mysql> set password for root@localhost=password('123456');
-
Query OK, 0 rows affected, 1 warning (0.00 sec)
-
mysql> grant all privileges on . to 'root' @'%' identified by '123456';
-
Query OK, 0 rows affected, 1 warning (0.00 sec)
-
mysql> flush privileges;
-
Query OK, 0 rows affected (0.00 sec)
Apollo數據庫創建:SQL在官網自行下載:
- mysql> source apolloconfigdb.sql;
- mysql> source apolloportaldb.sql;
msyql連接用戶授權:
-
mysql> grant all privileges on ApolloConfigDB.* to Apollo@'%' IDENTIFIED BY 'Apollo' ;
-
Query OK, 0 rows affected, 1 warning (0.00 sec)
-
mysql> grant all privileges on ApolloPortalDB.* to Apollo@'%';
-
Query OK, 0 rows affected (0.00 sec)
-
mysql> flush privileges;
-
Query OK, 0 rows affected (0.00 sec)
數據庫配置更改:
ApolloPortalDB:
ApolloConfigDB:
Apollo安裝 官方地址:https://github.com/ctripcorp/apollo 本次測試版本爲:0.10.2 下載地址:https://github.com/ctripcorp/apollo/releases/tag/v0.10.2
- apollo-adminservice-0.10.2-github.zip
- apollo-configservice-0.10.2-github.zip
- apollo-portal-0.10.2-github.zip
apollo-config 主機:10.2.42.27 創建apollo用戶:
- groupadd apollo && useradd -g apollo apollo
配置configserver:
- cd /home/apollo/
- mkdir apollo-config
- unzip apollo-configservice-0.10.2-github.zip -d apollo-config
ApolloconfigDB配置:
-
vim apollo-config/config/application-github.properties
-
DataSource
-
spring.datasource.url = jdbc:mysql://10.2.42.28:3306/ApolloConfigDB?characterEncoding=utf8
-
spring.datasource.username = Apollo
-
spring.datasource.password = Apollo
日誌路徑及JVM參數修改:部分配置,後面的配置不需要修改
- vim apollo-config/scripts/startup.sh
-
修改日誌路徑
- LOG_DIR=/home/apollo/logs/100003171
-
默認端口
- SERVER_PORT=8080
-
默認註釋看需求打開
-
Adjust memory settings if necessary
- export JAVA_OPTS="-Xms6144m -Xmx6144m -Xss256k -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m -XX:NewSize=4096m -XX:MaxNewSize=4096m -XX:SurvivorRatio=8"
啓動Apollo-configservice:
-
cd /home/apollo/
-
chown -R apollo.apollo *
-
su apollo
-
./apollo-config/scripts/startup.sh
啓動成功:
- Thu Jul 18 15:06:53 CST 2019 ==== Starting ====
- Started [53700]
- Waiting for server startup......
- Thu Jul 18 15:07:24 CST 2019 Server started in 30 seconds!
apollo-admin 主機:10.2.42.28
- groupadd apollo && useradd -g apollo apollo
- cd /home/apollo/
- mkdir {apollo-admin,apollo-portal}
- unzip apollo-adminservice-0.10.2-github.zip -d apollo-admin
- unzip apollo-portal-0.10.2-github.zip -d apollo-portal
ApolloconfigDB配置:
-
cd apollo-admin
-
vim config/application-github.properties
-
DataSource
-
spring.datasource.url = jdbc:mysql://10.2.42.28:3306/ApolloConfigDB?characterEncoding=utf8
-
spring.datasource.username = Apollo
-
spring.datasource.password = Apollo
日誌路徑及JVM參數配置:部分配置,後面的配置不需要修改
-
vim scripts/startup.sh
-
#!/bin/bash
-
SERVICE_NAME=apollo-adminservice
-
Adjust log dir if necessary
-
LOG_DIR=/home/apollo/logs/100003172
-
Adjust server port if necessary
-
SERVER_PORT=8090
-
Adjust memory settings if necessary
-
export JAVA_OPTS="-Xms2560m -Xmx2560m -Xss256k -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m -XX:NewSize=1536m -XX:MaxNewSize=1536m -XX:SurvivorRatio=8"
啓動apollo-admin:
-
cd /home/apollo/
-
chown -R apollo.apollo *
-
su apollo
-
./scripts/startup.sh
-
Thu Jul 18 16:17:32 CST 2019 ==== Starting ====
-
Started [56497]
-
Waiting for server startup......
-
Thu Jul 18 16:18:02 CST 2019 Server started in 30 seconds!
apollo-portal 主機:10.2.42.28 apolloportlDB配置:
-
cd /home/apollo/apollo-portal
-
vim config/application-github.properties
-
DataSource
-
spring.datasource.url = jdbc:mysql://10.2.42.28:3306/ApolloPortalDB?characterEncoding=utf8
-
spring.datasource.username = Apollo
-
spring.datasource.password = Apollo
configservice配置:一套portal可以管理多個configservice,也可以直接配置在startup.sh腳本里
- vim config/apollo-env.properties
- local.meta=http://localhost:8080
- dev.meta=http://10.2.42.27:8080
- fat.meta=http://10.2.42.27:8080
- uat.meta=${lpt_meta}
- lpt.meta=${lpt_meta}
- pro.meta=${lpt_meta} 日誌路徑及JVM參數修改:部分配置,後面的配置不需要修改
- vim scripts/startup.sh
- #!/bin/bash
- SERVICE_NAME=apollo-portal
-
Adjust log dir if necessary
- LOG_DIR=/home/apollo/logs/100003173
-
Adjust server port if necessary
- SERVER_PORT=8070
-
Adjust memory settings if necessary
- export JAVA_OPTS="-Xms2560m -Xmx2560m -Xss256k -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m -XX:NewSize=1536m -XX:MaxNewSize=1536m -XX:SurvivorRatio=8" apollo-portal啓動:
- su apollo
- ./scripts/startup.sh
- Thu Jul 18 16:25:55 CST 2019 ==== Starting ====
- Started [56773]
- Waiting for server startup...
- Thu Jul 18 16:26:10 CST 2019 Server started in 15 seconds!
Apollo使用 服務端頁面展示:10.2.42.27:8080
配置中心頁面展示:10.2.42.28:8070 apollo/admin
項目創建: