.Net Core中使用MongoDB搭建集群与项目实战

作者:袖梨 2026-09-17
本文详细讲解了.Net Core中使用MongoDB搭建集群与项目实战,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

安装 MongoDB

安装 MongoDB 网上有很多教程,MongoDB 官方文档:https://docs.mo*ng**odb.com/manual/tutorial/install-mongodb-on-ubuntu/

笔者这里简单写一下安装过程,笔者使用 ubuntu 系统。

要按照的目标版本:MongoDB 4.4 Community Edition

支持的系统:

20.04 LTS (“Focal”)18.04 LTS (“Bionic”)16.04 LTS (“Xenial”)

更新软件源

sudo apt updatesudo apt upgrade

apt 直接安装(方法1)

如果你要安装稳定版本,则直接使用一条命令安装:

sudo apt install mongodb

执行命令检查 MingoDB 的状态:

sudo systemctl status mongodb

apt 仓库安装(方法2)

此种方式可以让你安装最新版本的 MongoDB 。

导入包管理系统使用的公钥

wget -qO - https://www.mo**ngo*db.org/static/pgp/server-4.4.asc | sudo apt-key add -

添加 MongoDB 的仓库源文件

 /etc/apt/sources.list.d/mongodb-org-4.4.list

添加 MongoDB 的仓库源地址

# ubuntu 16.04echo "deb [ arch=amd64,arm64 ] https://repo.m*o*n*godb.org/apt/ubuntu xenial/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list# ubuntu 18.04echo "deb [ arch=amd64,arm64 ] https://repo.m*o*n*godb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list# ubuntu 20.04echo "deb [ arch=amd64,arm64 ] https://repo.m*o*n*godb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list

加载 MongoDB 的软件包

sudo apt-get update

安装最新稳定版本的 MongoDB

sudo apt-get install -y mongodb-org

如果你想安装指定版本:

sudo apt-get install -y mongodb-org=4.4.1 mongodb-org-server=4.4.1 mongodb-org-shell=4.4.1 mongodb-org-mongos=4.4.1 mongodb-org-tools=4.4.1

方法1、2启动 MongoDB

执行命令检查 MongoDB 的状态:

sudo systemctl status mongodb

启动 MongoDB:

sudo systemctl start mongod

开机启动 MongoDB:

sudo systemctl enable mongod

查看 MongoDB 版本:

mongo --versionmongod --version

注意:由于 Linux/Unix 系统会对文件描述符的数量或者线程数量加以限制,如果安装过程或者启动时报错,需要自行另外查找方法解决,这里不再赘述。

通过二进制包安装(方法3)

适合网络不会或者离线安装,有tgzdebsource code等方法安装,这里只使用tgz方式。

安装依赖

# ubuntu 16.04sudo apt-get install libcurl3 openssl liblzma5# ubuntu 18.04 & 20.04sudo apt-get install libcurl4 openssl liblzma5

选择合适的系统下载二进制包:

https://www.mong*o**db.com/try/download/community?tck=docs_server

Package 可以选择包的形式,如 shell(deb)、shell(tgz)。

注意,要在服务器下载的话,就不要点击 Download,而是点击Copy Link复制二进制包的下载链接。

请注意下载的软件版本,mongos 、tagz 包含全部功能;

其它的是单独提供 server 或者 client(shell) 功能。

本小节将提供安装 .deb 和 tgz 包的说明,请自行选择要安装的包!(建议直接下载 tgz)。

img_64cc99af7a0bb30.jpg

deb 安装 MongoDB

如果下载了 .deb 文件,请使用下面命令安装。

wget {下载地址}sudo dpkg -i {软件包名}.deb

tgz 安装 MongoDB

如果下载了.tar.gz文件,请使用下面命令安装。

tar -zxvf mongodb-{版本}.tgz# 下面是示例cd mongodb-linux-x86_64-ubuntu1604-4.4.1... ...|-- bin| `-- mongo|-- LICENSE-Community.txt|-- MPL-2|-- README`-- THIRD-PARTY-NOTICES

打开解压的目录,执行:

sudo cp bin/* /usr/local/bin/# 实际上就是将二进制可执行文件放到 bin 目录

启动 MongoDB

创建数据存放目录:

sudo mkdir -p /var/lib/mongo

创建日志存放目录:

sudo mkdir -p /var/log/mongodb

如果不是使用 root 用户登录,则需要获取文件权限:

# whoami是你的用户名sudo chown `whoami` /var/lib/mongosudo chown `whoami` /var/log/mongodb

运行 MongoDB:

mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork

之后终端会提示已经成功启动;也可以查看/var/log/mongodb/mongod.log日志文件中的内容确定 MongoDB 的运行情况;

cat /var/log/mongodb/mongod.log日志文件,会发现第一行:

pid=22639 port=27017

port 即 MongoDB 的连接端口。

卸载方法

apt 卸载方法

适合使用 镜像仓库安装的 MongoDB。

sudo apt-get purge mongodb mongodb-clients mongodb-server mongodb-devsudo apt-get purge mongodb-10gensudo apt-get autoremove

注:执行过程报错不用管。

tgz 卸载方法

适合卸载使用 .tar.gz 安装的包。

rm /usr/local/bin/mongo*

指定启动的配置

通过配置文件

如果前面提到过配置文件/etc/mongod.conf,如果通过配置文件启动,则会方便很多,使用配置文件启动 MongoDB 的方法:

mongod --config /etc/mongod.conf

通过参数

通过参数启动 MongoDB 的话,每次启动都比较麻烦:

mongod--bind_ip=0.0.0.0 --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork

MongoDB 绑定IP、端口

查看 MongoDB 配置:

# 进入 shellmongo# 执行use admindb.runCommand( { getParameter : '*' } )

默认 MongoDB 是本地服务,外界无法访问主机的 MongoDB 服务,这里来配置一下,使其能够被外网访问。

在 MongoDB 启动后,执行以下命令修改配置。

# 绑定所有地址mongod --bind_ip_all# 修改端口mongod --port 27017

或者停了 MongoDB 服务后,使用以下命令启动:

mongod--bind_ip=0.0.0.0 --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork

或者手动修改/etc/mongod.conf配置文件,把其中一段改成0.0.0.0

# network interfacesnet:port: 27017bindIp: 0.0.0.0

修改完毕后,需要关闭 MongoDB,再开启,请参考后面 ”停止 MongoDB“ 一节。

测试远程 IP 连接

测试连接指定 IP 和 port 的 MongoDB 服务:

mongo {你的服务器公网IP}:27017

加上密码验证

设置账号密码

mongo# 进入 MongoDB shell 后use admindb.createUser({user:"admin",pwd:"123456",roles:[{role:"root",db:"admin"}]})

如果不生效,请自行找方法解决,这里不再赘述~

开启登录验证

然后打开/etc/mongod.conf文件,将#security:改成:

security:authorization: enabled

如果不生效,请自行找方法解决,这里不再赘述~

停止 MongoDB

mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --shutdown

搭建集群

按照此方法,再炮制一台服务器就行。

建议使用 docker 一次性搞好,自己手动在物理机上面安装,太折腾了。

接下来,我们要根据官方文档,搭建简单的副本集群。

官方文档地址:https://docs.m*o**ngodb.com/manual/replication/

副本集

副本集是一组 MongoDB 实例来维护相同数据集。

官网文档解释:一个副本集包含多个数据承载节点和一个仲裁器节点(可选)。在数据承载节点中,只有一个成员被视为主要节点,而其他节点则被视为次要节点。

用一下官方的图:

img_64cc99af8775831.jpg

故障转移

图中有三台 MongoDB 实例,当 Primary 挂了后,Secondary可以换掉挂了的服务器,成为新的 Primary。

img_64cc99afc690832.jpg

由于我只有两台服务器,因此只能组双机热备。

方案

主节点(Primary)

对外接收所有请求,然后将修改同步到所有 Secondary 中。

当 主节点(Primary) 挂了后,其它 Secondary 或者 Arbiter 节点就会重新选举一个主节点出来。

副本节点(Secondary)

副本节点是备胎,数据集跟主节点(Primary)一致,当主节点挂了后,有机会成为正胎(Primary)。

仲裁者(Arbiter)

不保存数据集,也不能成为(Primary)。作用是当主节点挂了后,投票给 Secondary,让 Secondary 成为 Primary。

但是怎么配置原有的 MongoDB 实例,使其成为 Primary - Secondary 集群呢?Google 了很久。

找到 MongoDB 官方的文档:

https://docs.*mong*od*b.com/manual/tutorial/deploy-replica-set/

设计实例名称

在 primary 机器和 secondary 机器上,分别打开/etc/mongod.conf文件,找到#replication,设置节点名称。

replication:replSetName: {名称}

primary 机器设置primary,secondary 机器设置beitai

replSetName 的作用解释如下:

https://docs.**mo*ngodb.com/manual/reference/configuration-options/#replication.replSetName

也可以在启动 MongoDB 时加上--replSet "beitai"的参数。

mongod --replSet "beitai" ... ...

请停止 MongoDB 后,使用长命令的方法启动 MongoDB

请在要设置为 Primary 的机器,执行:

mongod --replSet "primary" --bind_ip=0.0.0.0 --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork

请在要设置为 Secondary 的机器,执行:

mongod --replSet "beitai" --bind_ip=0.0.0.0 --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork

如何创建集群

必须要做到以下两点配置:

Add Members to a Replica SetDeploy a Replica Set

笔者在这里踩了很大的坑,试了很多种方法和配置才成功。

启动两个实例(配置)

提前说明,如果使用rs.指令配置实例,想重新配置,出现 ”"errmsg" : "already initialized"“,可以使用rs.reconfig()清除配置。

rsconf = rs.conf()rsconf.members = [{_id: 1, host: "本机的ip:27017"}]rs.reconfig(rsconf, {force: true})

在 Secondary 机器,执行命令停止运行:

mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --shutdown

重新启动 Secondary 机器:

mongod --replSet "beitai" --bind_ip=0.0.0.0 --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork

设置为 Secondary 节点:

rs.initiate( {_id: "beitai",version: 1,members: [ { _id: 0, host : "primary的ip:27017" } { _id: 1, host : "secondary的ip:27017" }] })

注:id是优先级。

在 primary 机器,执行命令停止运行:

mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --shutdown

重新启动 primary:

mongod --replSet "beitai" --bind_ip=0.0.0.0 --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork

在 primary 进入 shell:

mongo

执行命令进行初始化并设置自己为 primary:

rs.initiate( {_id: "primary",version: 1,members: [ { _id: 0, host : "primary的ip:27017" }, { _id: 1, host : "secondary的ip:27017" }] })

分别在两个实例打开 mongo shell,执行:

rs.status()

发现:

beitai:SECONDARY> ...primary:PRIMARY>

使用工具连接 MongoDB 并创建一个名为 Test 的数据库:

img_64cc99b00230c33.jpg

副本集状态查看

查看复制延迟:

rs.printSlaveReplicationInfo()

执行结果:

WARNING: printSlaveReplicationInfo is deprecated and may be removed in the next major release. Please use printSecondaryReplicationInfo instead.source: *.*.*.*:27017syncedTo: Sat Oct 17 2020 20:02:49 GMT+0800 (CST)0 secs (0 hrs) behind the freshest member (no primary available at the moment)source: *.*.*.*:27017syncedTo: Thu Jan 01 1970 08:00:00 GMT+0800 (CST)1602936169 secs (445260.05 hrs) behind the freshest member (no primary available at the moment)

.NET Core 连接 MongoDB

.NET 程序要连接 MongoDB ,需要通过 Nuget 包安装MongoDB.Driver驱动。

我们来创建一个控制台程序,Nuget 搜索MongoDB.Driver并安装,接下来一步步使用连接 MongoDB。

文档地址:https://mongodb.**g*ithub.io/mongo-csharp-driver/2.10/getting_started/

添加 using 引用:

using MongoDB.Bson;using MongoDB.Driver;

连接 MongoDB

var client = new MongoClient("mongodb://primary的ip:27017,secondary的ip:27017");

获取数据库

IMongoDatabase database = client.GetDatabase("Test");

获取文档集合

var collection = database.GetCollection<BsonDocument>("MyCollection");

插入文档(json)

var document = new BsonDocument{{ "name", "MongoDB" },{ "type", "Database" },{ "count", 1 },{ "info", new BsonDocument{{ "x", 203 },{ "y", 102 }}}};

其源结构的 json 如下:

{ "name": "MongoDB", "type": "database", "count": 1, "info": { x: 203, y: 102 }}

将文档插入到集合中:

collection.InsertOne(document);// 使用异步 await collection.InsertOneAsync(document);

然后执行程序,一会儿后,打开 MongoDB 管理器,查看集合。

img_64cc99b022aa134.gif

到此这篇关于.Net Core中使用MongoDB搭建集群与项目实战的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持一聚教程网。

相关文章

精彩推荐