官网地址:http://apollo.auto/

GitLab地址:https://github.com/ctripcorp/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 mysqlyum remove mysql-libs

安装mysql5.7:安装顺序:common→libs→client→server

rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpmrpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpmrpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpmrpm -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.rpmwarning: mysql-community-common-5.7.26-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEYPreparing...                          ################################# [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.rpmwarning: mysql-community-libs-5.7.26-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEYPreparing...                          ################################# [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.rpmwarning: mysql-community-client-5.7.26-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEYPreparing...                          ################################# [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.rpmwarning: mysql-community-server-5.7.26-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEYPreparing...                          ################################# [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.log2019-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 -pEnter password: Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 2Server version: 5.7.26Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.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-configunzip apollo-configservice-0.10.2-github.zip -d apollo-config

ApolloconfigDB配置:

vim apollo-config/config/application-github.properties# DataSourcespring.datasource.url = jdbc:mysql://10.2.42.28:3306/ApolloConfigDB?characterEncoding=utf8spring.datasource.username = Apollospring.datasource.password = Apollo

日志路径及JVM参数修改:部分配置,后面的配置不需要修改

vim apollo-config/scripts/startup.sh# 修改日志路径LOG_DIR=/home/apollo/logs/100003171# 默认端口SERVER_PORT=8080# 默认注释看需求打开## Adjust memory settings if necessaryexport 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 apollocd /home/apollo/mkdir {apollo-admin,apollo-portal}unzip apollo-adminservice-0.10.2-github.zip -d apollo-adminunzip apollo-portal-0.10.2-github.zip -d apollo-portal

ApolloconfigDB配置:

cd apollo-adminvim config/application-github.properties# DataSourcespring.datasource.url = jdbc:mysql://10.2.42.28:3306/ApolloConfigDB?characterEncoding=utf8spring.datasource.username = Apollospring.datasource.password = Apollo

日志路径及JVM参数配置:部分配置,后面的配置不需要修改

vim scripts/startup.sh#!/bin/bashSERVICE_NAME=apollo-adminservice## Adjust log dir if necessaryLOG_DIR=/home/apollo/logs/100003172## Adjust server port if necessarySERVER_PORT=8090## Adjust memory settings if necessaryexport 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.shThu 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-portalvim config/application-github.properties# DataSourcespring.datasource.url = jdbc:mysql://10.2.42.28:3306/ApolloPortalDB?characterEncoding=utf8spring.datasource.username = Apollospring.datasource.password = Apollo

configservice配置:一套portal可以管理多个configservice,也可以直接配置在startup.sh脚本里

vim config/apollo-env.propertieslocal.meta=http://localhost:8080dev.meta=http://10.2.42.27:8080fat.meta=http://10.2.42.27:8080uat.meta=${lpt_meta}lpt.meta=${lpt_meta}pro.meta=${lpt_meta}

日志路径及JVM参数修改:部分配置,后面的配置不需要修改

vim scripts/startup.sh#!/bin/bashSERVICE_NAME=apollo-portal## Adjust log dir if necessaryLOG_DIR=/home/apollo/logs/100003173## Adjust server port if necessarySERVER_PORT=8070## Adjust memory settings if necessaryexport 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.shThu 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

项目创建:

©著作权归作者所有:来自51CTO博客作者mb5ff97f7b72697的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 实战 | Pinpoint全链路监控搭建
  2. Nginx安装后第一个要改的配置…
  3. Nginx负载均衡配置误区
  4. 02-K8s部署安装配置 Kuboard v2
  5. K8s手动方式搭建平台及问题汇总
  6. 将Hexo部署到自己的服务器上
  7. 9.Cisco 虚拟化vWLC+三层交换机+多SSID组网
  8. Hive3.1.0入门:安装部署详解
  9. 使用Operator部署Prometheus

随机推荐

  1. django的视图和URL配置
  2. python 入门视频学习笔记+python入门视频
  3. 第二章 Python基本语法
  4. 【Python】Python3 字典 copy()方法
  5. 购物车程序练习
  6. Python:lambda表达式实现求两个变量的最大
  7. 关于Python(一、基础篇)
  8. 'module'对象没有属性'views' django错误
  9. Python学习路程day12
  10. Python NameError:全局名称“Form”没有