继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Apollo分布式配置中心简易环境部署

PIPIONE
关注TA
已关注
手记 1063
粉丝 147
获赞 702


Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

github地址为:

https://github.com/ctripcorp/apollo

该项目提供了两种部署方式:本地部署和分布式部署。生产环境建议使用“分布式部署”。

因最近项目有使用配置中心的需求,在综合分析了apollo、Qconf、SpringCloud Config等一系列分布式配置中心后,初步选定apollo。

官方提供的分布式部署架构适合大规模集群环境。在其总体架构基础上做了精简,力求先跑起来,给开发部门提供环境,测试。

一、环境准备

1.服务器信息及节点介绍

主机名称    IP  备注

hadoop02.ok.com 10.150.27.65    Portalserver/Configserver/adminserver and MySQL

APPCAN-T-APP-6  10.150.27.65    Configserver/adminserver and MySQL

软件版本:

JAVA:

[root@appcan-t-app-7 scripts]# java -version

java version "1.8.0_60"

Java(TM) SE Runtime Environment (build 1.8.0_60-b27)

Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

MAVEN:

[root@appcan-t-app-7 scripts]# mvn -version

Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-25T03:49:05+08:00)

Maven home: /usr/local/apache-maven-3.5.3

Java version: 1.8.0_60, vendor: Oracle Corporation

Java home: /usr/local/jdk1.8.0_60/jre

Default locale: zh_CN, platform encoding: UTF-8

OS name: "linux", version: "3.10.0-327.el7.x86_64", arch: "amd64", family: "unix"

MySQL:

[root@appcan-t-app-7 scripts]# mysql -uroot -p

mysql> select version(); 

+---------------+

| version()     |

+---------------+

| 5.7.19-17-log |

+---------------+

1 row in set (0.01 sec)

架构图如下:

架构图

说明:

Portal部署在10.150.27.65上,通过它来直接管理DEV、PRO环境的配置,FAT和UAT环境暂没使用到。

Meta Server、Config Service和Admin Service在DEV和PRO环境都单独部署,使用独立的数据库。

Meta Server和Config Service部署在同一个JVM进程内,Admin Service部署在同一台服务器的另一个JVM进程内。

二、部署步骤:

1.clone项目至本地目录(/home/ok)

clone https://github.com/ctripcorp/apollo.git

2.创建数据库

Apollo服务端共需要两个数据库:ApolloPortalDB和ApolloConfigDB,数据库、表的创建和样例数据的sql文件在项目当中(/home/ok/apollo/scripts/sql),只需要导入数据库即可。

需要注意的是ApolloPortalDB只需要部署一个即可,而ApolloConfigDB需要在每个环境部署一套,如本案例中dev和pro分别部署两套ApolloConfigDB。

3.创建ApolloPortalDB

导入sql文件:

mysql> source /home/ok/apollo/scripts/sql/apolloportaldb.sql;

验证:

mysql> select `Id`, `Key`, `Value`, `Comment` from `ApolloPortalDB`.`ServerConfig` limit 1;

+----+--------------------+---------+--------------------------+

| Id | Key                | Value   | Comment                  |

+----+--------------------+---------+--------------------------+

|  1 | apollo.portal.envs | dev | 可支持的环境列表         |

+----+--------------------+---------+--------------------------+

1 row in set (0.00 sec)

4.创建ApolloConfigDB

导入sql文件:

mysql> source /home/ok/apollo/scripts/sql/apolloconfigdb.sql;

验证:

mysql> select `Id`, `Key`, `Value`, `Comment` from `ApolloConfigDB`.`ServerConfig` limit 1;

+----+--------------------+-------------------------------+------------------------------------------------------+

| Id | Key                | Value                         | Comment                                              |

+----+--------------------+-------------------------------+------------------------------------------------------+

|  1 | eureka.service.url | http://localhost:8080/eureka/ | Eureka服务Url,多个service以英文逗号分隔             |

+----+--------------------+-------------------------------+------------------------------------------------------+

1 row in set (0.00 sec)

注:ApolloConfigDB需要在每个环境部署一套,本例中如dev和pro分别部署ApolloConfigDB

5.调整服务端配置

5.1调整ApolloPortalDB配置

apollo.portal.envs - 可支持的环境列表

默认值是dev,本例需要增加pro环境。

首先在数据库apolloportaldb-serverconfig-apollo.portal.envs内新增pro。

mysql> select `Id`, `Key`, `Value`, `Comment` from `ApolloPortalDB`.`ServerConfig` limit 1;

+----+--------------------+---------+--------------------------+

| Id | Key                | Value   | Comment                  |

+----+--------------------+---------+--------------------------+

|  1 | apollo.portal.envs | pro,dev | 可支持的环境列表         |

+----+--------------------+---------+--------------------------+

1 row in set (0.00 sec)

其次配合修改/home/ok/apollo/scripts/build.sh文件才能生效:

#meta server url, different environments should have different meta server addresses

pro_meta=http://10.150.27.65:8080

dev_meta=http://10.160.27.67:8080

META_SERVERS_OPTS="-Ddev_meta=$dev_meta -Dpro_meta=$pro_meta"

organizations - 部门列表

在数据库apolloportaldb-serverconfig-proorganizations内修改:

mysql> select `Id`, `Key`, `Value`, `Comment` from `ApolloPortalDB`.`ServerConfig` where Id=2;

+----+---------------+------------------------------------------------------------------------------------+--------------+

| Id | Key           | Value                                                                              | Comment      |

+----+---------------+------------------------------------------------------------------------------------+--------------+

|  2 | organizations | [{"orgId":"BACKEND","orgName":"JAVA"},{"orgId":"TEST2","orgName":"样例部门2"}]     | 部门列表     |

+----+---------------+------------------------------------------------------------------------------------+--------------+

1 row in set (0.00 sec)

5.2调整ApolloConfigDB配置

配置项统一存储在ApolloConfigDB.ServerConfig表中,需要注意每个环境的ApolloConfigDB.ServerConfig都需要单独配置。

eureka.service.url - Eureka服务Url

每个环境只填入自己环境的eureka服务地址.

在DEV环境的ApolloConfigDB.ServerConfig表中设置eureka.service.url为:http://localhost:8080/eureka/

在PRO环境的ApolloConfigDB.ServerConfig表中设置eureka.service.url为:http://localhost:8080/eureka/

6.配置数据库连接信息

编辑/home/ok/apollo/scripts/build.sh文件,修改ApolloPortalDB和ApolloConfigDB相关的数据库连接串信息。

10.150.27.65:

#apollo config db info

apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8

apollo_config_db_username=root

apollo_config_db_password=bobo365

#apollo portal db info

apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8

apollo_portal_db_username=root

apollo_portal_db_password=bobo365

10.150.27.67:

#apollo config db info

apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8

apollo_config_db_username=root

apollo_config_db_password=bobo365

#apollo portal db info

apollo_portal_db_url=jdbc:mysql://10.160.27.65:3306/ApolloPortalDB?characterEncoding=utf8

apollo_portal_db_username=root

apollo_portal_db_password=bobo365

7.配置各环境meta service地址

Portal和Apollo客户端需要在不同的环境访问不同的meta service(apollo-configservice)地址,所以需要在打包时提供这些信息。

#meta server url, different environments should have different meta server addresses

pro_meta=http://10.150.27.65:8080

dev_meta=http://10.160.27.67:8080

META_SERVERS_OPTS="-Ddev_meta=$dev_meta -Dpro_meta=$pro_meta"

8.执行编译、打包

执行脚本:/home/ok/apollo/scripts/build.sh 

该脚本会依次打包apollo-configservice, apollo-adminservice, apollo-portal和apollo-client。

9.部署apollo-configservice

将apollo-configservice/target/目录下的apollo-configservice-x.x.x-github.zip上传到服务器上,解压后执行scripts/startup.sh即可。如需停止服务,执行scripts/shutdown.sh.

[root@appcan-t-app-7 target]# pwd

/home/ok/apollo/apollo-configservice/target

[root@appcan-t-app-7 target]# unzip apollo-configservice-0.9.1-SNAPSHOT-github.zip -d test

10.部署apollo-adminservice

将apollo-adminservice/target/目录下的apollo-adminservice-x.x.x-github.zip上传到服务器上,解压后执行scripts/startup.sh即可。如需停止服务,执行scripts/shutdown.sh.

[root@appcan-t-app-7 target]# pwd 

/home/ok/apollo/apollo-adminservice/target

[root@appcan-t-app-7 target]# unzip apollo-adminservice-0.9.1-SNAPSHOT-github.zip -d test

11.部署apollo-portal

将apollo-portal/target/目录下的apollo-portal-x.x.x-github.zip上传到服务器上,解压后执行scripts/startup.sh即可。如需停止服务,执行scripts/shutdown.sh.

apollo-portal的默认端口是8080,和apollo-configservice一致,所以如果需要在一台机器上同时启动apollo-portal和apollo-configservice的话,需要修改apollo-portal的端口。直接修改startup.sh中的SERVER_PORT即可,如SERVER_PORT=8070。

[root@appcan-t-app-7 target]# pwd

/home/ok/apollo/apollo-portal/target

[root@appcan-t-app-7 target]# unzip apollo-portal-0.9.1-SNAPSHOT-github.zip -d test

三、Portal 用户登录

登录系统后在 http://{portal地址}/user-manage.html 页面添加用户,只有超级管理员才能添加用户, 否则会报403错误。

系统默认账号:apollo/admin.

Eureka(10.150.27.67)页面如下:

Markdown

Eureka(10.150.27.65)页面如下:

Markdown

Portal页面如下:

Markdown

以上仅仅是服务端的搭建和部署,真正使用需要结合客户端使用。如下链接为Java客户端使用指南,供后续研究。

JAVA客户端使用指南

©著作权归作者所有:来自51CTO博客作者bobo365的原创作品,如需转载,请注明出处,否则将追究法律责任

好知识,才能预见未来


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP