最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.Net?Core中使用MongoDB搭建集群與項目實戰(zhàn)

 更新時間:2022年02月23日 14:12:13   作者:癡者工良  
本文詳細講解了.Net?Core中使用MongoDB搭建集群與項目實戰(zhàn),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

安裝 MongoDB

安裝 MongoDB 網(wǎng)上有很多教程,MongoDB 官方文檔:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/

筆者這里簡單寫一下安裝過程,筆者使用 ubuntu 系統(tǒng)。

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

支持的系統(tǒng):

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

更新軟件源

sudo apt update
sudo apt upgrade

apt 直接安裝(方法1)

如果你要安裝穩(wěn)定版本,則直接使用一條命令安裝:

sudo apt install mongodb

執(zhí)行命令檢查 MingoDB 的狀態(tài):

sudo systemctl status mongodb

apt 倉庫安裝(方法2)

此種方式可以讓你安裝最新版本的 MongoDB 。

導(dǎo)入包管理系統(tǒng)使用的公鑰

wget -qO - https://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 ] https://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 ] https://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 ] https://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

安裝最新穩(wěn)定版本的 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

執(zhí)行命令檢查 MongoDB 的狀態(tài):

sudo systemctl status mongodb

啟動 MongoDB:

sudo systemctl start mongod

開機啟動 MongoDB:

sudo systemctl enable mongod

查看 MongoDB 版本:

mongo --version
mongod --version

注意:由于 Linux/Unix 系統(tǒng)會對文件描述符的數(shù)量或者線程數(shù)量加以限制,如果安裝過程或者啟動時報錯,需要自行另外查找方法解決,這里不再贅述。

通過二進制包安裝(方法3)

適合網(wǎng)絡(luò)不會或者離線安裝,有 tgz、deb 、source code 等方法安裝,這里只使用 tgz 方式。

安裝依賴

# ubuntu 16.04
sudo apt-get install libcurl3 openssl liblzma5

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

選擇合適的系統(tǒng)下載二進制包:

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

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

注意,要在服務(wù)器下載的話,就不要點擊 Download,而是點擊 Copy Link 復(fù)制二進制包的下載鏈接。

請注意下載的軟件版本,mongos 、tagz 包含全部功能;

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

本小節(jié)將提供安裝 .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

打開解壓的目錄,執(zhí)行:

sudo cp bin/* /usr/local/bin/
# 實際上就是將二進制可執(zhí)行文件放到 bin 目錄

啟動 MongoDB

創(chuàng)建數(shù)據(jù)存放目錄:

sudo mkdir -p /var/lib/mongo

創(chuàng)建日志存放目錄:

sudo mkdir -p /var/log/mongodb

如果不是使用 root 用戶登錄,則需要獲取文件權(quán)限:

# 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

之后終端會提示已經(jīng)成功啟動;也可以查看 /var/log/mongodb/mongod.log 日志文件中的內(nèi)容確定 MongoDB 的運行情況;

cat /var/log/mongodb/mongod.log 日志文件,會發(fā)現(xiàn)第一行:

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

注:執(zhí)行過程報錯不用管。

tgz 卸載方法

適合卸載使用 .tar.gz 安裝的包。

rm /usr/local/bin/mongo*

指定啟動的配置

通過配置文件

如果前面提到過配置文件 /etc/mongod.conf,如果通過配置文件啟動,則會方便很多,使用配置文件啟動 MongoDB 的方法:

mongod --config /etc/mongod.conf

通過參數(shù)

通過參數(shù)啟動 MongoDB 的話,每次啟動都比較麻煩:

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

MongoDB 綁定IP、端口

查看 MongoDB 配置:

# 進入 shell
mongo

# 執(zhí)行
use admin
db.runCommand( { getParameter : '*' } )

默認 MongoDB 是本地服務(wù),外界無法訪問主機的 MongoDB 服務(wù),這里來配置一下,使其能夠被外網(wǎng)訪問。

在 MongoDB 啟動后,執(zhí)行以下命令修改配置。

# 綁定所有地址
mongod --bind_ip_all

# 修改端口
mongod --port 27017

或者停了 MongoDB 服務(wù)后,使用以下命令啟動:

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  

修改完畢后,需要關(guān)閉 MongoDB,再開啟,請參考后面 ”停止 MongoDB“ 一節(jié)。

測試遠程 IP 連接

測試連接指定 IP 和 port 的 MongoDB 服務(wù):

mongo {你的服務(wù)器公網(wǎng)IP}:27017

加上密碼驗證

設(shè)置賬號密碼

mongo

# 進入 MongoDB shell 后
use admin
db.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

搭建集群

按照此方法,再炮制一臺服務(wù)器就行。

建議使用 docker 一次性搞好,自己手動在物理機上面安裝,太折騰了。

接下來,我們要根據(jù)官方文檔,搭建簡單的副本集群。

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

副本集

副本集是一組 MongoDB 實例來維護相同數(shù)據(jù)集。

官網(wǎng)文檔解釋:一個副本集包含多個數(shù)據(jù)承載節(jié)點和一個仲裁器節(jié)點(可選)。在數(shù)據(jù)承載節(jié)點中,只有一個成員被視為主要節(jié)點,而其他節(jié)點則被視為次要節(jié)點。

用一下官方的圖:

mongoDB副本集

故障轉(zhuǎn)移

圖中有三臺 MongoDB 實例,當(dāng) Primary 掛了后,Secondary 可以換掉掛了的服務(wù)器,成為新的 Primary。

故障轉(zhuǎn)移

由于我只有兩臺服務(wù)器,因此只能組雙機熱備。

方案

主節(jié)點(Primary)

對外接收所有請求,然后將修改同步到所有 Secondary 中。

當(dāng) 主節(jié)點(Primary) 掛了后,其它 Secondary 或者 Arbiter 節(jié)點就會重新選舉一個主節(jié)點出來。

副本節(jié)點(Secondary)

副本節(jié)點是備胎,數(shù)據(jù)集跟主節(jié)點(Primary)一致,當(dāng)主節(jié)點掛了后,有機會成為正胎(Primary)。

仲裁者(Arbiter)

不保存數(shù)據(jù)集,也不能成為(Primary)。作用是當(dāng)主節(jié)點掛了后,投票給 Secondary,讓 Secondary 成為 Primary。

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

找到 MongoDB 官方的文檔:

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

設(shè)計實例名稱

在 primary 機器和 secondary 機器上,分別打開 /etc/mongod.conf 文件,找到 #replication,設(shè)置節(jié)點名稱。

replication:
  replSetName: {名稱}

primary 機器設(shè)置 primary,secondary 機器設(shè)置 beitai。

replSetName 的作用解釋如下:

https://docs.mongodb.com/manual/reference/configuration-options/#replication.replSetName

也可以在啟動 MongoDB 時加上 --replSet "beitai" 的參數(shù)。

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

請停止 MongoDB 后,使用長命令的方法啟動 MongoDB。

請在要設(shè)置為 Primary 的機器,執(zhí)行:

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

請在要設(shè)置為 Secondary 的機器,執(zhí)行:

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

如何創(chuàng)建集群

必須要做到以下兩點配置:

  • Add Members to a Replica Set
  • Deploy a Replica Set

筆者在這里踩了很大的坑,試了很多種方法和配置才成功。

啟動兩個實例(配置)

提前說明,如果使用 rs. 指令配置實例,想重新配置,出現(xiàn) ”"errmsg" : "already initialized"“,可以使用 rs.reconfig() 清除配置。

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

在 Secondary 機器,執(zhí)行命令停止運行:

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

設(shè)置為 Secondary 節(jié)點:

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

注:id是優(yōu)先級。

在 primary 機器,執(zhí)行命令停止運行:

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

執(zhí)行命令進行初始化并設(shè)置自己為 primary:

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

分別在兩個實例打開 mongo shell,執(zhí)行:

rs.status()

發(fā)現(xiàn):

beitai:SECONDARY> 
...
primary:PRIMARY>

使用工具連接 MongoDB 并創(chuàng)建一個名為 Test 的數(shù)據(jù)庫:

連接MongoDB

副本集狀態(tài)查看

查看復(fù)制延遲:

rs.printSlaveReplicationInfo()

執(zhí)行結(jié)果:

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 驅(qū)動。

我們來創(chuàng)建一個控制臺程序,Nuget 搜索 MongoDB.Driver 并安裝,接下來一步步使用連接 MongoDB。

文檔地址:https://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");

獲取數(shù)據(jù)庫

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 }
                }}
            };

其源結(jié)構(gòu)的 json 如下:

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

將文檔插入到集合中:

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

然后執(zhí)行程序,一會兒后,打開 MongoDB 管理器,查看集合。

到此這篇關(guān)于.Net Core中使用MongoDB搭建集群與項目實戰(zhàn)的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • .Net使用XtraGrid控件綁定數(shù)據(jù)

    .Net使用XtraGrid控件綁定數(shù)據(jù)

    這篇文章介紹了.Net使用XtraGrid控件綁定數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • AjaxControlToolKit DropDownExtender(下拉擴展控件)使用方法

    AjaxControlToolKit DropDownExtender(下拉擴展控件)使用方法

    由于工作的需要,使用了這個控件 挺簡單,使用這個擴展控件能輕松的吧 Label 控件 TextBox控件擴展成類似DropDownList控件的功能。這樣使用既可以使用label控件或者textBox控件的一些屬性又能實現(xiàn)dropDownList的功能。
    2008-10-10
  • 那些年,我還在學(xué)asp.net(一) 學(xué)習(xí)筆記

    那些年,我還在學(xué)asp.net(一) 學(xué)習(xí)筆記

    那些年到此,基本學(xué)習(xí)了前端的基本知識,那些年的第四課就是asp.net,當(dāng)然那時看了很多教程,比如說:天轟穿,當(dāng)然天轟穿說得比較多,如面向?qū)ο?,C#知識,由于當(dāng)時上過C++,所以就沒有看這些,直接從asp.net開始,主要是學(xué)習(xí)一下asp.net用到的一些基本控件
    2012-03-03
  • Asp.Net常用函數(shù)

    Asp.Net常用函數(shù)

    Asp.Net常用函數(shù)...
    2007-03-03
  • C#列出局域網(wǎng)中可用SQL Server服務(wù)器(續(xù))

    C#列出局域網(wǎng)中可用SQL Server服務(wù)器(續(xù))

    上一篇文章展示了使用COM對象如何列出局域網(wǎng)中的 SQL Server服務(wù)器信息,后來還發(fā)現(xiàn)在.Net中有現(xiàn)成的類可用,而不需要使用不太熟悉的COM對象了,這樣豈不是更好?下面我把代碼展示給大家:
    2008-04-04
  • 為大家經(jīng)常為md5加密過的常用admin,admin888,0000密碼

    為大家經(jīng)常為md5加密過的常用admin,admin888,0000密碼

    為大家經(jīng)常為md5加密過的常用admin,admin888,0000密碼...
    2007-10-10
  • Json.Net6.0用法介紹

    Json.Net6.0用法介紹

    這篇文章介紹了Json.Net6.0的用法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值。需要的朋友可以收藏下,方便下次瀏覽觀看
    2021-12-12
  • .NET?Core使用flyfire.CustomSerialPort實現(xiàn)Windows/Linux跨平臺串口通訊

    .NET?Core使用flyfire.CustomSerialPort實現(xiàn)Windows/Linux跨平臺串口通訊

    本文詳細講解了.NET?Core使用flyfire.CustomSerialPort實現(xiàn)Windows/Linux跨平臺串口通訊的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • ASP.NET Core應(yīng)用程序配置文件AppSetting.json

    ASP.NET Core應(yīng)用程序配置文件AppSetting.json

    這篇文章介紹了ASP.NET Core應(yīng)用程序配置文件AppSetting.json,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • vs.net2008添加模板方法

    vs.net2008添加模板方法

    vs.net2008添加模板方法,需要的朋友可以參考一下
    2013-02-02

最新評論

交城县| 巴林左旗| 剑川县| 塔河县| 甘德县| 旅游| 弥勒县| 洛隆县| 太仓市| 黄陵县| 定兴县| 饶平县| 辰溪县| 外汇| 武乡县| 延庆县| 栾城县| 白山市| 白城市| 哈尔滨市| 昌平区| 宝兴县| 民权县| 内黄县| 扶沟县| 开鲁县| 巴塘县| 葫芦岛市| 滨海县| 察雅县| 利辛县| 凤庆县| 平塘县| 霍林郭勒市| 广昌县| 调兵山市| 攀枝花市| 怀集县| 普格县| 玛曲县| 平阳县|