1.Apollo
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。
2.Apollo部署
2.1 docker-compose安装
获取docker-compose资源
链接:https://pan.baidu.com/s/1-6OZkGotta7eMW18GG6wsw?pwd=249c
提取码:249c
2.2 配置docker-compose
[root@localhost apollo]# cat docker-compose.yaml
version: "3.7"
services:
mysql:
container_name: mysql
image: mysql:5.7.18
environment:
- "MYSQL_ROOT_PASSWORD=123456"
- "TZ=Asia/Shanghai"
restart: always
command: --max-connections=1000 --server-id=1 --log-bin=mysql-bin
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
interval: 5s
timeout: 1s
retries: 10
volumes:
#- ./mysql/mydir:/mydir
- ./mysql/data:/var/lib/mysql
#- ./mysql/conf/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf # 本地存放配置文件
- ./mysql/source:/docker-entrypoint-initdb.d # 全备备份sql文件放置到此目录下
#ports:
# - 3306:3306
#networks:
#- apollo_net
apollo-configservice:
container_name: apollo-configservice
image: apolloconfig/apollo-configservice:2.1.0
restart: always
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8&useSSL=false&serverTimezone=GMT
- SPRING_DATASOURCE_USERNAME=root
- SPRING_DATASOURCE_PASSWORD=123456
volumes:
- /tmp/logs:/opt/logs
healthcheck:
test: ["CMD", "curl" ,"localhost:8080/health"]
interval: 5s
timeout: 1s
retries: 10
depends_on:
mysql:
condition: service_healthy
ports:
- 8080:8080
- 8090:8090
networks:
- apollo_net
apollo-adminservice:
container_name: apollo-adminservice
image: apolloconfig/apollo-adminservice:2.1.0
restart: always
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/ApolloConfigDB?characterEncoding=utf8&useSSL=false&serverTimezone=GMT
- SPRING_DATASOURCE_USERNAME=root
- SPRING_DATASOURCE_PASSWORD=123456
volumes:
- /tmp/logs:/opt/logs
healthcheck:
test: ["CMD", "curl" ,"localhost:8090/health"]
interval: 5s
timeout: 1s
retries: 10
depends_on:
apollo-configservice:
condition: service_healthy
network_mode: "service:apollo-configservice"
apollo-portal:
container_name: apollo-portal
image: apolloconfig/apollo-portal:2.1.0
restart: always
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/ApolloPortalDB?characterEncoding=utf8&useSSL=false&serverTimezone=GMT
- SPRING_DATASOURCE_USERNAME=root
- SPRING_DATASOURCE_PASSWORD=123456
- APOLLO_PORTAL_ENVS=pro #注意这里,如果要修改不同环境名,则数据库也必须修改 ApolloPortalDB.ServerConfig 中 apollo.portal.envs 该行的信息,否则启动会发生报错
- PRO_META=http://apollo-configservice:8080 # 这里需要写环境名对应的 configservice 服务。
volumes:
- /tmp/logs:/opt/logs
healthcheck:
test: ["CMD", "curl" ,"localhost:8070/health"]
interval: 5s
timeout: 1s
retries: 10
depends_on:
apollo-adminservice:
condition: service_healthy
apollo-configservice:
condition: service_healthy
ports:
- 8070:8070
networks:
- apollo_net
networks:
apollo_net:
name: apollo_net
driver: bridge
ipam:
config:
- subnet: "172.100.0.0/16"
2.3 Apollo默认会启动3个服务
root@localhost(192.168.199.52)~/apollo>docker-compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
apollo-adminservice apolloconfig/apollo-adminservice:2.1.0 "/apollo-adminservic…" apollo-adminservice 3 minutes ago Up 3 minutes (healthy)
apollo-configservice apolloconfig/apollo-configservice:2.1.0 "/apollo-configservi…" apollo-configservice 3 minutes ago Up 3 minutes (healthy) 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:8090->8090/tcp, :::8090->8090/tcp
apollo-portal apolloconfig/apollo-portal:2.1.0 "/apollo-portal/scri…" apollo-portal 3 minutes ago Up 3 minutes (healthy) 0.0.0.0:8070->8070/tcp, :::8070->8070/tcp
mysql mysql:5.7.18 "docker-entrypoint.s…" mysql 3 minutes ago Up 3 minutes (healthy) 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp
root@loc
- 启动apollo-configservice,Configservice提供配置的读取、推送等功能,服务对象是Apollo客户端
- 启动apollo-adminservice,与上面类似.Adminservice提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面)
- Apollo Portal 管理界面
3.Apollo使用
3.1 登录
登录用户和密码apollo/admin
3.2 配置apollo测试样例
3.2.1安装maven和jdk
root@localhost(192.168.199.52)~>java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
root@localhost(192.168.199.52)~>
# tar xf apache-maven-3.8.1-bin.tar.gz -C /usr/local/
# cat <<EOF>> /etc/profile.d/maven.sh
export PATH=\$PATH:/usr/local/apache-maven-3.8.1/bin/
EOF
# source /etc/profile.d/maven.sh
# mvn -v
Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d)
Maven home: /usr/local/apache-maven-3.8.1
Java version: 1.8.0_77, vendor: Oracle Corporation, runtime: /usr/local/jdk1.8.0_77/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix"
3.2.2 修改maven源
...
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
...
3.2.3 配置测试用例
root@localhost(192.168.199.52)~>ls
anaconda-ks.cfg apollo/ springboot-apollo-demo.tar.gz
root@localhost(192.168.199.52)~>tar -xzvf springboot-apollo-demo.tar.gz
springboot-apollo-demo/
springboot-apollo-demo/Dockerfile
springboot-apollo-demo/README.md
springboot-apollo-demo/deploy.yaml
springboot-apollo-demo/pom.xml
springboot-apollo-demo/src/
springboot-apollo-demo/src/main/
springboot-apollo-demo/src/main/java/
springboot-apollo-demo/src/main/java/club/
springboot-apollo-demo/src/main/java/club/mydlq/
springboot-apollo-demo/src/main/java/club/mydlq/demo/
springboot-apollo-demo/src/main/java/club/mydlq/demo/Application.java
springboot-apollo-demo/src/main/java/club/mydlq/demo/TestController.java
springboot-apollo-demo/src/main/resources/
springboot-apollo-demo/src/main/resources/application.yaml
root@localhost(192.168.199.52)~>
3.2.3.1 修改jar的配置文件指向apollo
root@localhost(192.168.199.52)~/springboot-apollo-demo/src/main/resources>pwd
/root/springboot-apollo-demo/src/main/resources
root@localhost(192.168.199.52)~/springboot-apollo-demo/src/main/resources>vim application.yaml
#应用配置
server:
port: 7070
spring:
application:
name: apollo-test
#Apollo 配置
app:
id: apollo-test #应用ID
apollo:
cacheDir: /opt/data/ #配置本地配置缓存目录
cluster: shanghai #指定使用哪个集群的配置
meta: http://192.168.199.52:8080 #配置中心地址
autoUpdateInjectedSpringProperties: true #是否开启 Spring 参数自动更新
bootstrap:
enabled: true #是否开启 Apollo
# namespaces: dev-2 #设置 Namespace
eagerLoad:
enabled: false #将 Apollo 加载提到初始化日志系统之前
3.2.3.2 mvn打包
root@localhost(192.168.199.52)~/springboot-apollo-demo>pwd
/root/springboot-apollo-demo
root@localhost(192.168.199.52)~/springboot-apollo-demo>mvn clean package
3.2.3.3 启动测试jar包
root@localhost(192.168.199.52)~/springboot-apollo-demo>cd target/
root@localhost(192.168.199.52)~/springboot-apollo-demo/target>ls
apollo-demo-0.0.1.jar apollo-demo-0.0.1.jar.original classes/ generated-sources/ maven-archiver/ maven-status/
root@localhost(192.168.199.52)~/springboot-apollo-demo/target>java -jar apollo-demo-0.0.1.jar
3.3 创建apollo
3.3.1 为程序添加变量
3.3.2 测试
测试目标:测试当apollo中修改参数值后客户端是否能及时刷新。
接下来,通过修改 test 的值来尝试是否热加载。
3.3.3 apollo挂掉
当客户端不能连接到 Apollo 配置中心时候,默认使用本地缓存文件中的配置。
删除缓存配置文件后,输出的值为程序定义的默认值。
[root@localhost apollo]# cat /opt/data/apollo-test/config-cache/apollo-test+shanghai+application.properties
#Persisted by DefaultConfig
#Wed Sep 13 17:07:48 CST 2023
test=qqqqqqqqqqqqqq