安裝 MongoDB 網上有不少教程,MongoDB 官方文檔:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/linux
筆者這裏簡單寫一下安裝過程,筆者使用 ubuntu 系統。git
要按照的目標版本:MongoDB 4.4 Community Editiongithub
支持的系統:mongodb
更新軟件源docker
sudo apt update sudo apt upgrade
若是你要安裝穩定版本,則直接使用一條命令安裝:shell
sudo apt install mongodb
執行命令檢查 MingoDB 的狀態:數據庫
sudo systemctl status mongodb
此種方式可讓你安裝最新版本的 MongoDB 。json
導入包管理系統使用的公鑰ubuntu
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
安裝最新穩定版本的 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
執行命令檢查 MongoDB 的狀態:
sudo systemctl status mongodb
啓動 MongoDB:
sudo systemctl start mongod
開機啓動 MongoDB:
sudo systemctl enable mongod
查看 MongoDB 版本:
mongo --version mongod --version
注意:因爲 Linux/Unix 系統會對文件描述符的數量或者線程數量加以限制,若是安裝過程或者啓動時報錯,須要自行另外查找方法解決,這裏再也不贅述。
適合網絡不會或者離線安裝,有 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
選擇合適的系統下載二進制包:
https://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 文件,請使用下面命令安裝。
wget {下載地址} sudo dpkg -i {軟件包名}.deb
若是下載了 .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 目錄
建立數據存放目錄:
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 的鏈接端口。
適合使用 鏡像倉庫安裝的 MongoDB。
sudo apt-get purge mongodb mongodb-clients mongodb-server mongodb-dev sudo apt-get purge mongodb-10gen sudo apt-get autoremove
注:執行過程報錯不用管。
適合卸載使用 .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 配置:
# 進入 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 和 port 的 MongoDB 服務:
mongo {你的服務器公網IP}:27017
mongo # 進入 MongoDB shell 後 use admin db.createUser({user:"admin",pwd:"123456",roles:[{role:"root",db:"admin"}]})
若是不生效,請自行找方法解決,這裏再也不贅述~
而後打開 /etc/mongod.conf
文件,將 #security:
改爲:
security: authorization: enabled
若是不生效,請自行找方法解決,這裏再也不贅述~
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --shutdown
按照此方法,再炮製一臺服務器就行。
建議使用 docker 一次性搞好,本身手動在物理機上面安裝,太折騰了。
接下來,咱們要根據官方文檔,搭建簡單的副本集羣。
官方文檔地址:https://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 官方的文檔:
https://docs.mongodb.com/manual/tutorial/deploy-replica-set/
在 primary 機器和 secondary 機器上,分別打開 /etc/mongod.conf
文件,找到 #
replication,設置節點名稱。
replication: replSetName: {名稱}
primary 機器設置 primary
,secondary 機器設置 beitai
。
replSetName 的做用解釋以下:
https://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
必需要作到如下兩點配置:
筆者在這裏踩了很大的坑,試了不少種方法和配置才成功。
提早說明,若是使用 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 程序要鏈接 MongoDB ,須要經過 Nuget 包安裝 MongoDB.Driver
驅動。
咱們來建立一個控制檯程序,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");
獲取數據庫
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 管理器,查看集合。