1. 概念
https://ctripcorp.github.io/apollo/#/zh/README
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景
2.组件
架构视图
2.1 ConfigService
• 配置获取接口 • 配置推送接口 • 服务Apollo客户端
2.2 AdminService
• 配置管理接口 • 配置修改、发布接口 • 服务Portal
2.3 MetaServer 包装服务列表
• Portal通过域名访问Meta Server获取Admin Service服务列表 • Client通过域名访问Meta Server获取Config Service服务列表 • 相当于一个Eureka Proxy • 逻辑角色,和Config Service部署在一起
MetaServer的作用说明,按文档的分析就是MetaServer的作用是包装euraka采集的 ConfigService和AdminService的信息,然后交给Portal用来展示或者做其他的事情。
2.4 Eureka 服务注册与发现
• 服务注册和发现 • Config/AdminService注册并心跳 • 和ConfigService部署在一起
2.5 Portal 配置管理界面
• 配置管理界面 • 通过Meta Server获取AdminService服务列表 • 客户端软负载
2.6 Client客户端
• 应用获取配置,实时更新 • 通过Meta Server获取Config Service服务列表 • 客户端软负载(客户端负载均衡指的是把负载均衡的功能以库的方式集成到服务的消费方,而不再是由一台指定的负载均衡设备集中提供。)
3.部署
3.1 docker方式快速部署
安装docker步骤略过 1. 首先克隆 apollo的项目
```
https://gitee.com/nobodyiam/apollo
```
进入
apollo/scripts/docker-quick-start
目录 ,然后执行docker-compose up
命令Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
出现了started,you can visit ,就已经是启动成功了
docker 控制台也可以看到相应的应用
访问返回的地址
http://localhost:8070
即可进入相应的页面,初始用户名apollo,密码admin
3.2 分布式部署
3.2.1 本地使用docker的centos进行部署测试
拉取镜像
docker pull centos:7
启动容器
docker run -itd --privileged -p 20010:22 --name="centos-apollo" 5e35e350aded /usr/sbin/init
启动窗口后即可进入容器进行操作
docker exec -it 5171c1cdadcb /bin/bash
3.2.2 安装常用工具
安装常用工具
yum install -y openssh-server vim lrzsz wget gcc-c++ pcre pcre-devel zlib zlib-devel ruby openssl openssl-devel patch bash-completion zlib.i686 libstdc++.i686 lsof unzip zip
service安装
yum install initscripts
ifconfig安装
yum install net-tools.x86_64
ssh安装(10.0.75.1为docker的ip)
sshd rpm -qa | grep ssh yum install openssh-server service sshd restart #查看是否启动22端口 netstat -antp | grep sshd ``` #### 3.2.3 centos登录设置 1. 修改sshd_config 为密码登录
shell vim /etc/ssh/sshd_config #打开注释 PermitRootLogin yes, 允许密码登录,保存退出
2. 设置root用户密码
passwd root
3. 换个服务器远程登录
shell ssh root@47.52.134.16 -p 5022
以上三点参考文档 https://www.cnblogs.com/hcl1991/p/10599361.html #### 3.2.4 同步文件到容器内目录 使用docker cp命令同步apollo需要使用的宿主机文件到容器中 [宿主机拷文件到docker容器里面](https://blog.csdn.net/wejack/article/details/114281424)
domino@localhost Downloads % docker cp apollo-adminservice-1.8.1-github.zip e6ed3239253a:/root/soft domino@localhost Downloads % docker cp apollo-configservice-1.8.1-github.zip e6ed3239253a:/root/soft domino@localhost Downloads % docker cp apollo-portal-1.8.1-github.zip e6ed3239253a:/root/soft
#### 3.2.5 安装java
参考[使用yum方式给centos安装 java](https://blog.csdn.net/wejack/article/details/114265570
)
shell #列出参安装的java版本 [root@e6ed3239253a /]# yum -y list java* Loaded plugins: fastestmirror, ovl Loading mirror speeds from cached hostfile * base: mirrors.163.com * extras: mirrors.163.com * updates: mirrors.ustc.edu.cn Available Packages java-1.6.0-openjdk.x86_64 1:1.6.0.41-1.13.13.1.el7_3 base java-1.8.0-openjdk.x86_64 1:1.8.0.282.b08-1.el7_9 updates
我这安装的是1.8版本的jdk [root@e6ed3239253a /]# yum -y install java-1.8.0-openjdk.x86_64 Complete!
#### 3.2.6 将centos容器实例打为镜像,然后以此为基础创建多服务器实例
打镜像时要注意,镜像的名称必须为小写,否则会创建失败,打包可参考文档 [docker容器打包成镜像](https://blog.csdn.net/wejack/article/details/114281625)
`docker commit -m "镜像说明" 容器id 镜像名:标签`
shell Downloads % docker commit -m “apollo_centos_base” e6ed3239253a apollo_centos_base:2.0 sha256:1dc673d6d41a057207e8f32a99daa6e454c3b2320b22e8d8bf72b1e0e43649c0 Downloads % docker images REPOSITORY TAG IMAGE ID CREATED SIZE apollo_centos_base 2.0 1dc673d6d41a 33 seconds ago 886MB
我使用这个基础centos镜像创建了三个centos的容器,两个分别代表两个apollo的 configservice和admin service的环境,第三个安装apollo的portal
shell
docker run -itd –privileged -p 20011:22 –name=“centos-apollo-trunk” 1dc673d6d41a /usr/sbin/init
docker run -itd –privileged -p 20012:22 –name=“centos-apollo-neibu” 1dc673d6d41a /usr/sbin/init
docker run -itd –privileged -p 20013:22 –name=“centos-apollo-portal” 1dc673d6d41a /usr/sbin/init
<div align="center"><img src="https://wejack639.oss-cn-beijing.aliyuncs.com/blogimages/img/20220330144254.png" width = 900 /> </div>
#### 3.2.7 创建数据库
docker创建mysql数据库步骤略过,创建库所需要的sql在github项目中,数据库名与数据库文件名一致,每个环境要创建对应环境的数据库
scripts/sql/apolloconfigdb.sql scripts/sql/apolloportaldb.sql ```
我分别创建了一个trunk环境的apolloconfig库(开发环境),一个neibu环境的apolloconfig库(测试环境),和一个portal库
3.2.7 分别配置各个容器内的服务的配置文件
trunk与neibu的adminservice和configservice解压和配置,两个环境的操作类似
解压项目文件
~ % docker exec -it b0c18e04453c /bin/bash unzip ./apollo-adminservice-1.8.1-github.zip -d /root/app/apollo-adminservice/ [root@b0c18e04453c /]# cd /root/soft [root@b0c18e04453c soft]# unzip ./apollo-adminservice-1.8.1-github.zip -d /root/app/apollo-adminservice/ [root@b0c18e04453c soft]# unzip ./apollo-configservice-1.8.1-github.zip -d /root/app/apollo-configservice/
修改配置文件
#adminservice 数据库配置 [root@b0c18e04453c soft]#vi apollo-adminservice/config/application-github.properties # DataSource spring.datasource.url = jdbc:mysql://10.155.7.65:3306/ApolloConfigDB_trunk?characterEncoding=utf8 spring.datasource.username = root spring.datasource.password = 123456 #configservice 数据库配置 [root@b0c18e04453c app]# vi apollo-configservice/config/application-github.properties # DataSource spring.datasource.url = jdbc:mysql://10.155.7.65:3306/ApolloConfigDB_trunk?characterEncoding=utf8 spring.datasource.username = root spring.datasource.password = 123456
配置完后就可以分别启动adminservice和configservice
[root@b0c18e04453c app]# /root/app/apollo-configservice/scripts/startup.sh Tue Mar 2 07:01:26 UTC 2021 ==== Starting ==== Application is running as root (UID 0). This is considered insecure. Started [750] Waiting for server startup./r... . Tue Mar 2 07:01:57 UTC 2021 Server started in 30 seconds! [root@b0c18e04453c app]# /root/app/apollo-adminservice/scripts/startup.sh Tue Mar 2 07:02:06 UTC 2021 ==== Starting ==== Application is running as root (UID 0). This is considered insecure. Started [955] Waiting for server startup....... Tue Mar 2 07:02:41 UTC 2021 Server started in 35 seconds!
portal环境配置
解压portal项目文件到目录
[root@24556e6e825e /]# unzip /root/soft/apollo-portal-1.8.1-github.zip -d /root/app/apollo-portal Archive: /root/soft/apollo-portal-1.8.1-github.zip creating: /root/app/apollo-portal/config/ creating: /root/app/apollo-portal/scripts/ inflating: /root/app/apollo-portal/scripts/startup.sh inflating: /root/app/apollo-portal/apollo-portal-1.8.1.jar inflating: /root/app/apollo-portal/scripts/shutdown.sh inflating: /root/app/apollo-portal/config/app.properties inflating: /root/app/apollo-portal/apollo-portal-1.8.1-sources.jar inflating: /root/app/apollo-portal/apollo-portal.conf inflating: /root/app/apollo-portal/config/apollo-env.properties inflating: /root/app/apollo-portal/config/application-github.properties
配置portal项目配置文件
修改portal数据库配置文件
[root@24556e6e825e /]# vi /root/app/apollo-portal/config/application-github.properties # DataSource spring.datasource.url = jdbc:mysql://10.155.7.65:3306/ApolloPortalDB?characterEncoding=utf8 spring.datasource.username = root spring.datasource.password = 123456
portal自定义的环境是dev环境,在 apolloportaldb的 serviceconfig表中 的 key值为apollo.portal.envs 的值中定义了相应的环境,默认只有一个dev,需要改成需要的环境,我改为了trunk,neibu
修改环境配置文件,将需要的环境配置到apollo-env.properties文件中 .meta前的字符与环境相同
[root@24556e6e825e /]# vi /root/app/apollo-portal/config/apollo-env.properties local.meta=http://localhost:8080 trunk.meta=http://172.17.0.5:8080 neibu.meta=http://172.17.0.6:8080
启动服务 配置好以后就可以启动portal项目了,然后通过docker机的ip+项目端口就可以访问portal的服务了
[root@24556e6e825e /]# /root/app/apollo-portal/scripts/startup.sh Tue Mar 2 07:22:20 UTC 2021 ==== Starting ==== Application is running as root (UID 0). This is considered insecure. Started [313] Waiting for server startup...... Tue Mar 2 07:22:51 UTC 2021 Server started in 30 seconds!
使用 apollo/admin即可进行登录和使用,首次登录时右上角会有提示补缺环境的提示,然后在左下角点击补缺环境按钮,即可识别相应环境
由于我的笔记本是macos的,所以无法直接访问docker容器中的ip 按照以下文章打通了宿主机和docker中的网络,可以直接通过docker中的ip访问docker内的服务 https://blog.csdn.net/wejack/article/details/114268784 有另外两篇设置固定ip的文章 和装docker-connector的文章 ,按文章操作后均未成功
访问 trunk环境和neibu环境的机器ip+8080端口可以查看相应信息
172.17.0.5:8080 172.17.0.6:8080
文档可以参考apollo官方文档 添加自定义的环境