Apollo配置中心笔记

apollo的quick start

https://ctripcorp.github.io/apollo/#/zh/deployment/quick-start?id=%e4%ba%8c%e3%80%81%e5%ae%89%e8%a3%85%e6%ad%a5%e9%aa%a4 官方文档

参考官方文档一步步走就行,默认密码是apollo admin。

apollo的架构

https://mp.weixin.qq.com/s/-hUaQPzfsl9Lm3IqQW3VDQ 官方推荐架构讲解 有这一个就够了

 

 

  • 首先apollo的配置数据是存在ConfigDB中的,apollo的用户权限等管理数据是存在Portal数据库中的。

  • AdminService和CofigService是服务的提供方。其中AdminService主要通过数据的配置的管理、修改和发布,主要服务于Portal的,而ConfigService则是主要提供配置的查询和推送,主要服务于Client的

  • Client:客户端,即一个个的应用,从apollo中读取配置

  • Portal:apollo配置的管理者,发布和修改配置

  • Eureka:AdminService和CofigService本身是分布式部署的,由eureka进行服务的注册和发现

  • MetaServer: 由于Eureka本身是java开发的,为了兼容其他语言,在Eureka上有封装了一层MetaServer,通过http调用的形式进行服务的发现。

  • Nginx LB:担任网关的作用,Client和Portal都是通过Nginx LB来访问Meta Server

apollo的分布式部署

https://github.com/ctripcorp/apollo/wiki/%E5%88%86%E5%B8%83%E5%BC%8F%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97#221124-%E9%85%8D%E7%BD%AEapollo-portal%E7%9A%84meta-service%E4%BF%A1%E6%81%AF

官方文档提供的可以docker容器部署和直接jar包部署,下面记录使用docker文件部署的,具体的jar包部署参考官方文档即可

创建镜像

1.7.1以后会默认上传docker镜像,所以自己创建镜像,下面是自己配置镜像的方式

  • 根据源码创建镜像

    • 在github上下载1.7.1版本的源码(使用github加速器插件)

    • 执行.\scripts\build.bat 编译源码,需要配置maven的环境变量和JDK的环境变量 ,获取pollo-configservice-1.9.0-SNAPSHOT-github.zip、apollo-adminservice-1.9.0-SNAPSHOT-github.zip、apollo-portal-1.9.0-SNAPSHOT-github.zip

    • 将源码中的dockerfile和zip包复制到linux系统中

    • 创建 镜像docker build -f protal-service-dockerfile -t apollo-protalservice:1.9.0 .

  • 拉取镜像:

    • docker pull apolloconfig/apollo-configservice:1.7.1

    • docker pull apolloconfig/apollo-adminservice:1.7.1

    • docker pull apolloconfig/apollo-portal:1.7.1

部署

部署包含config-service、admin-service、protal-service三个服务,其中config-service、admin-service是注册到ApolloConfigDB的ServerConfig的eureka地址上的。Portal则是一个单独的管理服务,可以同时访问多个环境的配置信息,所以Portal只配置一个生产环境的即可。需要通过PortalConfigDB的ServerConfig里的apollo.portal.envs进行配置,而且还需要修改器metaServer的地址。下面就部署两个环境,一个dev的,一个pro的。

开发环境

mysql数据库

docker run -p 10301:3306 --name mysql -v /docker/pro/mysql5.7/conf:/etc/mysql/conf.d -v /docker/pro/mysql5.7/logs:/logs -v /docker/pro/mysql5.7/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.32

config-service

docker run -p 10002:8080 -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.81.4:10001/ApolloConfigDB?characterEncoding=utf8" -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=123456 -e EUREKA_INSTANCE_HOMEPAGEURL=http://192.168.81.4:10002/ -d -v /docker/dev/apollo-config-1.7.1/logs:/opt/logs --name apollo-config-dev apolloconfig/apollo-configservice:1.7.1

#SPRING_DATASOURCE_URL: 对应环境ApolloConfigDB的地址 #SPRING_DATASOURCE_USERNAME: 对应环境ApolloConfigDB的用户名 #SPRING_DATASOURCE_PASSWORD: 对应环境ApolloConfigDB的密码

#EUREKA_INSTANCE_HOMEPAGEURL:对于的注册到eureka上的IP地址和端口

admin-service

docker run -p 10003:8090 \ -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.81.4:10001/ApolloConfigDB?characterEncoding=utf8" \ -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=123456 \ -d -v /docker/dev/apollo-admin-1.7.1/logs:/opt/logs --name apollo-admin-dev apolloconfig/apollo-adminservice:1.7.1 #SPRING_DATASOURCE_URL: 对应环境ApolloConfigDB的地址 #SPRING_DATASOURCE_USERNAME: 对应环境ApolloConfigDB的用户名 #SPRING_DATASOURCE_PASSWORD: 对应环境ApolloConfigDB的密码

生产环境

mysql数据库

docker run -p 10001:3306 --name mysql -v /docker/mysql5.7/conf:/etc/mysql/conf.d -v /docker/mysql5.7/logs:/logs -v /docker/mysql5.7/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.32

config-service

docker run -p 10302:8080 -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.81.4:10301/ApolloConfigDB?characterEncoding=utf8" -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=123456 -e EUREKA_INSTANCE_HOMEPAGEURL=http://192.168.81.4:10302/ -d -v /docker/pro/apollo-config-1.7.1/logs:/opt/logs --name apollo-config-dev apolloconfig/apollo-configservice:1.7.1

admin-service

docker run -p 10003:8090 \ -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.81.4:10001/ApolloConfigDB?characterEncoding=utf8" \ -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=123456 \ -d -v /docker/dev/apollo-admin-1.7.1/logs:/opt/logs --name apollo-admin-dev apolloconfig/apollo-adminservice:1.7.1

portal-service

docker run -p 10304:8070 \

-e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.81.4:10301/ApolloPortalDB?characterEncoding=utf8" \ -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=123456 \ -e APOLLO_PORTAL_ENVS=dev,pro \ -e DEV_META=192.168.81.4:10002 -e PRO_META=192.168.81.4:10302 \ -d -v /docker/pro/apollo-portal-1.7.1/logs:/opt/logs --name apollo-portal apolloconfig/apollo-portal:1.7.1

apollo整合spring-boot

https://www.cnblogs.com/huanchupkblog/p/10509427.html

https://blog.csdn.net/weixin_36171229/article/details/82056234 解决config-service的ip和端口问题

  • 添加apollo客户端的依赖

<dependency>
    <groupId>com.ctrip.framework.apollo</groupId>
    <artifactId>apollo-client</artifactId>
    <version>1.4.0</version>
</dependency>
  • 启动类配置@EnableApolloConfig

  • 修改配置文件

server:
  port: 8001
spring:
  application:
    name: product-service
​
#Apollo 配置
app:
  id:  product-service                         #应用ID,对应于apollo里的应用id
apollo:
  cacheDir: /opt/data/                       #配置本地配置缓存目录
  cluster: default                           #指定使用哪个集群的配置
  meta: http://192.168.81.4:10002            #DEV环境配置中心地址
  autoUpdateInjectedSpringProperties: true   #是否开启 Spring 参数自动更新
  bootstrap:
    enabled: true                            #是否开启 Apollo
    namespaces: application                  #设置 Namespace
    eagerLoad:
      enabled: true                         #将 Apollo 加载提到初始化日志系统之前
  • 服务启动时修改配置参数,设置其读取哪个环境的配置

 

 

  • 启动后读取config-service的地址错误问题:config-service在注册到eureka时没有设置ip和端口号,所以使用了默认的ip和端口。在启动config-service容器时添加参数-e EUREKA_INSTANCE_HOMEPAGEURL=http://192.168.81.4:10002/即可。

posted @ 2021-05-25 11:17  因为没游戏玩就学习了  阅读(542)  评论(0)    收藏  举报