天地维杰网

人如秋鸿来有信,事若春梦了无痕


  • 首页

  • Redis

  • java

  • linux

  • 日常问题

  • Spring和Springboot

  • Mac相关

  • 中间件

  • 架构

  • python

  • 前端

  • jvm

  • c语言

  • web3

  • 归档

  • 关于

  • 搜索
close

Apollo学习

时间: 2021-02-25   |   分类: middleware     |   原创   |   阅读: 2844 字 ~6分钟

1. 概念

https://ctripcorp.github.io/apollo/#/zh/README

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

2.组件

架构视图

2.1 ConfigService

• 配置获取接口 • 配置推送接口 • 服务Apollo客户端

2.2 AdminService

• 配置管理接口 • 配置修改、发布接口 • 服务Portal

2.3 MetaServer 包装服务列表

• Portal通过域名访问Meta Server获取Admin Service服务列表 • Client通过域名访问Meta Server获取Config Service服务列表 • 相当于一个Eureka Proxy • 逻辑角色,和Config Service部署在一起

MetaServer的作用说明,按文档的分析就是MetaServer的作用是包装euraka采集的 ConfigService和AdminService的信息,然后交给Portal用来展示或者做其他的事情。

2.4 Eureka 服务注册与发现

• 服务注册和发现 • Config/AdminService注册并心跳 • 和ConfigService部署在一起

2.5 Portal 配置管理界面

• 配置管理界面 • 通过Meta Server获取AdminService服务列表 • 客户端软负载

2.6 Client客户端

• 应用获取配置,实时更新 • 通过Meta Server获取Config Service服务列表 • 客户端软负载(客户端负载均衡指的是把负载均衡的功能以库的方式集成到服务的消费方,而不再是由一台指定的负载均衡设备集中提供。)

3.部署

3.1 docker方式快速部署

安装docker步骤略过 1. 首先克隆 apollo的项目

```
https://gitee.com/nobodyiam/apollo
```
  1. 进入apollo/scripts/docker-quick-start 目录 ,然后执行 docker-compose up 命令

    Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

    出现了started,you can visit ,就已经是启动成功了

    docker 控制台也可以看到相应的应用

    访问返回的地址http://localhost:8070 即可进入相应的页面,初始用户名apollo,密码admin

3.2 分布式部署

官方分布式部署文档

3.2.1 本地使用docker的centos进行部署测试

拉取镜像
docker pull centos:7
启动容器
docker run  -itd --privileged -p 20010:22 --name="centos-apollo"  5e35e350aded    /usr/sbin/init
启动窗口后即可进入容器进行操作
docker exec -it 5171c1cdadcb /bin/bash

3.2.2 安装常用工具

  1. 安装常用工具

    yum install -y openssh-server vim lrzsz wget gcc-c++ pcre pcre-devel zlib zlib-devel ruby openssl openssl-devel patch bash-completion zlib.i686 libstdc++.i686 lsof unzip zip
  2. service安装

    yum install initscripts  
  3. ifconfig安装

    yum install net-tools.x86_64
  4. ssh安装(10.0.75.1为docker的ip)

    sshd rpm -qa | grep ssh
    yum install openssh-server 
    service sshd restart
    #查看是否启动22端口 
    netstat -antp | grep sshd
    	```
    
    #### 3.2.3 centos登录设置
    1. 修改sshd_config 为密码登录
       	

    shell vim /etc/ssh/sshd_config #打开注释 PermitRootLogin yes, 允许密码登录,保存退出

       		
    2. 设置root用户密码
        

    passwd root

        	
    3. 换个服务器远程登录
       

    shell ssh root@47.52.134.16 -p 5022

            
    以上三点参考文档
    https://www.cnblogs.com/hcl1991/p/10599361.html
    
    
    #### 3.2.4 同步文件到容器内目录
    使用docker cp命令同步apollo需要使用的宿主机文件到容器中 [宿主机拷文件到docker容器里面](https://blog.csdn.net/wejack/article/details/114281424)

domino@localhost Downloads % docker cp apollo-adminservice-1.8.1-github.zip e6ed3239253a:/root/soft domino@localhost Downloads % docker cp apollo-configservice-1.8.1-github.zip e6ed3239253a:/root/soft domino@localhost Downloads % docker cp apollo-portal-1.8.1-github.zip e6ed3239253a:/root/soft

#### 3.2.5 安装java

参考[使用yum方式给centos安装 java](https://blog.csdn.net/wejack/article/details/114265570
)

shell #列出参安装的java版本 [root@e6ed3239253a /]# yum -y list java* Loaded plugins: fastestmirror, ovl Loading mirror speeds from cached hostfile * base: mirrors.163.com * extras: mirrors.163.com * updates: mirrors.ustc.edu.cn Available Packages java-1.6.0-openjdk.x86_64 1:1.6.0.41-1.13.13.1.el7_3 base java-1.8.0-openjdk.x86_64 1:1.8.0.282.b08-1.el7_9 updates

我这安装的是1.8版本的jdk [root@e6ed3239253a /]# yum -y install java-1.8.0-openjdk.x86_64 Complete!

#### 3.2.6 将centos容器实例打为镜像,然后以此为基础创建多服务器实例
打镜像时要注意,镜像的名称必须为小写,否则会创建失败,打包可参考文档 [docker容器打包成镜像](https://blog.csdn.net/wejack/article/details/114281625)

`docker commit -m "镜像说明" 容器id 镜像名:标签`

shell Downloads % docker commit -m “apollo_centos_base” e6ed3239253a apollo_centos_base:2.0 sha256:1dc673d6d41a057207e8f32a99daa6e454c3b2320b22e8d8bf72b1e0e43649c0 Downloads % docker images REPOSITORY TAG IMAGE ID CREATED SIZE apollo_centos_base 2.0 1dc673d6d41a 33 seconds ago 886MB

我使用这个基础centos镜像创建了三个centos的容器,两个分别代表两个apollo的 configservice和admin service的环境,第三个安装apollo的portal
    

shell
docker run -itd –privileged -p 20011:22 –name=“centos-apollo-trunk” 1dc673d6d41a /usr/sbin/init docker run -itd –privileged -p 20012:22 –name=“centos-apollo-neibu” 1dc673d6d41a /usr/sbin/init docker run -itd –privileged -p 20013:22 –name=“centos-apollo-portal” 1dc673d6d41a /usr/sbin/init

<div  align="center"><img src="https://wejack639.oss-cn-beijing.aliyuncs.com/blogimages/img/20220330144254.png" width = 900 /> </div>

#### 3.2.7 创建数据库
docker创建mysql数据库步骤略过,创建库所需要的sql在github项目中,数据库名与数据库文件名一致,每个环境要创建对应环境的数据库

scripts/sql/apolloconfigdb.sql scripts/sql/apolloportaldb.sql ```

我分别创建了一个trunk环境的apolloconfig库(开发环境),一个neibu环境的apolloconfig库(测试环境),和一个portal库

3.2.7 分别配置各个容器内的服务的配置文件

  1. trunk与neibu的adminservice和configservice解压和配置,两个环境的操作类似

    • 解压项目文件

      ~ % docker exec -it b0c18e04453c /bin/bash
      unzip ./apollo-adminservice-1.8.1-github.zip  -d /root/app/apollo-adminservice/
      [root@b0c18e04453c /]# cd /root/soft
      [root@b0c18e04453c soft]# unzip ./apollo-adminservice-1.8.1-github.zip  -d /root/app/apollo-adminservice/
      [root@b0c18e04453c soft]# unzip ./apollo-configservice-1.8.1-github.zip  -d /root/app/apollo-configservice/
    • 修改配置文件

      #adminservice 数据库配置
      [root@b0c18e04453c soft]#vi apollo-adminservice/config/application-github.properties
      # DataSource
      spring.datasource.url = jdbc:mysql://10.155.7.65:3306/ApolloConfigDB_trunk?characterEncoding=utf8
      spring.datasource.username = root
      spring.datasource.password = 123456
              
      #configservice 数据库配置
      [root@b0c18e04453c app]# vi apollo-configservice/config/application-github.properties
      # DataSource
      spring.datasource.url = jdbc:mysql://10.155.7.65:3306/ApolloConfigDB_trunk?characterEncoding=utf8
      spring.datasource.username = root
      spring.datasource.password = 123456
              
    • 配置完后就可以分别启动adminservice和configservice

      [root@b0c18e04453c app]# /root/app/apollo-configservice/scripts/startup.sh
      Tue Mar  2 07:01:26 UTC 2021 ==== Starting ====
      Application is running as root (UID 0). This is considered insecure.
      Started [750]
      Waiting for server startup./r...    .
      Tue Mar  2 07:01:57 UTC 2021 Server started in 30 seconds!
      [root@b0c18e04453c app]# /root/app/apollo-adminservice/scripts/startup.sh
      Tue Mar  2 07:02:06 UTC 2021 ==== Starting ====
      Application is running as root (UID 0). This is considered insecure.
      Started [955]
      Waiting for server startup.......
      Tue Mar  2 07:02:41 UTC 2021 Server started in 35 seconds!
  2. portal环境配置

    • 解压portal项目文件到目录

      [root@24556e6e825e /]# unzip /root/soft/apollo-portal-1.8.1-github.zip  -d /root/app/apollo-portal
      Archive:  /root/soft/apollo-portal-1.8.1-github.zip
          creating: /root/app/apollo-portal/config/
          creating: /root/app/apollo-portal/scripts/
          inflating: /root/app/apollo-portal/scripts/startup.sh
          inflating: /root/app/apollo-portal/apollo-portal-1.8.1.jar
          inflating: /root/app/apollo-portal/scripts/shutdown.sh
          inflating: /root/app/apollo-portal/config/app.properties
          inflating: /root/app/apollo-portal/apollo-portal-1.8.1-sources.jar
          inflating: /root/app/apollo-portal/apollo-portal.conf
          inflating: /root/app/apollo-portal/config/apollo-env.properties
          inflating: /root/app/apollo-portal/config/application-github.properties
    • 配置portal项目配置文件

      修改portal数据库配置文件

      [root@24556e6e825e /]# vi /root/app/apollo-portal/config/application-github.properties
      # DataSource
      spring.datasource.url = jdbc:mysql://10.155.7.65:3306/ApolloPortalDB?characterEncoding=utf8
      spring.datasource.username = root
      spring.datasource.password = 123456

      portal自定义的环境是dev环境,在 apolloportaldb的 serviceconfig表中 的 key值为apollo.portal.envs 的值中定义了相应的环境,默认只有一个dev,需要改成需要的环境,我改为了trunk,neibu

      修改环境配置文件,将需要的环境配置到apollo-env.properties文件中 .meta前的字符与环境相同

      [root@24556e6e825e /]# vi /root/app/apollo-portal/config/apollo-env.properties
      local.meta=http://localhost:8080
      trunk.meta=http://172.17.0.5:8080
      neibu.meta=http://172.17.0.6:8080
    • 启动服务 配置好以后就可以启动portal项目了,然后通过docker机的ip+项目端口就可以访问portal的服务了

      [root@24556e6e825e /]# /root/app/apollo-portal/scripts/startup.sh
      Tue Mar  2 07:22:20 UTC 2021 ==== Starting ====
      Application is running as root (UID 0). This is considered insecure.
      Started [313]
      Waiting for server startup......
      Tue Mar  2 07:22:51 UTC 2021 Server started in 30 seconds!

      使用 apollo/admin即可进行登录和使用,首次登录时右上角会有提示补缺环境的提示,然后在左下角点击补缺环境按钮,即可识别相应环境

      由于我的笔记本是macos的,所以无法直接访问docker容器中的ip 按照以下文章打通了宿主机和docker中的网络,可以直接通过docker中的ip访问docker内的服务 https://blog.csdn.net/wejack/article/details/114268784 有另外两篇设置固定ip的文章 和装docker-connector的文章 ,按文章操作后均未成功

      访问 trunk环境和neibu环境的机器ip+8080端口可以查看相应信息
      172.17.0.5:8080 172.17.0.6:8080

文档可以参考apollo官方文档 添加自定义的环境

客户端使用

java客户端使用说明

98.开源配置中心对比矩阵

#apollo# #配置中心# #分布式# #集群#
通过实验来比较git merge --no-ff 与--ff 和--squash的区别
lvs+keepalive配置Jenkins2高可用
  • 文章目录
  • 站点概览
不与天斗Domino

不与天斗Domino

Programmer & Architect

183 日志
15 分类
224 标签
    • 1. 概念
    • 2.组件
      • 2.1 ConfigService
      • 2.2 AdminService
      • 2.3 MetaServer 包装服务列表
      • 2.4 Eureka 服务注册与发现
      • 2.5 Portal 配置管理界面
      • 2.6 Client客户端
    • 3.部署
      • 3.1 docker方式快速部署
      • 3.2 分布式部署
        • 3.2.1 本地使用docker的centos进行部署测试
        • 3.2.2 安装常用工具
        • 3.2.7 分别配置各个容器内的服务的配置文件
    • 客户端使用
    • 98.开源配置中心对比矩阵
© 2013 - 2023 天地维杰网 京ICP备13019191号-1
Powered by - Hugo v0.63.2
Theme by - NexT
0%