配置中心Apollo搭建全过程
总体架构

- 用户在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
项目创建:


配置中心Apollo搭建全过程的更多相关文章
- 配置中心-Apollo
配置中心-Apollo 2019/10/01 Chenxin 配置服务主要有 携程Apollo.百度Disconf.阿里ACM,目前以Apollo用户量最大.适用场景,多用于微服务,与K8S结合好. ...
- 携程Apollo统一配置中心的搭建和使用
原文链接:https://blog.csdn.net/luhong327/article/details/81453001 一.Apollo配置中心介绍 1.What is Apollo 1.1 Ap ...
- Apollo配置中心环境搭建(Linux)
官方教程:https://github.com/ctripcorp/apollo/wiki/Apollo-Quick-Start-Docker%E9%83%A8%E7%BD%B2 方式二:使用apol ...
- 实践分布式配置中心Apollo
简介 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场景 ...
- 分布式配置中心Apollo——QuickStart
分布式配置中心 剥离配置文件,实现动态修改,自动更新. [假设没有分布式配置中心,修改配置文件后都需要重启服务,对于数量庞多的微服务开发来说,就会非常繁琐] 分布式配置中心有哪些 disconf(依赖 ...
- 配置中心Apollo实战
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场景. 服 ...
- 分布式配置中心Apollo
1,什么是分布式配置中心 项目中配置文件比较繁杂,而且不同环境的不同配置修改相对频繁,每次发布都需要对应修改配置,如果配置出现错误,需要重新打包发布,时间成本较高,因此需要做统一的分布式注册中心,能做 ...
- spring cloud 集成分布式配置中心 apollo(单机部署apollo)
一.什么是apollo? Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用 ...
- 微服务配置中心 Apollo 源码解析——Admin 发送发布消息
内容参考:https://www.toutiao.com/a6643383570985386509/ 摘要: 原创出处http://www.iocoder.cn/Apollo/admin-server ...
随机推荐
- 37.3 net--TcpDemo1 大小写转换
需求:使用TCP协议发送数据,并将接收到的数据转换成大写返回 启动方式:先打开服务端,再打开客户端 客户端 package day35_net_网络编程.tcp传输; import java.io.I ...
- 一个lock锁就可以分出低中高水平的程序员对问题的处置方式
说到lock锁,我相信在座的各位没有不会用的,而且还知道怎么用不会出错,但让他们聊一聊为什么可以锁住,都说人以群分,大概就有了下面低中高水平的三类人吧. 第一类人 将lock对象定义成static,这 ...
- Jmeter常用元件
1.测试计划:测试元件的容器,相当于一个项目名称 线程组: 2.监听器:负责收集测试结果,同时也被告知了结果显示的方式 (1)查看结果树:看具体某个请求——请求响应,结果明细 (2)聚合报告:汇总报 ...
- RESTful API设计的点
RESTful API 前言 一直在使用RESTful API,但是好像概念还是很模糊的,总结下使用到的点 设计的规范 协议 API与用户的通信协议,总是使用HTTPs协议. 域名 应该尽量将API部 ...
- Springboot启动流程简单分析
springboot启动的类为SpringApplication,执行构造函数初始化属性值后进入run方法: 然后返回ConfigurableApplicationContext(spring应用). ...
- Java成长第三集--基础重点详细说明
接上篇文章,继续阐述相关的重点基础知识,话不多说! 一.Java中equals()和“==”区别 1.对于8种基础数据类型,使用“=="比较值是否相等: 2.对于复合数据类型(类),使用eq ...
- Rescue BFS+优先队列 杭电1242
思路 : 优先队列 每次都取最小的时间,遇到了终点直接就输出 #include<iostream> #include<queue> #include<cstring> ...
- 基于Lua的游戏服务端框架简介
基于Lua的游戏服务端框架简介 [转]https://gameinstitute.qq.com/community/detail/106396 基于lua的游戏服务端框架简介 1. 引言 笔者目前在参 ...
- 在vue中使用ztree树插件
插件资源及api:树官网 本事例是在vue3.0+中演示,事例是实际项目中正在用的组件所以部分打了马赛克. 1.插件准备(提前准备好插件文件) 可以直接在官网下载,搭建好脚手架后将准备好的文件放在li ...
- [YII2] 去除自带头部以及底部右下角debug调试功能
YII2 去除自带头部以及底部右下角debug调试功能