zoukankan      html  css  js  c++  java
  • API网关Gravitee-MongoDB数据迁移详细教程(三)

    API网关Gravitee-MongoDB数据迁移详细教程(三)

    MongoDB数据迁移(API网关Gravitee-接口配置信息迁移),由于需要再不同环境中部署网关信息,接口如果单独配置会很费时间,所以就研究一次性迁移过去。

    示例:将10.11.22.33服务器上的mongo数据迁移到10.11.22.36服务器上的mongo

    步骤一
    1.登录10.11.22.33服务器,(导出)备份数据

    进入mongo安装目录 
    ~# cd /app/mongodb-3.6.12/bin
    
    如果bin目录下没有dump目录则创建
    ~# mkdir dump
    
    执行mongodump命令备份数据
    ~# mongodump 
    (如果提示:-bash: mongodump: command not found --- start )
    ~# vim ~/.bashrc
    export PATH=export PATH=/app/mongodb-3.6.12/bin:$PATH
    ~# source ~/.bashrc
    (如果提示:-bash: mongodump: command not found --- end )
    
    备份完成后可以在dump目录下看到三个文件目录,也就是我们的API网关相应的数据库信息
    ~# ll /app/mongodb-3.6.12/bin/dump
    admin
    gravitee
    gravitee-am

    将/app/mongodb-3.6.12/bin/dump文件夹通过SecureFX或其它工具下载至本地


    步骤二
    2.登录10.11.22.36服务器,导入备份好的数据
    先通过SecureFX或其它工具将刚刚下载好的dump目录上传到服务器 /app/graviteev2/mongodb 目录

    进入mongo安装目录 
    ~# cd /app/graviteev2/mongodb/mongodb-linux/bin
    
    执行 mongorestore 命令将备份好的数据导入当前mongo(--drop增加此命令表示先删除已有的数据库信息,再将数据全部导入)
    导入前先确定 /app/graviteev2/mongodb/dump 目录的权限,建议设置为 777 (chmod -R 777 /app/graviteev2/mongodb/dump)
    ~# mongorestore -h 10.11.22.36:27017 -d gravitee --drop /app/graviteev2/mongodb/dump/gravitee
    ~# mongorestore -h 10.11.22.36:27017 -d gravitee-am --drop /app/graviteev2/mongodb/dump/gravitee-am
    ~# mongorestore -h 10.11.22.36:27017 -d admin --drop /app/graviteev2/mongodb/dump/admin
    (如果提示:-bash: mongorestore: command not found --- start )
    ~# vim ~/.bashrc
    export PATH=export PATH=/app/mongodb-3.6.12/bin:$PATH
    ~# source ~/.bashrc
    (如果提示:-bash: mongorestore: command not found --- end )
    
    输入mongo进入数据库(可以不需要重启数据库,直接进入即可)
    ~# mongo
    

    步骤三

    3.修改mongo数据库里面的网关配置IP信息
    由于不同服务器部署的网关对应的服务ip需要不同,所以我们直接把接口数据拿过来是不可以直接使用的,需要更改ip,这里我们主要通过mongo脚本手工执行,批量替换。需要用到mongo可视化工具 nosqlbooster4mongo。

    使用 nosqlbooster4mongo 工具连接mongo数据库 10.11.22.36:27017
    主要看这两个数据库 gravitee 和 gravitee-am

    3.1 先进入 gravitee 数据库,执行以下脚本,查询出gravitee库所有的数据信息,然后全局搜索 10.11.22.35,10.11.22.34

    var collections = db.getCollectionNames();
    for(var i = 0; i< collections.length; i++){ 
    print('Collection: ' + collections[i]); // print the name of each collection
    db.getCollection(collections[i]).find().forEach(printjson);
    }


    开始执行替换(IP)脚本,因为不同环境的部署服务器不同,所以需要改变IP.
    gravitee数据库
    apis表:
    -- apis.definition 执行到出现了:Script executed successfully, but there is no result to show.(此次执行2次)

    db.getCollection('apis').find({'definition':/10.11.22.35/}).forEach( 
    function(item) {
    print("===========START==============================") 
    var tmp = String(item.definition)
    print(tmp) 
    print("=========================================") 
    tmp = tmp.replace('10.11.22.35','10.11.22.36')
    print(tmp) 
    print("============END==========================") 
    item.definition = tmp ;
    db.apis.save(item);
    } 
    );
    

    -- apis.definition 执行到出现了:Script executed successfully, but there is no result to show.(此次执行11次)

    db.getCollection('apis').find({'definition':/10.11.22.34/}).forEach( 
    function(item) {
    print("===========START==============================") 
    var tmp = String(item.definition)
    print(tmp) 
    print("=========================================") 
    tmp = tmp.replace('10.11.22.34','10.11.22.36')
    print(tmp) 
    print("============END==========================") 
    item.definition = tmp ;
    db.apis.save(item);
    } 
    );
    

      

    events表:
    -- events.payload 执行到出现了:Script executed successfully, but there is no result to show.(此次执行2次)

    db.getCollection('events').find({'payload':/10.11.22.35/}).forEach( 
    function(item) {
    print("===========START==============================") 
    var tmp = String(item.payload)
    print(tmp) 
    print("=========================================") 
    tmp = tmp.replace('10.11.22.35','10.11.22.36')
    print(tmp) 
    print("============END==========================") 
    item.payload = tmp ;
    db.events.save(item);
    } 
    );


    -- events.payload 执行到出现了:Script executed successfully, but there is no result to show.(此次执行13次)

    db.getCollection('events').find({'payload':/10.11.22.34/}).forEach( 
    function(item) {
    print("===========START==============================") 
    var tmp = String(item.payload)
    print(tmp) 
    print("=========================================") 
    tmp = tmp.replace('10.11.22.34','10.11.22.36')
    print(tmp) 
    print("============END==========================") 
    item.payload = tmp ;
    db.events.save(item);
    } 
    );
    

      

    -- events.properties 执行到出现了:Script executed successfully, but there is no result to show. (此次执行2次)

    db.events.where("properties.origin").eq("10.11.22.34").forEach( 
    function(item) {
    print("===========START==============================") 
    var tmp = String(item.properties.origin)
    print(tmp) 
    print("=========================================") 
    tmp = tmp.replace('10.11.22.34','10.11.22.36')
    print(tmp) 
    print("============END==========================") 
    item.properties = tmp ;
    db.events.save(item);
    } 
    );
    

      

    audits表:
    -- audits.patch 执行到出现了:Script executed successfully, but there is no result to show.(此次执行15次)

    db.getCollection('audits').find({'patch':/10.11.22.34/}).forEach( 
    function(item) {
    print("===========START==============================") 
    var tmp = String(item.patch)
    print(tmp) 
    print("=========================================") 
    tmp = tmp.replace('10.11.22.34','10.11.22.36')
    print(tmp) 
    print("============END==========================") 
    item.patch = tmp ;
    db.audits.save(item);
    } 
    );
    

      

    -- 更新 db.identity_providers ,执行一遍即可

    /* 更新之前的数据
    db.identity_providers
    {
    "_id" : "demo",
    "name" : "demo",
    "description" : "demo第三方登录",
    "enabled" : true,
    "type" : "GRAVITEEIO_AM",
    "configuration" : {
    "scopes" : [
    "openid"
    ],
    "clientId" : "demo",
    "serverURL" : "http://10.11.22.34/am/",
    "clientSecret" : "demo",
    "domain" : "demo",
    "color" : "#3C3C3C"
    },
    "userProfileMapping" : {
    "id" : "sub",
    "firstname" : "given_name",
    "lastname" : "family_name",
    "email" : "email",
    "picture" : "picture"
    },
    "createdAt" : ISODate("2019-09-12T14:57:27.294+08:00"),
    "updatedAt" : ISODate("2019-09-12T14:57:53.805+08:00"),
    "_class" : "io.gravitee.repository.mongodb.management.internal.model.IdentityProviderMongo"
    }
    */
    db.identity_providers.update({ _id: "demo" }, {
    $set: {
    "name": "demo",
    "description": "apim",
    "enabled": true,
    "type": "GRAVITEEIO_AM",
    "configuration": {
    "scopes": [
    "openid"
    ],
    "clientId": "apim",
    "clientSecret": "apim",
    "serverURL": "http://10.11.22.36/am/",
    "domain": "demo",
    "color": "#3C3C3C"
    },
    "userProfileMapping": {
    "id": "sub",
    "firstname": "given_name",
    "lastname": "family_name",
    "email": "email",
    "picture": "picture"
    },
    "createdAt": ISODate("2019-04-28T11:51:16.105+08:00"),
    "updatedAt": ISODate("2019-04-28T12:17:06.238+08:00"),
    "_class": "io.gravitee.repository.mongodb.management.internal.model.IdentityProviderMongo"
    }
    })

    gravitee-am 数据库
    -- reporters.configuration 执行到出现了:Script executed successfully, but there is no result to show.(此次执行3次)

    db.getCollection('reporters').find({'configuration':/10.11.22.33/}).forEach( 
    function(item) {
    print("===========START==============================") 
    var tmp = String(item.configuration)
    print(tmp) 
    print("=========================================") 
    tmp = tmp.replace('10.11.22.33','10.11.22.36')
    print(tmp) 
    print("============END==========================") 
    item.configuration = tmp ;
    db.reporters.save(item);
    } 
    );
    

      

    -- identities.configuration 执行到出现了:Script executed successfully, but there is no result to show.(此次执行3次)

    db.getCollection('identities').find({'configuration':/10.11.22.33/}).forEach( 
    function(item) {
    print("===========START==============================") 
    var tmp = String(item.configuration)
    print(tmp) 
    print("=========================================") 
    tmp = tmp.replace('10.11.22.33','10.11.22.36')
    print(tmp) 
    print("============END==========================") 
    item.configuration = tmp ;
    db.identities.save(item);
    } 
    );
    

      

    验证是否还有ip未被替换,执行以下语句查询所有的文本信息,然后在查询结果中全局搜索10.11.22.34:

    var collections = db.getCollectionNames();
    for(var i = 0; i< collections.length; i++){ 
    print('Collection: ' + collections[i]); // print the name of each collection
    db.getCollection(collections[i]).find().forEach(printjson);
    }
    

      

    步骤四
    根据当前数据生成新的Token

    http://10.11.22.36/am/demo/oauth/tokenbody
    请求方式: POST
    请求参数(body):
      grant_type:password
      client_id:webuser
      client_secret:webuser
      username:sz-webuser
      password:password111
      scope:openid

    测试其它接口的可用性,需要登录 http://10.11.22.36/apim/portal  ,先deploy相应接口信息,再使用postmain测试接口。

  • 相关阅读:
    如何让研发团队保持敏捷并不断进步?
    敏捷方法适合什么样的团队?
    规模化敏捷中的“三要”和“三不要”
    敏捷开发中如何使用看板方法创造价值
    4.0 初步预计更新内容
    3.0 环境应用(待更新)
    5.0 Genymotion安装以及基础使用
    2.0 python+appium环境搭建
    1.0 python-client以及ui自动化介绍
    教你一招另辟蹊径抓取美团火锅数据
  • 原文地址:https://www.cnblogs.com/DFX339/p/12916347.html
Copyright © 2011-2022 走看看