帮助与文档

我们为你提供丰富、详尽的使用指南以及产品文档

MongoDB on QingCloud AppCenter 用户指南

简介

青云QingCloud MongoDB 服务提供的是原生 MongoDB replica set 云服务,MongoDB 是一个开源的文档型数据库,具有高性能、高可用等优点。

创建 MongoDB

在青云上,您可以很方便的创建和管理一个 MongoDB 集群。青云的 MongoDB 集群支持横向与纵向在线伸缩,同时具有自我诊断与自我修复功能,即当系统发现某节点坏死时会自我修复,无需人为干预。 另外我们还提供了监控告警等功能来帮助您更好的管理集群。集群将运行于私有网络内,结合青云提供的高性能硬盘,在保障高性能的同时兼顾您的数据安全。

为了保障数据安全,MongoDB 集群需要运行在受管私有网络中。所以在创建一个 MongoDB 集群之前,需要创建一个 VPC 和一个受管私有网络,受管私有网络需要加入 VPC,并开启 DHCP 服务(默认开启)。

第一步:创建集群

在创建的对话框中,您需要填写名称 (可选),选择 MongoDB 版本号、CPU、节点配置和数量、私有网络等。

目前集群节点数支持1、3、5、7,其中1个节点的 MongoDB 仅供测试使用。

用户默认创建在admin数据库下,连接时需要指定认证数据库为admin。

  • 磁盘选择

MongoDB 4.0.3 - QingCloud 1.2.0 添加了企业级分布式 SAN(NeonSAN),最高可支持 50000G 的磁盘扩展,可满足您大容量的数据存储需求,该功能目前仅在 北京 3B上海1A广东 2 区 支持。

第二步:创建成功

当 MongoDB 创建完成之后,您可以查看每个节点的运行状态。当节点的服务状态显示为“正常”状态,表示该节点启动正常。 当每个节点都启动正常后 MongoDB 集群显示为“活跃”状态,表示您已经可以正常使用 MongoDB 服务了。

测试 MongoDB

使用 mongo 客户端进行连接

MongoDB 创建完成之后可以进行连接测试。参考文档 https://docs.mongodb.com/manual/administration/install-on-linux/ 下载并安装 mongodb-org-shell,您可以在 MongoDB 同一私有网络或跨网络的客户端上测试。现假设客户端和 MongoDB 在同一私有网络,MongoDB 集群有三个节点,IP 地址分别为192.168.0.23,192.168.0.24,192.168.0.27, 您创建的用户名为qc_test,密码为Pwd00000,可以通过如下命令连接 MongoDB:

mongo mongodb://qc_test:Pwd00000@192.168.0.23,192.168.0.24,192.168.0.27/admin?replicaSet=foobar

连接成功后将出现下面的命令行:

foobar:PRIMARY>

创建用户

创建集群时输入的用户名对应的是 readWriteAnyDatabase 权限的普通账号,无法创建用户。如果需要创建用户,请使用 root 账号,密码与你输入的密码相同。连接时请使用与集群版本相同或者偏上的版本。

下面演示如何在 db1 中,创建一个用户名test_user1,密码为Pwd00001,具有readWrite权限的用户。首先,使用 root 账号进行连接:

mongo mongodb://root:Pwd00001@192.168.0.23,192.168.0.24,192.168.0.27/admin?replicaSet=foobar

连接成功后执行如下的命令:

use db1;
db.createUser({ user: "test_user1", pwd: "Pwd00001", roles: [ "readWrite" ]});

创建成功后可以Ctrl+C退回到 shell 中,使用如下命令以test_user1身份连接到db1

mongo mongodb://test_user1:Pwd00001@192.168.0.23,192.168.0.24,192.168.0.27/db1?replicaSet=foobar

更多权限管理可以参考: https://docs.mongodb.com/manual/tutorial/enable-authentication/

使用代码进行连接

如果使用代码进行连接,那么 MongoDB 连接字符串为 mongodb://USER:PASSWORD@IP/DB?replicaSet=foobar&authSource=admin

其中:

  • USER 是你所创建的用户名
  • PASSWORD 是你设置的密码
  • IP 是 replica set 中的节点 IP,使用逗号分隔,比如 192.168.0.23,192.168.0.24,192.168.0.27
  • DB 是你需要进行连接的数据库
  • replicaSet=foobar 是青云默认的 replicaSet 配置,值为 foobar
  • authSource=admin 是指定验证数据库为 admin
  • 更多参数可以参考: https://docs.mongodb.com/manual/reference/connection-string/

服务功能

点开基本属性旁边的下拉按钮,可以看到提供的服务功能。

配置参数

这里列出了可以修改并持久化的配置参数。修改配置参数将会使集群重启,请在业务低峰时进行修改。

MongoDB 4.0.3 - QingCloud 1.2.0 之后的版本新增了 Caddy 服务替代老版本的 FTP 服务,配置参数中默认为您配置用户名为 caddy,密码为 caddy,您可以修改配置参数来配置您的用户名和密码,该相关配置不会导致 mongod 服务重启。

MongoDB 4.0.3 - QingCloud 1.3.0 新增了 zabbix-agent 服务,您可以将其加入您的 zabbix-server 方便统一管理,您可以通过修改配置参数来配置 zabbix-agent 的启停,该相关配置不会导致 mongod 服务重启。

连接 URL

MongoDB 4.0.3 - QingCloud 1.2.0 版本新增了「连接 URL」一栏,您可以直接复制该 URL 并将其中的 [password] 修改为您的连接密码,[database] 修改为您需要连接的数据库即可。

在 shell 中通过该 URL 连接时需要在 & 前添加转义符 \

节点详情

您可以在这里实时查看节点的状态

增删节点

可以根据需要增加集群节点,增加的节点数必须为偶数。添加节点的任务执行时间跟集群的数据量有关系,数据量大时,任务执行时间会久一些,添加节点不影响集群的读写。

删除节点不会导致主节点的 mongod 重启,但为避免影响到业务,请在业务量低时操作。

删除节点有如下限制:

  • 数量必须为偶数,至少保留一个节点
  • 无法删除主节点
  • 无法删除 qc_sid 为 1 的节点

qc_sid 可以使用 root 用户通过 mongo 连接之后执行 rs.conf().members 命令查看。qc_sid 为 1 的节点的选举优先级被我们设置为 2,所以这个节点通常是主节点。

备份

如果您打开了『自动备份』功能,那么 MongoDB 集群会在你指定的时间段进行每日的自动备份; 您可以从这些备份创建出全新的 MongoDB 集群;

如果您关闭了自动备份,可以在集群列表右键 MongoDB 集群后点击『创建备份』选项, 或者在集群详情页的『备份』标签下点击『创建备份』按钮。

如果备份后进行过增删节点,那么再次备份时需要创建新的备份链。

如果需要从备份创建出一个独立于原有 MongoDB 集群的新 MongoDB 集群, 可以在集群详细页的『备份』标签下右键相应的备份点,再选择『从备份创建集群』即可。

扩容集群

可以对一个运行中的集群进行在线扩容,调整CPU/内存/磁盘空间大小。

注解:扩容需要在开机状态下进行,扩容会导致重新选主,请在业务低峰时进行

硬盘自动伸缩

Mongo 应用数据盘被占满会导致 mongod 服务进程挂掉

我们在 MongoDB 4.0.3 QingCloud 1.4.0 版本中新增了「应用存储空间」自动伸缩的功能,您可以参照 自动伸缩 来实现您的自动伸缩自定义

同步日志

同步日志功能可以将 mongod.log 拷贝到系统的 FTP 目录,同步后可以在内网下载到本地进行分析。

MongoDB 4.0.3 - QingCloud 1.2.0 版本使用 Caddy 服务替代了老版本的 FTP 服务

关闭同步日志

该栏为 MongoDB 4.0.3 - QingCloud 1.2.0 版本新增服务,下载或查看完日志,您可以关闭 Caddy 服务

清理日志

清理日志功能可以将 mongod.log 清空,减少日志的磁盘空间占用。

zabbix-agent 服务

MongoDB 4.0.3 - QingCloud 1.3.0 版本新增了 zabbix-agent 服务(3.4 版本),方便您采用 zabbix-server 统一管理各个集群的监控信息,zabbix-agent 服务的控制见 「配置参数」,启动服务后,用户只需要在 zabbix-server 的 web 界面添加主机即可,为了实现多维数据监控,我们提供了 监控模板(点击即可下载到本地)。用户只需要将该模板导入到 zabbix-server 即可使用。

「配置参数」中 「zabbix-server 地址」 填写的格式不正确,会导致 zabbix-agent 的不正确启停,该项的填写格式可参考 配置文件 中的 「Server」 配置项。

升级集群

MongoDB v3.0.15 (MMAPv1)MongoDB v3.4.5 (WiredTiger) 版本均可以升级至 MongoDB 4.0.3 - QingCloud 1.2.0 版本,升级前需要先关闭集群, MongoDB v3.0.15 (MMAPv1) 升级的时间较长,其时长主要受数据量的影响,数据量越大,升级所花费的时间越久。

升级前,请先对数据做好备份。

MongoDB v3.0.15 (MMAPv1) 单节点不允许升级,如果您点了升级,不用担心,升级失败后您可以关闭集群然后选择「版本回退」即可。

由于 3.6 以上的版本不再支持对名字为 * 的索引的操作,所以您需要在升级前将名字为 * 的索引删除或者重命名,详情见 Compatibility Changes in MongoDB 3.6

升级集群期间,客户端无法连接 mongo 服务,为了避免客户端的操作影响到升级的过程,在这期间禁掉了客户端对 mongo 服务的访问。

监控告警

目前提供的监控项包括:

  • CPU 使用率

  • 内存利用率

  • 磁盘使用量

  • MongoDB 各项操作数量

  • MongoDB 复制操作数量

  • MongoDB 连接数

MongoDB 4.0.3 QingCloud 1.4.0 版本新增了以下监控项

  • WIREDTIGER 内存状态

  • WIREDTIGER TRANSACTIONS 状态

  • GLOBALLOCK 请求状态

  • GLOBALLOCK 队列状态

  • 流量进出状态

目前提供的告警项包括:

  • CPU 利用率

  • 内存利用率

  • 磁盘使用量

  • MongoDB 连接数

  • MongoDB 可用连接数

  • wiredTiger 内存使用率

数据导出和导入

使用 mongodb-org-tools 中的工具 mongodump, mongorestore 可以很方便的执行 MongoDB 数据的导出和导入。

  • 使用 mongodump 工具可以将 MongoDB 中的数据导出,使用说明可以参考官方文档 https://docs.mongodb.com/manual/reference/program/mongodump/
  • 使用 mongorestore 工具可以将 mongodump 导出的数据导入到 MongoDB 中,使用说明可以参考官方文档 https://docs.mongodb.com/manual/reference/program/mongorestore/

在线导入

下面演示如何将192.168.110.101的数据直接在线导入到192.168.110.102中。在同一个VPC下创建一台主机,安装 mongodb-org-tools 工具。在命令行中执行以下的命令:

mongodump --archive --username=user001 --password=Pwd00001 --authenticationDatabase=admin --host=192.168.110.101 --db=db1 | mongorestore --archive --username=user002 --password=Pwd00002 --authenticationDatabase=admin --host=192.168.110.102 --db=db2

其中: 使用 192.168.110.101的用户user001,密码Pwd00001,验证数据库admin,导出数据库db1,导入到192.168.110.102的用户user002,密码Pwd00002,验证数据库admin,导入数据库db2

基准测试

我们用 Yahoo! Cloud Serving Benchmark 工具套件进行了基准测试,下面分别是各配置的测试结果。

YCSB 不支持用户名密码登录,下面的结果是在关闭认证后测试得到的,仅供参考。由于安全原因,我们禁止您关闭 MongoDB 的认证,建议在实际性能评估时以模拟正式场景为准。

  • 1核2G 100G 超高性能型硬盘
./bin/ycsb load mongodb-async -s -P workloads/workloada -p operationcount=1000000 -p recordcount=1000000 -threads 100 -p mongodb.url="mongodb://192.168.100.26/ycsb"
[OVERALL], RunTime(ms), 193602.0
[OVERALL], Throughput(ops/sec), 5165.2358963233855
./bin/ycsb run mongodb-async -s -P workloads/workloada -p operationcount=1000000 -p recordcount=1000000 -threads 100 -p mongodb.url="mongodb://192.168.100.26/ycsb"
[OVERALL], RunTime(ms), 254871.0
[OVERALL], Throughput(ops/sec), 3923.553483919316
  • 2核4G 100G 超高性能型硬盘
./bin/ycsb load mongodb-async -s -P workloads/workloada -p operationcount=1000000 -p recordcount=1000000 -threads 100 -p mongodb.url="mongodb://192.168.100.26/ycsb"
[OVERALL], RunTime(ms), 73817.0
[OVERALL], Throughput(ops/sec), 13547.014915263422
./bin/ycsb run mongodb-async -s -P workloads/workloada -p operationcount=1000000 -p recordcount=1000000 -threads 100 -p mongodb.url="mongodb://192.168.100.26/ycsb"
[OVERALL], RunTime(ms), 122344.0
[OVERALL], Throughput(ops/sec), 8173.674230039887
  • 4核8G 100G 超高性能型硬盘
./bin/ycsb load mongodb-async -s -P workloads/workloada -p operationcount=1000000 -p recordcount=1000000 -threads 100 -p mongodb.url="mongodb://192.168.100.26/ycsb"
[OVERALL], RunTime(ms), 40768.0
[OVERALL], Throughput(ops/sec), 24529.042386185243
./bin/ycsb run mongodb-async -s -P workloads/workloada -p operationcount=1000000 -p recordcount=1000000 -threads 100 -p mongodb.url="mongodb://192.168.100.26/ycsb"
[OVERALL], RunTime(ms), 47416.0
[OVERALL], Throughput(ops/sec), 21089.92745064957

下面同时运行了两个 YCSB 实例来对 8核16G 和 16核32G 进行基准测试, 需要注意的是两个 YCSB 实例实际上也并不能压满 MongoDB 的性能,所以 OPS 仅供参考之用。

  • 8核16G 100G 超高性能型硬盘
./bin/ycsb load mongodb-async -s -P workloads/workloada -p operationcount=1000000 -p recordcount=1000000 -threads 100 -p mongodb.url="mongodb://192.168.100.26/ycsb"
[OVERALL], RunTime(ms), 35088.0
[OVERALL], Throughput(ops/sec), 28499.772001823985
./bin/ycsb run mongodb-async -s -P workloads/workloada -p operationcount=1000000 -p recordcount=1000000 -threads 100 -p mongodb.url="mongodb://192.168.100.26/ycsb"
[OVERALL], RunTime(ms), 50013.0
[OVERALL], Throughput(ops/sec), 19994.80135164857
./bin/ycsb run mongodb-async -s -P workloads/workloada -p operationcount=1000000 -p recordcount=1000000 -threads 100 -p mongodb.url="mongodb://192.168.100.26/ycsb"
[OVERALL], RunTime(ms), 51555.0
[OVERALL], Throughput(ops/sec), 19396.76074095626
  • 16核32G 100G 超高性能型硬盘
./bin/ycsb load mongodb-async -s -P workloads/workloada -p operationcount=1000000 -p recordcount=1000000 -threads 100 -p mongodb.url="mongodb://192.168.100.26/ycsb"
[OVERALL], RunTime(ms), 33882.0
[OVERALL], Throughput(ops/sec), 29514.196328433976
./bin/ycsb run mongodb-async -s -P workloads/workloada -p operationcount=1000000 -p recordcount=1000000 -threads 100 -p mongodb.url="mongodb://192.168.100.26/ycsb"
[OVERALL], RunTime(ms), 37720.0
[OVERALL], Throughput(ops/sec), 26511.134676564157
./bin/ycsb run mongodb-async -s -P workloads/workloada -p operationcount=1000000 -p recordcount=1000000 -threads 100 -p mongodb.url="mongodb://192.168.100.26/ycsb"
[OVERALL], RunTime(ms), 38600.0
[OVERALL], Throughput(ops/sec), 25906.73575129534

其他

  • 如果您需要保持数据的强一致性,可以在客户端通过修改配置项来实现,配置方式可参考 官方文档

  • 在使用 mongodb 的过程中建议您使用长连接,您可以通过「连接数」监控项来判断您的可用连接数,在可用连接数不大于 3 的时候,建议您检查下您的客户端是否需要这么多的连接,并合理释放连接数,您也可以根据需要通过修改配置参数来放大您的可用连接数。

MongoDB Paas 文档

MongoDB Paas 文档请点击这里