下图是Apollo架构模块的概览:
上图简要描述了Apollo的总体设计,我们可以从下往上看:
- Config Service提供配置的读取、推送等功能,服务对象是Apollo客户端
- Admin Service提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面)
- Config Service和Admin Service都是多实例、无状态部署,所以需要将自己注册到Eureka中并保持心跳
- 在Eureka之上我们架了一层Meta Server用于封装Eureka的服务发现接口
- Client通过域名访问Meta Server获取Config Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Client侧会做load balance、错误重试
- Portal通过域名访问Meta Server获取Admin Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Portal侧会做load balance、错误重试
部署
环境说明:
centos7.9
openjdk version “1.8.0_262”
mysql5.7
dev:192.168.146.141
pro:192.168.146.139
1.创建数据库(dev/pro)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
mkdir /etc/docker/
cat >/etc/docker/daemon.json <<EOF
{
"graph": "/data/docker",
"storage-driver": "overlay2",
"insecure-registries": ["registry.access.redhat.com","quay.io"],
"registry-mirrors": ["https://q2gr04ke.mirror.aliyuncs.com"],
"bip": "172.0.137.1/24",
"exec-opts": ["native.cgroupdriver=systemd"],
"live-restore": true
}
EOF
mkdir -p /data/docker
systemctl start docker
systemctl status docker
systemctl enable docker
docker --version
docker run -itd --name mysql --restart=always -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -v /data/mysql/data:/var/lib/mysql mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
# docker exec -it mysql /bin/bash
# mysql -u root -p123456
mysql> grant all on *.* to 'apollo'@'%' identified by '123456';
mysql> flush privileges;
mysql> exit;
# exit
完成准备工作后,第一步是创建相应的数据库。因为Apollo依赖于MySQL数据库,所以需要事先创建并完成库表的初始化。分布式部署Apollo服务需要将ApolloPortalDB和ApolloConfigDB两个数据库分别在不同的MySQL实例上创建。
当然,如果不需要分开管理的话,也可以在一个MySQL实例中创建。官方把数据库、表的创建和样例数据都分别准备了SQL文件,我们只需要导入数据库即可。SQL文件的地址如下:
- https://github.com/ctripcorp/apollo/tree/master/scripts/sql
需要注意的是ApolloPortalDB只需要在生产环境部署一个即可,而ApolloConfigDB需要在每个环境部署一套,如fat、uat和pro环境分别部署3套ApolloConfigDB。我这里是在dev和pro分别部署了一个MySQL实例。
导入sql文件
dev
mysql -h 192.168.146.141 -uapollo -p123456 < apolloconfigdb.sql
pro
mysql -h 192.168.146.139 -uapollo -p123456 < apolloconfigdb.sql
mysql -h 192.168.146.139 -uapollo -p123456 < apolloportaldb.sql
注意:这里导完数据后还需要修改ServerConfig里面的数据
获取安装包
需要的安装包共有3个:
- apollo-configservice
- apollo-adminservice
- apollo-portal
- https://github.com/ctripcorp/apollo/releases
[root@dev src]# ls
apollo-adminservice-1.8.0-github.zip apolloconfigdb.sql apollo-configservice-1.8.0-github.zip
部署Apollo Config Server (dev/pro)
[root@dev /usr/local/src]# mkdir /usr/local/apollo-configservice
[root@dev /usr/local/src]# unzip apollo-configservice-1.8.0-github.zip -d /usr/local/apollo-configservice
[root@dev /usr/local/src]# mkdir /usr/local/apollo-adminservice
[root@dev /usr/local/src]# unzip apollo-adminservice-1.8.0-github.zip -d /usr/local/apollo-adminservice/
配置apollo-configservice的数据库连接信息:
[root@dev /usr/local/src]# cd /usr/local/apollo-configservice/
[root@dev /usr/local/apollo-configservice]# vim config/application-github.properties
# DataSource
spring.datasource.url = jdbc:mysql://dev:3306/ApolloConfigDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
spring.datasource.username = apollo
spring.datasource.password = 123456
配置apollo-adminservice的数据库连接信息:
[root@dev /usr/local/apollo-configservice]# cd ../apollo-adminservice/
[root@dev /usr/local/apollo-adminservice]# vim config/application-github.properties
# DataSource
spring.datasource.url = jdbc:mysql://dev:3306/ApolloConfigDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
spring.datasource.username = apollo
spring.datasource.password = 123456
pro配置的时候注意修改dev为pro
如果需要调整apollo-configservice和apollo-adminservice的JVM启动参数、服务监听端口以及日志文件存放目录等配置,可以在其安装目录下的scripts/startup.sh脚本中进行修改:
如果需要修改JVM参数,可以修改scripts/startup.sh的JAVA_OPTS部分
如要调整服务的日志输出路径,可以修改scripts/startup.sh和apollo-configservice.conf中的LOG_DIR
如要调整服务的监听端口,可以修改scripts/startup.sh中的SERVER_PORT。另外由于apollo-configservice同时承担meta server职责,如果要修改端口,注意要同时修改ApolloConfigDB.ServerConfig表中的eureka.service.url配置项以及apollo-portal和apollo-client中的使用到的meta server信息
启动apollo-configservice:
[root@dev /usr/local/apollo-configservice]# scripts/startup.sh
netstat -lntp |grep 8080
启动apollo-adminservice:
[root@dev /usr/local/apollo-adminservice]# scripts/startup.sh
netstat -lntp |grep 8090
部署Apollo Portal Server (pro)
[root@pro /usr/local/src]# mkdir /usr/local/apollo-portal
[root@pro /usr/local/src]# unzip apollo-portal-1.8.0-github.zip -d /usr/local/apollo-portal/
配置apollo-portal的数据库连接信息:
[root@pro /usr/local/src]# cd /usr/local/apollo-portal/
[root@pro /usr/local/apollo-portal]# vim config/application-github.properties
# DataSource
spring.datasource.url = jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
spring.datasource.username = apollo
spring.datasource.password = 123456
然后就是配置apollo-portal的meta service信息。Apollo Portal需要在不同的环境访问不同的meta service(apollo-configservice)地址,所以我们需要在配置中提供这些信息。
默认情况下,meta service和config service是部署在同一个JVM进程,所以meta service的地址就是config service的地址。配置项的格式为env.meta=http://{config-service-url:port},如下所示:
[root@pro /usr/local/apollo-portal]# vim config/apollo-env.properties
dev.meta=http://dev:8080
pro.meta=http://prod:8080
启动apollo-portal:
[root@pro /usr/local/apollo-portal]# scripts/startup.sh
netstat -lntp |grep 8070
启动成功后,通过浏览器访问pro的8070端口:
apollo/admin
点击创建项目
注意:appid一定要唯一,不然后面环境会显示不出来
点击新增配置
然后点击发布
然后就是使用客户端来连接配置中心,未完持续。。。
https://github.com/multilinguals/apollo-php-client