前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DTS,让迁移MongoDB上云从未如此顺滑

DTS,让迁移MongoDB上云从未如此顺滑

原创
作者头像
运盐君
修改2021-12-06 18:08:00
1.6K0
修改2021-12-06 18:08:00
举报
文章被收录于专栏:游戏运研

MongoDB是目前游戏行业越来越热门的数据库,使用场景囊括玩家数据、日志、社区等业务。经过多次交流,一个客户同意将IDC中的游戏迁移上云,一个核心数据库MongoDB集群如何平滑上云,成为客户关心的焦点问题。下文是自己做了一个DTS迁移MongoDB的Demo,让客户提前体验数据库上云迁移的过程。

一、架构

Mongo复制集迁移.png
Mongo复制集迁移.png

二、源集群搭建

  1. 在腾讯云购买3台CVM云服务器,操作系统选择CentOS7.9 x64

内网ip分别为10.21.0.5、10.21.0.2、10.21.0.8

  1. 在3台服务器上下载MongoDB安装包并安装
代码语言:txt
复制
   cd /usr/local/src/

   wget --no-check-certificate [https://mirror.tuna.tsinghua.edu.cn/mongodb/yum/el7-3.2/RPMS/mongodb-org-3.2.10-1.el7.x86\_64.rpm](https://mirror.tuna.tsinghua.edu.cn/mongodb/yum/el7-3.2/RPMS/mongodb-org-3.2.10-1.el7.x86_64.rpm)

   wget --no-check-certificate [https://mirror.tuna.tsinghua.edu.cn/mongodb/yum/el7-3.2/RPMS/mongodb-org-mongos-3.2.10-1.el7.x86\_64.rpm](https://mirror.tuna.tsinghua.edu.cn/mongodb/yum/el7-3.2/RPMS/mongodb-org-mongos-3.2.10-1.el7.x86_64.rpm)

   wget --no-check-certificate [https://mirror.tuna.tsinghua.edu.cn/mongodb/yum/el7-3.2/RPMS/mongodb-org-server-3.2.10-1.el7.x86\_64.rpm](https://mirror.tuna.tsinghua.edu.cn/mongodb/yum/el7-3.2/RPMS/mongodb-org-server-3.2.10-1.el7.x86_64.rpm)

   wget --no-check-certificate [https://mirror.tuna.tsinghua.edu.cn/mongodb/yum/el7-3.2/RPMS/mongodb-org-shell-3.2.10-1.el7.x86\_64.rpm](https://mirror.tuna.tsinghua.edu.cn/mongodb/yum/el7-3.2/RPMS/mongodb-org-shell-3.2.10-1.el7.x86_64.rpm)

   wget --no-check-certificate [https://mirror.tuna.tsinghua.edu.cn/mongodb/yum/el7-3.2/RPMS/mongodb-org-tools-3.2.10-1.el7.x86\_64.rpm](https://mirror.tuna.tsinghua.edu.cn/mongodb/yum/el7-3.2/RPMS/mongodb-org-tools-3.2.10-1.el7.x86_64.rpm)

   yum install ./\*.rpm -y
  1. 配置MongoDB

修改Mongo 配置文件/etc/mongod.conf

监听IP 127.0.0.1改为CVM的内网IP,如果改成0.0.0.0,可能会对公网暴露造成风险。

代码语言:txt
复制

local_ip=ip addr | grep "global eth0" | awk '{print $2}' |awk -F '/' '{print $1}'

sed -i 's/127.0.0.1/'"${local_ip}"'/g' /etc/mongod.conf

//配置复制集,名字是rs0

cat << EOF >> /etc/mongod.conf

replication:

replSetName: "rs0"

EOF

代码语言:txt
复制
1. 启动MongoDB

systemctl start mongod

代码语言:txt
复制
1. 初始化MongoDB复制集,如果想体验分片,可以参考官网操作流程。

   登录一台CVM的mongod

rs.initiate( {

_id : "rs0",

members: [

代码语言:txt
复制
 { _id: 0, host: "10.21.0.5:27017" },
代码语言:txt
复制
 { _id: 1, host: "10.21.0.2:27017" },
代码语言:txt
复制
 { _id: 2, host: "10.21.0.8:27017" }

]

})

rs0:SECONDARY>

rs0:PRIMARY>

代码语言:txt
复制
# 三、准备存量数据模拟

在Mongo服务器上、或其他可以访问mongo实例的实例上,准备环境:

Requirements.txt

Faker==9.8.0

pymongo==3.12.0

代码语言:txt
复制

yum install python3 -y

pip3 install -r Requirements.txt

代码语言:txt
复制
复制下列代码到Mongo\_fake.py文件

from pymongo import MongoClient

from faker import Faker

from faker.providers import internet

from faker.providers import address

import time

db_name = 'sword'

collection_name = 'player_data'

client = MongoClient('mongodb://10.21.0.5:27017')

database = clientdb_name

collection = databasecollection_name

fake = Faker('zh_CN')

fake.add_provider(internet)

fake.add_provider(address)

def gen_fake_data():

代码语言:txt
复制
for num in range(10000):
代码语言:txt
复制
    datarow = {
代码语言:txt
复制
        "timestamp":time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),
代码语言:txt
复制
        "name":fake.name(),
代码语言:txt
复制
        "access_ip": fake.ipv4_public(),
代码语言:txt
复制
        "city": fake.city()
代码语言:txt
复制
      }
代码语言:txt
复制
    print(datarow)
代码语言:txt
复制
    collection.insert(datarow)
代码语言:txt
复制
    #控制写入频率
代码语言:txt
复制
    #time.sleep(1)

if name == "main":

代码语言:txt
复制
gen_fake_data()
代码语言:txt
复制
启动下面python脚本,在sword库中player\_data表中写入1000条模拟数据,大约1分钟。

python Mongo_fake.py

代码语言:txt
复制
在mongo中查询,我们可以发现,已经写入10000条数据

use sword; switched to db sword

db.player_data.count() 10000

db.player_data.findOne() {

代码语言:txt
复制
    "_id" : ObjectId("61ac3be88c7790520490bf75"),
代码语言:txt
复制
    "timestamp" : "2021-12-05 12:11:20",
代码语言:txt
复制
    "name" : "龚丹",
代码语言:txt
复制
    "access_ip" : "135.64.220.189",
代码语言:txt
复制
    "city" : "贵阳县"

}

代码语言:txt
复制

四、模拟迁移操作

在云上购买一个MongoDB实例,过程略,实例id为cmgo-0cv8pnxr

新建并配置DTS

source.png
source.png
dest.png
dest.png
check_source.png
check_source.png
check_dest.png
check_dest.png
select_db.png
select_db.png
check_last.png
check_last.png
start.png
start.png

修改Mongo_fake.py,并启动,频率改为每秒1条,观察DTS目标实例数据会仅实时和线下自建实例同步。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、架构
  • 二、源集群搭建
  • 四、模拟迁移操作
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档