Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
本文将详述如何在单机环境中为单一环境(DEV环境)编译和安装Apollo服务器,包含以下三个服务:
- Apollo-ConfigService:提供配置管理服务,如果有多套环境,那么每个环境都需要部署。
- Apollo-AdminService:提供后台管理服务,如果有多套环境,那么每个环境都需要部署。
- Apollo-Portal:提供Web用户界面,只需要部署一个服务即可。
一、环境描述
1. 宿主机
- CPU:双核
- 内存:4 GB
- 硬盘:120 GB
- IP:192.168.190.129
- 操作系统:CentOS 6.9 x86_64 Minimal
2. OpenJDK
- 版本:openjdk version “1.8.0_161”
- 安装方式:yum
3. MySQL
- 版本:mysql Ver 14.14 Distrib 5.7.22, for Linux (x86_64) using EditLine wrapper
- 安装方式:yum
4. Maven
- 版本:Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T15:58:13+08:00)
- 安装方式:yum
5. Eureka
- 版本:1.2.3
- 安装方式:Spring Cloud Netflix
二、安装Java环境
1. 导入epel镜像源
在shell中运行以下命令,导入epel镜像源:
yum install -y epel-release
2. 安装OpenJDK
在shell中运行以下命令,安装OpenJDK 1.8.0:
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
3. 验证
在shell中运行以下命令,查看java的版本号:
java -version
若上述命令的输出信息如下图所示,则表示安装成功:
三、安装MySQL数据库
1. 导入MySQL镜像源
在shell中运行以下命令,导入MySQL的官方镜像源:
rpm -ivh https://repo.mysql.com//mysql57-community-release-el6-11.noarch.rpm
2. 安装MySQL
在shell中运行以下命令,安装MySQL:
yum install -y mysql-community-server
3. 启动MySQL服务
在shell中运行以下命令,启动MySQL服务:
service mysqld start
4. 修改初始密码
由于MySQL在初次启动时会生成随机的初始密码,因此需要在shell中运行以下命令,修改root用户的登录密码:
init_passwd=$(sed -rn 's/^(.*)(root@localhost: )(.*)$/\3/p' /var/log/mysqld.log)
mysql --user=root --password=${init_passwd} --connect-expired-password --execute="ALTER USER 'root'@'localhost' IDENTIFIED BY '123.Org$%^';"
mysql --user=root --password=123.Org$%^ --execute="GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123.Org$%^' WITH GRANT OPTION;"
mysql --user=root --password=123.Org$%^ --execute="FLUSH PRIVILEGES;"
注意,本文将MySQL的登录密码设置为123.Org$%^
,请根据自身情况设置实际的登录密码。
5. 验证
在shell中运行以下命令,查看MySQL的版本号:
mysql --user=root --password=123.Org$%^ -e "select version();"
若上述命令的输出信息如下图所示,则表示MySQL的安装、修改密码和服务启动均已成功:
四、安装Maven工具
1. 导入Maven镜像源
在shell中运行以下命令,安装wget工具,然后导入maven的镜像源:
yum install -y wget
wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
2. 安装Maven
在shell中运行以下命令,安装Maven:
yum install -y apache-maven
3. 验证
在shell中运行以下命令,查看Maven的版本号:
mvn --version
若上述命令的输出信息如下图所示,则表示安装成功:
五、编译和安装Apollo服务
1. 安装Git客户端
在shell中运行以下命令,安装Git客户端:
yum install -y git
2. 克隆Apollo代码库
在shell中运行以下命令,将Apollo的源码克隆至本地:
cd /root/Downloads
git clone https://github.com/ctripcorp/apollo.git
cd apollo
3. 初始化ApolloPortalDB数据库
Apollo-Portal服务会使用ApolloPortalDB数据库,只需要部署一个ApolloPortalDB数据库。在shell中运行以下命令,初始化ApolloPortalDB数据库:
mysql --user=root --password=123.Org$%^ < scripts/sql/apolloportaldb.sql
在shell中运行以下命令,查看ApolloPortalDB数据库的结构:
mysql --user=root --password=123.Org$%^ -e "use ApolloPortalDB;show tables;"
若上述命令的输出信息如下图所示,则表示数据库初始化成功:
4. 初始化ApolloConfigDB数据库
Apollo-ConfigService和Apollo-AdminService服务会使用ApolloConfigDB数据库,如果有多套环境,那么每个环境都需要部署一个ApolloConfigDB数据库。在shell中运行以下命令,初始化ApolloConfigDB数据库:
mysql --user=root --password=123.Org$%^ < scripts/sql/apolloconfigdb.sql
在shell中运行以下命令,查看ApolloConfigDB数据库的结构:
mysql --user=root --password=123.Org$%^ -e "use ApolloConfigDB;show tables;"
若上述命令的输出信息如下图所示,则表示数据库初始化成功:
5. 配置数据库连接
在shell中运行以下命令,配置build.sh
构建脚本的数据库连接:
sed -i "4s/localhost/192.168.190.129/g" scripts/build.sh
sed -i "6s/apollo_config_db_password=/apollo_config_db_password=123.Org$%^/g" scripts/build.sh
sed -i "9s/localhost/192.168.190.129/g" scripts/build.sh
sed -i "11s/apollo_portal_db_password=/apollo_portal_db_password=123.Org$%^/g" scripts/build.sh
6. 配置meta service地址
在shell中运行以下命令,配置build.sh
服务脚本的meta service地址,只启用DEV环境:
sed -i "14s/localhost/192.168.190.129/g" scripts/build.sh
sed -i "15s/fat_meta/# fat_meta/g" scripts/build.sh
sed -i "16s/uat_meta/# uat_meta/g" scripts/build.sh
sed -i "17s/pro_meta/# pro_meta/g" scripts/build.sh
7. 配置apollo-configservice服务
在shell中运行以下命令,修改apollo-configservice服务的启动脚本:
sed -i "4s/LOG_DIR=\/opt\/logs\/100003171/LOG_DIR=\/var\/log\/apollo\/configservice/g" apollo-configservice/src/main/scripts/startup.sh
sed -i "19s/localhost/192.168.190.129/g" apollo-configservice/src/main/scripts/startup.sh
8. 配置apollo-adminservice服务
在shell中运行以下命令,修改apollo-adminservice服务的启动脚本:
sed -i "4s/LOG_DIR=\/opt\/logs\/100003172/LOG_DIR=\/var\/log\/apollo\/adminservice/g" apollo-adminservice/src/main/scripts/startup.sh
sed -i "19s/localhost/192.168.190.129/g" apollo-adminservice/src/main/scripts/startup.sh
9. 配置apollo-portal服务
在shell中运行以下命令,修改apollo-portal服务的启动脚本:
sed -i "4s/LOG_DIR=\/opt\/logs\/100003173/LOG_DIR=\/var\/log\/apollo\/portal/g" apollo-portal/src/main/scripts/startup.sh
sed -i "6s/8080/8070/g" apollo-portal/src/main/scripts/startup.sh
sed -i "19s/localhost/192.168.190.129/g" apollo-portal/src/main/scripts/startup.sh
注意,原始启动脚本中的端口号是8080,这样便和apollo-configservice服务的端口号相冲突,此处需要改成8070。
10. 编译和打包
在shell中运行以下命令,编译和打包Apollo:
cd scripts
./build.sh
yum install -y unzip
注意,由于Apollo的客户端并没有上传至Maven中央仓库,因此可以将编译得到的apollo-client-0.11.0-SNAPSHOT.jar
文件上传至私有仓库,该文件存放在/root/Downloads/apollo/apollo-client/target
目录之中。
11. 部署apollo-configservice服务
在shell中运行以下命令,拷贝编译和打包得到的zip文件,然后解压缩,最后启动apollo-configservice服务:
cd /root/Downloads
cp apollo/apollo-configservice/target/apollo-configservice-0.11.0-SNAPSHOT-github.zip ./
unzip -d apollo-configservice apollo-configservice-0.11.0-SNAPSHOT-github.zip
cd apollo-configservice
scripts/startup.sh
注意,可以将此处的apollo-configservice-0.11.0-SNAPSHOT-github.zip
文件保存至其他地方,以后制作Docker镜像时会用到。
注意,apollo-configservice服务启动时,日志会输出Eureka相关的异常或错误,这是因为这个服务同时身兼Eureka的服务端和客户端,当客户端需要注册和获取信息时,服务端尚未启动完成,此时便会出错,可以忽略这些出错信息!
在shell中运行以下命令,查看apollo-configservice服务的健康状态:
curl http://192.168.190.129:8080/health
若上述命令的输出信息如下图所示,则表示服务成功启动:
12. 部署apollo-adminservice服务
在shell中运行以下命令,拷贝编译和打包得到的zip文件,然后解压缩,最后启动apollo-adminservice服务:
cd /root/Downloads
cp apollo/apollo-adminservice/target/apollo-adminservice-0.11.0-SNAPSHOT-github.zip ./
unzip -d apollo-adminservice apollo-adminservice-0.11.0-SNAPSHOT-github.zip
cd apollo-adminservice
scripts/startup.sh
注意,可以将此处的apollo-adminservice-0.11.0-SNAPSHOT-github.zip
文件保存至其他地方,以后制作Docker镜像时会用到。
在shell中运行以下命令,查看apollo-adminservice服务的健康状态:
curl http://192.168.190.129:8090/health
若上述命令的输出信息如下图所示,则表示服务成功启动:
13. 部署apollo-portal
在shell中运行以下命令,拷贝编译和打包得到的zip文件,然后解压缩,最后启动apollo-portal服务:
cd /root/Downloads
cp apollo/apollo-portal/target/apollo-portal-0.11.0-SNAPSHOT-github.zip ./
unzip -d apollo-portal apollo-portal-0.11.0-SNAPSHOT-github.zip
cd apollo-portal
scripts/startup.sh
注意,可以将此处的apollo-portal-0.11.0-SNAPSHOT-github.zip
文件保存至其他地方,以后制作Docker镜像时会用到。
在shell中运行以下命令,查看apollo-portal服务的健康状态:
curl http://192.168.190.129:8070/health
若上述命令的输出信息如下图所示,则表示服务成功启动:
六、验证测试
在Web浏览器中访问Eureka服务端页面,URL如下所示:
http://192.168.190.129:8080/
若apollo-configservice和apollo-adminservice服务在Eureka注册成功,则应该如下图所示:
在Web浏览器中访问Apollo配置中心页面,URL如下所示:
http://192.168.190.129:8070/signin
在登录页面填写默认的用户名/密码,分别是apollo/admin,登录成功后便进入控制台首页,如下图所示:
七、结语
从安装过程可知,Apollo的资源耗费比较多,部署架构如下图所示:
如果某个公司有四套环境,例如:DEV、QA、PRE、PROD,那么在不考虑HA的情况下,Apollo需要10台服务器才能正常工作,如下所示:
- Apollo-Portal服务:需要1台服务器
- ApolloPortalDB数据库:需要1台服务器
- Apollo-ConfigService/Apollo-AdminService服务:每个环境需要1台服务器,共需要4台
- ApolloConfigDB数据库:每个环境需要1台服务器,共需要4台
如果采用容器化的部署方式,应该可以减少资源消耗,接下来将研究如何制作Apollo各个服务的Docker镜像,以及如何容器化部署Apollo服务器。