如何通过.Net Core实现MongoDB集群搭建及项目实战操作?

2026-03-26 23:061阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计3684个文字,预计阅读时间需要15分钟。

如何通过.Net Core实现MongoDB集群搭建及项目实战操作?

目录安装MongoDB- 使用apt直接安装(方法1)- 使用apt仓库安装(方法2)- 方法1:2启动MongoDB- 通过二进制包安装(方法3)- 安装依赖- 使用deb安装MongoDB- 使用tgz安装MongoDB- 启动MongoDB- 卸载方法- apt卸载方法- tgz卸载方法- 指定MongoDB

目录
  • 安装MongoDB
    • apt直接安装(方法1)
    • apt仓库安装(方法2)
    • 方法1、2启动MongoDB
    • 通过二进制包安装(方法3)
      • 安装依赖
      • deb安装MongoDB
      • tgz安装MongoDB
      • 启动MongoDB
    • 卸载方法
      • apt卸载方法
      • tgz卸载方法
    • 指定启动的配置
      • 通过配置文件
      • 通过参数
    • MongoDB绑定IP、端口
      • 测试远程IP连接
    • 加上密码验证
      • 设置账号密码
      • 开启登录验证
    • 停止MongoDB
    • 搭建集群
      • 副本集
        • 故障转移
          • 方案
            • 设计实例名称
              • 如何创建集群
                • 启动两个实例(配置)
                  • 副本集状态查看
                  • .NETCore连接MongoDB

                    安装 MongoDB

                    安装 MongoDB 网上有很多教程,MongoDB 官方文档:docs.mongodb.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 update sudo apt upgrade

                    apt 直接安装(方法1)

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

                    sudo apt install mongodb

                    执行命令检查 MingoDB 的状态:

                    sudo systemctl status mongodb

                    apt 仓库安装(方法2)

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

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

                    wget -qO - www.mongodb.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.04 echo "deb [ arch=amd64,arm64 ] repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list # ubuntu 18.04 echo "deb [ arch=amd64,arm64 ] repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list # ubuntu 20.04 echo "deb [ arch=amd64,arm64 ] repo.mongodb.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 --version mongod --version

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

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

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

                    安装依赖

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

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

                    www.mongodb.com/try/download/community?tck=docs_server

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

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

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

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

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

                    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/mongo sudo 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-dev sudo apt-get purge mongodb-10gen sudo 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 配置:

                    # 进入 shell mongo # 执行 use admin db.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 interfaces net: port: 27017 bindIp: 0.0.0.0

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

                    测试远程 IP 连接

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

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

                    加上密码验证

                    设置账号密码

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

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

                    如何通过.Net Core实现MongoDB集群搭建及项目实战操作?

                    开启登录验证

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

                    security: authorization: enabled

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

                    停止 MongoDB

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

                    搭建集群

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

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

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

                    官方文档地址:docs.mongodb.com/manual/replication/

                    副本集

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

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

                    用一下官方的图:

                    故障转移

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

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

                    方案

                    主节点(Primary)

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

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

                    副本节点(Secondary)

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

                    仲裁者(Arbiter)

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

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

                    找到 MongoDB 官方的文档:

                    docs.mongodb.com/manual/tutorial/deploy-replica-set/

                    设计实例名称

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

                    replication: replSetName: {名称}

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

                    replSetName 的作用解释如下:

                    docs.mongodb.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 Set
                    • Deploy 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 的数据库:

                    副本集状态查看

                    查看复制延迟:

                    rs.printSlaveReplicationInfo()

                    执行结果:

                    WARNING: printSlaveReplicationInfo is deprecated and may be removed in the next major release. Please use printSecondaryReplicationInfo instead. source: *.*.*.*:27017 syncedTo: 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: *.*.*.*:27017 syncedTo: 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。

                    文档地址:mongodb.github.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 管理器,查看集合。

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

                    标签:集群

                    本文共计3684个文字,预计阅读时间需要15分钟。

                    如何通过.Net Core实现MongoDB集群搭建及项目实战操作?

                    目录安装MongoDB- 使用apt直接安装(方法1)- 使用apt仓库安装(方法2)- 方法1:2启动MongoDB- 通过二进制包安装(方法3)- 安装依赖- 使用deb安装MongoDB- 使用tgz安装MongoDB- 启动MongoDB- 卸载方法- apt卸载方法- tgz卸载方法- 指定MongoDB

                    目录
                    • 安装MongoDB
                      • apt直接安装(方法1)
                      • apt仓库安装(方法2)
                      • 方法1、2启动MongoDB
                      • 通过二进制包安装(方法3)
                        • 安装依赖
                        • deb安装MongoDB
                        • tgz安装MongoDB
                        • 启动MongoDB
                      • 卸载方法
                        • apt卸载方法
                        • tgz卸载方法
                      • 指定启动的配置
                        • 通过配置文件
                        • 通过参数
                      • MongoDB绑定IP、端口
                        • 测试远程IP连接
                      • 加上密码验证
                        • 设置账号密码
                        • 开启登录验证
                      • 停止MongoDB
                      • 搭建集群
                        • 副本集
                          • 故障转移
                            • 方案
                              • 设计实例名称
                                • 如何创建集群
                                  • 启动两个实例(配置)
                                    • 副本集状态查看
                                    • .NETCore连接MongoDB

                                      安装 MongoDB

                                      安装 MongoDB 网上有很多教程,MongoDB 官方文档:docs.mongodb.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 update sudo apt upgrade

                                      apt 直接安装(方法1)

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

                                      sudo apt install mongodb

                                      执行命令检查 MingoDB 的状态:

                                      sudo systemctl status mongodb

                                      apt 仓库安装(方法2)

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

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

                                      wget -qO - www.mongodb.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.04 echo "deb [ arch=amd64,arm64 ] repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list # ubuntu 18.04 echo "deb [ arch=amd64,arm64 ] repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list # ubuntu 20.04 echo "deb [ arch=amd64,arm64 ] repo.mongodb.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 --version mongod --version

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

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

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

                                      安装依赖

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

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

                                      www.mongodb.com/try/download/community?tck=docs_server

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

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

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

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

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

                                      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/mongo sudo 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-dev sudo apt-get purge mongodb-10gen sudo 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 配置:

                                      # 进入 shell mongo # 执行 use admin db.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 interfaces net: port: 27017 bindIp: 0.0.0.0

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

                                      测试远程 IP 连接

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

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

                                      加上密码验证

                                      设置账号密码

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

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

                                      如何通过.Net Core实现MongoDB集群搭建及项目实战操作?

                                      开启登录验证

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

                                      security: authorization: enabled

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

                                      停止 MongoDB

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

                                      搭建集群

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

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

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

                                      官方文档地址:docs.mongodb.com/manual/replication/

                                      副本集

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

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

                                      用一下官方的图:

                                      故障转移

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

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

                                      方案

                                      主节点(Primary)

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

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

                                      副本节点(Secondary)

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

                                      仲裁者(Arbiter)

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

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

                                      找到 MongoDB 官方的文档:

                                      docs.mongodb.com/manual/tutorial/deploy-replica-set/

                                      设计实例名称

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

                                      replication: replSetName: {名称}

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

                                      replSetName 的作用解释如下:

                                      docs.mongodb.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 Set
                                      • Deploy 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 的数据库:

                                      副本集状态查看

                                      查看复制延迟:

                                      rs.printSlaveReplicationInfo()

                                      执行结果:

                                      WARNING: printSlaveReplicationInfo is deprecated and may be removed in the next major release. Please use printSecondaryReplicationInfo instead. source: *.*.*.*:27017 syncedTo: 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: *.*.*.*:27017 syncedTo: 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。

                                      文档地址:mongodb.github.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 管理器,查看集合。

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

                                      标签:集群