apollo分布式部署之Portal
# 一、单机部署
在仔细研究了apollo的部署架构之后,发现专门进行单机安装的讲解意义不大。因为apollo本身就是使用Spring Cloud开发的,它的服务的高可用设计都是基于我们之前讲过的“服务注册与发现”。
- config-service和adminservice的部署:
- 单机安装就是服务部署到同一主机上,启动一个实例,向eureka(apollo的config-service本身)注册一次
- 分布式安装就是服务部署到不同主机上,每个服务启动多个实例,向eureka(apollo的config-service本身)注册多次
- 服务注册中心的portal界面应用本身不需要进行集群高可用部署,因为它就是一个web页面,供给团队内部进行配置管理使用的。即使挂掉了也没有很大关系,也不影响线上服务的正常运行。当然如果你希望部署多个也是可以的,启动多个实例就可以了。
所以单机安装和分布式安装的内容差异极小,我们就直接讲解“分布式部署”。另外,apollo官方专门在github上开辟了一个项目:apollo-build-scripts (opens new window),该项目包含了进行apollo部署所需的脚本。通常安装apollo的单机模式有两种方法,大家可以去参考一下:
但笔者觉得用这种封装好的脚本学习部署,反而容易对初学者造成困扰,不易于理解。总之,见仁见智吧!
# 二、安装前的准备工作
# 基础软件版本要求
- Java版本最低要求
- Apollo服务端:1.8+
- Apollo客户端:1.7+
- MySQL版本要求:5.6.5+
Apollo的表结构对
timestamp
使用了多个default声明,所以需要5.6.5以上版本。 mysql版本检查命令如下:
SHOW VARIABLES WHERE Variable_name = 'version';
# 下载apollo安装包
https://github.com/ctripcorp/apollo/releases
可以笼统的认为:
- portal就是apollo配置管理的“脸面”,WEB管理界面。portal一般是要部署在生产环境主机上的。
- config-service和admin-service就是“环境管理服务”。生产环境部署一套、测试环境部署一套、研发环境部署一套……
# 二、portal安装步骤
# 2.1 创建数据库
Apollo Portal有自己的数据库ApolloPortalDB
,官方把数据库、表的创建和样例数据都分别准备了sql文件,只需要导入数据库即可。
- 管理员账号执行初始化SQL:sql/apolloportaldb.sql (opens new window),包含建库、建表及示例数据
# 用管理员账号登录mysql之后执行命令,创建数据库、建表及插入示例数据。
mysql > source 你的SQL所在的linux文件路径/apolloportaldb.sql
2
虽然我们用管理员账户创建数据库,但是我们一般不用管理员用户访问业务数据库,所以我建立了一个test用户,并对其进行赋权。
CREATE USER 'test'@'%' IDENTIFIED BY '你的密码';
GRANT ALL ON ApolloPortalDB.* TO 'test'@'%' IDENTIFIED BY '你的密码'; //只有执行了这一句才可以远程登陆
FLUSH PRIVILEGES;
2
3
# 2.2 目录结构说明
将apollo-portal.zip安装包上传到服务器并解压
#在当前目录下创建portal 目录,并将文件解压到里面
mkdir ./portal && unzip apollo-portal-1.6.1-github.zip -d ./portal
2
解压之后目录结构如下
# 2.3.数据库配置修改
apollo-portal-1.6.1-github.zip包解压出来有一个config/application-github.properties文件,修改其中的mysql ip地址、端口、用户名、密码信息,指向ApolloPortalDB所在的mysql数据库。
- 根据你的数据库ApolloPortalDB地址将localhost修改为数据库主机ip
- 根据你的ApolloPortalDB实际数据库修改用户名密码,我的用户名是test(上文新建的)
# DataSource
spring.datasource.url = jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username = test
spring.datasource.password = 你的mysql用户密码
2
3
4
# 2.4.多环境配置文件
Apollo Portal支持多环境配置,其配置文件是config/apollo-env.properties。Apollo Portal需要根据环境的不同,访问不同的meta service(apollo-configservice)地址,所以需要在配置中提供ConfigService服务地址信息。
local.meta=http://localhost:8080
dev.meta=http://fill-in-dev-meta-server:8080
fat.meta=http://fill-in-fat-meta-server:8080
uat.meta=http://fill-in-uat-meta-server:8080
lpt.meta=${lpt_meta}
pro.meta=http://fill-in-pro-meta-server:8080
2
3
4
5
6
因为我们还没部署任何生产、测试、或者其他环境,所以暂时将文件内容删掉即可(上面的配置是文件内的默认配置,删掉)。
apollo默认支持的环境单词缩写解释:
- LOCAL:本地开发环境
- DEV:开发环境
- FWS:功能Web服务测试环境
- FAT:功能验收测试环境
- UAT:用户接受度测试环境
- LPT:负载和性能测试环境
- PRO:生产环境
- TOOLS:工具环境,生产环境中的一个特殊区域,它允许访问测试环境,例如Apollo Portal应该部署在工具环境中。
# 三、启动Apollo配置中心
# 3.1 修改端口
apollo portal的默认端口是8070,不好,一方面容易发生冲突,一方面容易被安全攻击。所以我们改一下端口,改成不常用的即可,我改成9430。
修改scripts/startup.sh脚本(注意该启动脚本里面还指定了日志文件的位置:LOG_DIR,看日志去这里)
同时要把这个端口在防火墙上开放出来
firewall-cmd --zone=public --add-port=9430/tcp --permanent;
firewall-cmd --reload
2
# 3.2 执行启动脚本
进入scripts目录下,执行startup.sh脚本
./startup.sh
如果你去LOG_DIR目录下查看日志,会发现日志中有一些connect timed out(连接超时的异常),这是因为ApolloPortalDB中有一些默认的DEV环境配置,而我们还没有搭建任何的环境,只是搭建了一个统一管理中心的界面应用portal。所以connect timed out(连接超时的异常)可以暂时忽略。
# 四、安装结果
访问:http://apollo-portal主机ip:9430/,出现下面的界面 (opens new window)
输入用户名、密码 apollo/admin,登陆成功就表示我们安装成功了。