MongoDB是目前游戏行业越来越热门的数据库,使用场景囊括玩家数据、日志、社区等业务。经过多次交流,一个客户同意将IDC中的游戏迁移上云,一个核心数据库MongoDB集群如何平滑上云,成为客户关心的焦点问题。下文是自己做了一个DTS迁移MongoDB的Demo,让客户提前体验数据库上云迁移的过程。
内网ip分别为10.21.0.5、10.21.0.2、10.21.0.8
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
修改Mongo 配置文件/etc/mongod.conf
监听IP 127.0.0.1改为CVM的内网IP,如果改成0.0.0.0,可能会对公网暴露造成风险。
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
1. 启动MongoDB
systemctl start mongod
1. 初始化MongoDB复制集,如果想体验分片,可以参考官网操作流程。
登录一台CVM的mongod
rs.initiate( {
_id : "rs0",
members: [
{ _id: 0, host: "10.21.0.5:27017" },
{ _id: 1, host: "10.21.0.2:27017" },
{ _id: 2, host: "10.21.0.8:27017" }
]
})
rs0:SECONDARY>
rs0:PRIMARY>
# 三、准备存量数据模拟
在Mongo服务器上、或其他可以访问mongo实例的实例上,准备环境:
Requirements.txt
Faker==9.8.0
pymongo==3.12.0
yum install python3 -y
pip3 install -r Requirements.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():
for num in range(10000):
datarow = {
"timestamp":time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),
"name":fake.name(),
"access_ip": fake.ipv4_public(),
"city": fake.city()
}
print(datarow)
collection.insert(datarow)
#控制写入频率
#time.sleep(1)
if name == "main":
gen_fake_data()
启动下面python脚本,在sword库中player\_data表中写入1000条模拟数据,大约1分钟。
python Mongo_fake.py
在mongo中查询,我们可以发现,已经写入10000条数据
use sword; switched to db sword
db.player_data.count() 10000
db.player_data.findOne() {
"_id" : ObjectId("61ac3be88c7790520490bf75"),
"timestamp" : "2021-12-05 12:11:20",
"name" : "龚丹",
"access_ip" : "135.64.220.189",
"city" : "贵阳县"
}
在云上购买一个MongoDB实例,过程略,实例id为cmgo-0cv8pnxr
新建并配置DTS
修改Mongo_fake.py,并启动,频率改为每秒1条,观察DTS目标实例数据会仅实时和线下自建实例同步。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。