配置中心Apollo搭建全過程


總體架構

  1. 用戶在Portal操作配置發布
  2. Portal調用Admin Service的接口操作發布
  3. Admin Service發布配置后,發送ReleaseMessage給各個Config Service
  4. Config Service收到ReleaseMessage后,通知對應的客戶端

實現原理


上圖簡要描述了Apollo客戶端的實現原理:

  1. 客戶端和服務端保持了一個長連接,從而能第一時間獲得配置更新的推送。(通過Http Long Polling實現)
  2. 客戶端還會定時從Apollo配置中心服務端拉取應用的最新配置。
  • 這是一個fallback機制,為了防止推送機制失效導致配置不更新
  • 客戶端定時拉取會上報本地版本,所以一般情況下,對於定時拉取的操作,服務端都會返回304 - Not Modified
  • 定時頻率默認為每5分鍾拉取一次,客戶端也可以通過在運行時指定System Property: apollo.refreshInterval來覆蓋,單位為分鍾。
  1. 客戶端從Apollo配置中心服務端獲取到應用的最新配置后,會保存在內存中
  2. 客戶端會把從服務端獲取到的配置在本地文件系統緩存一份
  • 在遇到服務不可用,或網絡不通的時候,依然能從本地恢復配置
  1. 應用程序可以從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:
101.png

ApolloConfigDB:
102.png

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
123.png

配置中心頁面展示:10.2.42.28:8070
apollo/admin
124.png

項目創建:

image.png

image.png


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM