携程Apollo统一配置管理中心

# Apollo统一配置管理中心

[TOC]

## 可用性说明

| 场景                  | 影响                               | 降级                                                         | 原因                                                         |
| --------------------- | ---------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| 某台配置服务下线      | 无影响                             |                                                              | 配置服务无状态,客户端重连其他配置服务                       |
| 所有配置服务下线      | 客户端无法读取最新配置,门户无影响 | 客户端重启时,可以读取本地缓存配置文件。如果是新扩容的机器,可以从其他机器上获取已缓存的配置文件。 |                                                              |
| 某台Admin Service下线 | 无影响                             |                                                              | Admin  Service无状态,Portal重连其他Admin Service            |
| 所有管理服务下线      | 客户端无影响,门户无法更新配置     |                                                              |                                                              |
| 某台Portal下线        | 无影响                             |                                                              | 门户网站通过SLB绑定多台服务器,重试后可以的服务器            |
| 全部门户下线          | 客户端无影响,门户无法更新配置     |                                                              |                                                              |
| 某数据中心下线        | 无影响                             |                                                              | 数据中心部署,数据完全同步,Meta  Server/Portal域名通过SLB自动切换到另外的数据中心 |
| 数据库地图机          | 客户端无影响,门户无法更新配置     | 配置服务开启配置缓存后,对配置的读取数据库进程影响           |                                                              |

## 官方文档

https://www.apolloconfig.com/#/zh/usage/apollo-user-guide

## 快速安装

1. 准备一下软件/环境

   1. [Java](http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html) => JDK 1.8+
   2. [MySQL](https://www.mysql.com/downloads/) => 5.6.6+
   3. [Gitbash](https://gitforwindows.org/)
   4. [Apollo QuickStart](https://github.com/nobodyiam/apollo-build-scripts)

2. 安装Java JDK, MySQL与Git

3. 解压缩QuickStart,在Mysql库中执行**sql文件夹中的两个.sql文件**。会生成两个Apollo所需的两个数据库

4. 将demo.sh中数据库的信息改为自己的mysql,主要是**url**、**username**与**password**

   ```go
   # apollo config db info
   apollo_config_db_url=jdbc:mysql://192.168.80.70:3306/ApolloConfigDB?characterEncoding=utf8
   apollo_config_db_username=root
   apollo_config_db_password=213224591
   
   # apollo portal db info
   apollo_portal_db_url=jdbc:mysql://192.168.80.70:3306/ApolloPortalDB?characterEncoding=utf8
   apollo_portal_db_username=root
   apollo_portal_db_password=213224591
   ```

5. 通过以下命令启动(切换到quickstart的目录中),后续可以将其作为Windows服务

   ```go
   cmd>cd C:\Apollo\apollo-build-scripts-master
   cmd>demo.sh start  
   ```

   启动后会最终显示以下信息:

   ```go
   ==== starting service ====
   Service logging file is ./service/apollo-service.log
   Started [3099]
   Waiting for config service startup.......
   Config service started. You may visit http://localhost:8080 for service status now!
   Waiting for admin service startup....
   Admin service started
   ==== starting portal ====
   Portal logging file is ./portal/apollo-portal.log
   Started [4071]
   Waiting for portal startup......
   Portal started. You can visit http://localhost:8070 now!
   ```

6. 配置中心管理地址:http://localhost:8070,默认账号apollo,密码admin
7. 创建自己的项目,APPId是和应用程序关联的主要标识。
8. 创建命名空间(Namespace),选择公用(public)即可。
9. 新增配置项,例:DocumentTitle,值为【测试文档】。
10. 点击提交、发布。

## 应用程序连接Apollo

1. 安装**Com.Ctrip.Framework.Apollo.Configuration**程序包。

2. 修改appsettings.json,添加apollo节点

   ```json
   "apollo": {
       "AppId": "Cajer",    // 刚才创建的AppId
       "MetaServer": "http://192.168.80.70:8080"    // 更改为刚才部署环境的IP
   }
   ```

3. 更改Program.cs

   ```c#
   public static IHostBuilder CreateHostBuilder(string[] args) =>
       Host.CreateDefaultBuilder(args)
       .ConfigureAppConfiguration((hostingContext, builder) =>
       {
           builder
           .AddApollo(builder.Build().GetSection("apollo"))
           .AddDefault()
           .AddNamespace("TEST1.application");  // 部门.命名空间
       })
       .ConfigureWebHostDefaults(webBuilder =>
       {
           webBuilder.UseStartup<Startup>();
       });
   ```

4. 将系统中读取配置文件的代码,改为Apollo中配置的键即可。例:

   ```c#
   Appsettings.app(new string[] { "AppSettings", "DocumentTitle" }).ToString()
   // 改为
   Configuration.GetValue<string>("DocumentTitle")
   ```

5. 运行项目查看**DocumentTitle**的值,appsettings.json中的值会被Apollo中的覆盖。
6. 修改Apollo中配置的值并发布,重新刷新页面,发现系统中会立即生效。
7. 中途Apollo服务中断后,程序会加载最后一次获取的键值对来运行,不会发生异常。

----搬砖,砖来自     

posted @ 2021-07-15 17:13  Provedl  阅读(208)  评论(0编辑  收藏  举报