注意:

将在 MongoDB Atlas 或内部部署上运行的 MongoDB 数据库迁移到 Oracle Autonomous JSON Database

简介

MongoDB 是一种流行的开源数据库,用于在灵活的类似 JSON 的文档中创建和存储数据,这意味着字段可能因文档而异,并且数据结构可以随时间变化。

Oracle 是世界知名的关系型多模型数据库之一,名为融合数据库,具有良好的 JSON 处理能力。Oracle 引入了对 v12c 中 JSON 的支持,将 JSON 数据存储为 varchar2 或大型对象 (LOB)(字符大对象 (Character Large Object,CLOB)/二进制大对象 (Binary Large Object,BLOB))。

MongoDB 的挑战:

在 Oracle 中使用 JSON 数据类型的优点:

注:请确保在 Oracle Cloud Infrastructure (OCI) GoldenGate 大数据部署、源数据库和目标数据库之间建立连接。

目标

先决条件

任务 1:安装 MongoDB 二进制文件并启动 MongoDB 服务

  1. 为复制设置创建三个 OCI 计算实例,并为数据目录附加块存储卷。

    图像

  2. 使用以下命令更新 yum 系统信息库以下载 MongoDB 二进制文件。

    vi /etc/yum.repos.d/mongodb-enterprise-8.0.repo
    [mongodb-enterprise-8.0]
    name=MongoDB Enterprise Repository
    baseurl=https://repo.mongodb.com/yum/redhat/8/mongodb-enterprise/8.0/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://pgp.mongodb.com/server-8.0.asc
    sudo yum install -y mongodb-enterprise
    

    图像

  3. 使用以下命令创建数据目录并授予所需的权限。

    cd /data
    ls
    chmod 755 mongo
    cd
    chmod 755 -R /data/mongo
    chown mongod:mongod -R /data/mongo
    chmod 400 /etc/mongod.Keyfile
    chown mongod:mongod -R /etc/mongod.Keyfile
    

    图像

    图像

    注:安全验证需要密钥文件。为了进行测试,可以使用 open-ssl 命令生成密钥文件。

  4. 使用以下命令创建配置文件。

    cat /etc/mongod.conf
    

    图像

  5. 使用以下命令禁用 selinux 并启动 mongod 服务。

    setenforce 0
    getenforce
    systemctl start mongod
    systemctl status mongod
    

    图像

  6. 对将充当辅助节点的其余两个节点执行相同的操作。

任务 2:创建 MongoDB 副本集

  1. 连接到第一个节点并连接到管理数据库。

  2. 运行以下命令以启动复制并创建第一个管理员用户。此复制用户将用于复制配置和管理。

    mongosh
    use admin
    

    图像

    rs.initiate()
    db.createUser({
    ...  user: "admin",
    ...  pwd: "password",
    ...  roles: [
    ...         { role: "root", db: "admin" }
    ...   ]
    ...  })
    

    图像

    db.auth("admin","password")
    rs.conf()
    

    图像

  3. 使用以下命令添加其余两个节点。这些节点将被添加为辅助节点。

    rs.add("10.0.1.163;27017")
    

    图像

    rs.add("10.0.1.51:27017")
    

    图像

  4. 使用以下命令检查副本集的配置和状态。

    db.auth("admin","password")
    rs.conf()
    

    图像

    rs.status()
    

    图像

    图像

    图像

    图像

    rs.printReplicationInfo()
    

    图像

任务 3:将数据加载到 MongoDB 副本集中

  1. 使用 mongorestore 命令将转储恢复到 MongoDB 副本集。

    mongorestore --username admin --password password dump/
    

    图像

    图像

    图像

    注:对于在该副本集下运行的所有数据库,以上转储是通过使用 mongodump 命令从另一个 MongoDB 副本集获取的。

  2. 运行以下命令检查是否已将所有数据库及其各自的集合恢复到 MongoDB 副本集中。

    mongosh
    use admin
    db.auth("admin","password")
    show dbs
    

    图像

任务 4:在 OCI 中配置 Oracle Autonomous JSON Database

  1. 登录到 OCI 控制台,导航到 Oracle DatabaseAutonomous Database ,然后输入以下信息,如用于创建自治数据库的映像中所示。

    图像

    图像

    图像

    注:为了实现 MongoDB 兼容性,需要将网络访问设置为仅从允许的 IP 和 VCN 进行安全访问,或仅从专用端点访问进行安全访问。

  2. 单击编辑工具配置,启用 MongoDB API 并复制 URL

    图像

    图像

    图像

    注:您需要更改以上连接字符串中的用户名和密码。

任务 5:创建 Database Client Machine 以访问 Oracle Autonomous JSON Database 并安装必需的 MongoDB 工具

  1. 使用以下命令下载 wallet 文件并为 Oracle Autonomous JSON Database 配置连接。

    cat tnsnames.Oracle
    

    图像

    cat sqlnet.Ora
    

    图像

    图像

  2. 使用以下命令下载用于连接的 MongoDB 工具。

    wget https://fastdl.mongodb.org/tools/db/mongodb-database-tools-rhel70-x86_64-100.5.2.tgz
    

    图像

    tar -xvf mongodb-database-toosl-rhel70-x86_64-100.5.2.tgz
    

    图像

    wget https://downloads.mongodb.com/compass/mongosh-1.3.1-linux-x64.tgz
    

    图像

    tar -xvf mongosh-1.3.1-linux-x64.tgz
    

    图像

  3. 使用以下命令将 PathURI (Oracle Autonomous Transaction Processing (ATP) 端点)设置为环境变量。

    cd
    export PATH=/home/oracle/mongosh-1.3.1-linux-x64/bin/:$PATH
    export PATH=$PATH:/home/oracle/mongodb-database-tools-rhel70-x86_64-100.5.2/bin
    echo $path
    

    图像

    图像

    图像

  4. 使用以下命令检查是否能够连接到 Oracle Autonomous JSON Database。

    export URI='mongodb://admin:xxxx@xxxxxx-ADBJ.adb.us-ashburn-1.oraclecloudapps.com:27017/admin?authMechanism=PLAIN&authSource=$external&ssl=true&retryWrites=false&loadBalanced=true'
    mongosh $URI
    

    图像

任务 6:将转储上载到 OCI 对象存储存储桶并导入到 ATP

  1. 使用 mongoexport 命令转储集合。

    图像

    mongoexport --host=mrep1 --port 27017 --username=admin --authicationDatabase=admin --collection=data --db=sample_weatherdata --out=wheather_data.Json
    

    图像

  2. 单击上载可上载使用 MongoDB 副本集上的 mongoexport 命令所获取的单个数据库集合的转储。

    图像

  3. 单击查看对象详细信息可获取对象端点详细信息。

    图像

    图像

  4. 运行 curl 命令以使用端点从该对象读取数据,并将 mongoimport 命令读取到 ATP。

    curl -X GET https://objectstorage.us-ashburn-1.oraclecloud.com/p/ujXv8Pmhxt9EyLlA9ogm_X524pDRGEymJwbDVyUExAACra1VpAql32U0XaRnaxLt/n/orasenatdoracledigital01/b/jsonbucket/o/wheather_data.json | mongoimport --collection data --uri $URI
    

    图像

  5. 检查是否已将集合导入 ATP 数据库。

    图像

  6. 交叉检查文档数是否与源相同。

    图像

    测试成功。现在,我们很乐意将源 MongoDB 副本中多个数据库下运行的所有数据迁移到目标 Oracle Autonomous JSON Database,并部署 OCI GoldenGate 服务以实现几乎零停机迁移。

  7. 对于数据移动,可以使用 mongodump 命令将数据从源数据库复制到目标数据库作为一次性加载。

    export URI="mongodb://mrep1:27017 --username admin --authenticationDatabase admin"
    mongodump --uri=$URI
    

    图像

    图像

  8. 将此转储复制到可以从中运行 mongorestore 命令的目标系统(任务 3 中已说明如何加载到目标 Oracle Autonomous JSON Database 中)。

    注:请确保在 Oracle Autonomous JSON Database 中为要迁移的数据库集合创建相同的方案名称。

    create user sample_airbnb identified by <password>;
    grant connect, resource to sample_airbnb;
    grant unlimited tablespace to sample_airbnb;
    BEGIN
    ORDS_ADMIN.ENABLE_SCHEMA(p_schema => 'SAMPLE_AIRBNB');
    commit;
    END;
    /
    

任务 7:部署 OCI GoldenGate

  1. 转到 OCI 控制台,导航到 Oracle DatabaseGoldenGate部署,然后单击创建部署

    对于 MongoDB 到 Oracle Autonomous JSON Database,我们需要选择技术作为大数据,选择部署类型作为数据复制

    图像

    图像

  2. 从 OCI 控制台提前创建密钥,以供管理员用户登录和管理。

    图像

    图像

    图像

任务 8:为 MongoDB 和 Oracle Autonomous JSON Database 创建连接

  1. 转到 OCI 控制台,导航到 Oracle DatabaseGoldenGate连接,然后单击创建连接

    图像

  2. 按图像中所示输入以下信息以创建源数据库连接。

    图像

  3. 重复步骤 1,然后输入如下信息(如图中所示)以创建目标数据库连接。

    图像

任务 9:为 OCI GoldenGate 部署分配和测试连接

  1. 转到 OCI 控制台,导航到 Oracle DatabaseGoldenGateConnections ,然后单击任务 8 中创建的连接。

  2. 单击分配的部署分配部署

    图像

  3. 选择部署,然后单击分配部署

    图像

  4. 单击三个点并测试连接以确保成功。

    图像

    图像

任务 10:创建提取和复制流程

  1. 转到 OCI 控制台,导航到 Oracle DatabaseGoldenGateDeployments ,然后单击任务 7 中创建的部署。

    单击启动控制台,这将打开 OCI GoldenGate 配置控制台。

    图像

  2. 输入在部署期间创建的用户名密码

    图像

    登录到控制台页面后,可以查看 ExtractReplicat 配置的所有必需选项。您可以创建提取和复制服务,如后面的步骤中所示。

  3. 配置提取处理。

    选择已为源 MongoDB 数据库创建的连接别名

    图像

    图像

    参数文件中,sample_airbnb 是 MongoDB 中的数据库,* 表示该数据库中的所有集合。

    图像

  4. 配置复制进程。

    1. 选择 Classic Replicat 作为 Replicat Type

      图像

    2. 输入以下所需信息。

      您需要选择相同的线索文件名,该文件名在提取流程创建过程中已命名。选择目标作为 Oracle Autonomous JSON Database ,然后输入已在任务 8 中创建的连接别名

      图像

      复制进程会将 MongoDB 中的 sample_airbnb 数据库中的所有事务处理复制到 Oracle Autonomous JSON Database 中的 sample_airbnb 方案。

      图像

    注:您需要在配置中分别更改源和目标数据库名称以及方案名称。

  5. 完成提取和复制流程配置后,请相应地启动流程。

    注:Oracle Autonomous JSON Database 应配置有专用端点。如果未使用证书,则可以将验证更改为不使用双向 TLS (mTLS)。

    如果正确的认证不可用,则复制日志文件中可能会出现以下错误:

    Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    

    图像

任务 11:启动提取和复制流程并验证

单击管理服务可检查进程状态及其各自的报告和日志文件是否存在任何问题。

图像

任务 12:测试数据同步

  1. 在源和目标中,在使用以下命令插入某些数据之前,请在收集详细信息中检查文档计数。

    • 源数据库:

      show dbs
      use sample_airbnb
      show collections
      db.emp.countDocuments()
      

      图像

    • 目标数据库:

      show dbs
      use Sample_airbnb
      show collections
      db.emp.countDocuments()
      

      图像

  2. 使用以下命令检查源和目标数据库上的数据。

    • 源数据库:

      db.emp.find({"name":"joe"})
      db.emp.find({"name":"John"})
      

      图像

    • 目标数据库:

      db.emp.find({"name":"joe"})
      db.emp.find({"name":"John"})
      

      图像

  3. 在源上插入数据,然后使用以下命令检查它是否已复制到目标。

    • 源数据库:

      dm.emp.insertOne(
      { "name":"John","job":"Data Analyst","Salary":7000})
      db.emp.countDocuments()
      db.emp.find({"name":"John"})
      

      图像

    • 目标数据库:

      show DBs
      show collections
      db.emp.find({"name":"John"})
      

      图像

      图像

      图像

任务 13:连接到 MongoDB Atlas

连接到 MongoDB Atlas 与连接到内部部署 MongoDB 数据库不同。

注:如果需要在公共网络中建立连接,请确保创建 NAT 网关并使用 OCI GoldenGate 部署正在使用的专用子网进行附加。

图像

由于连接问题而导致的常见错误

启动复制流程时,与目标 Oracle Autonomous JSON Database 的连接问题可能会导致其他错误:

确认

更多学习资源

浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心