如何编译安装Apollo服务器(单机版)

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

若上述命令的输出信息如下图所示,则表示安装成功:

查看Java版本

三、安装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的安装、修改密码和服务启动均已成功:

查看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

若上述命令的输出信息如下图所示,则表示安装成功:

查看Maven版本

五、编译和安装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;"

若上述命令的输出信息如下图所示,则表示数据库初始化成功:

查看ApolloPortalDB的结构

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;"

若上述命令的输出信息如下图所示,则表示数据库初始化成功:

查看ApolloConfigDB的结构

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

若上述命令的输出信息如下图所示,则表示服务成功启动:

查看Apollo-ConfigService的健康状态

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

若上述命令的输出信息如下图所示,则表示服务成功启动:

查看Apollo-AdminService的健康状态

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

若上述命令的输出信息如下图所示,则表示服务成功启动:

查看Apollo-Portal的健康状态

六、验证测试

在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-Portal系统

七、结语

从安装过程可知,Apollo的资源耗费比较多,部署架构如下图所示:

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服务器。