網(wǎng)站首頁 編程語言 正文
安裝 MongoDB
安裝 MongoDB 網(wǎng)上有很多教程,MongoDB 官方文檔:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
筆者這里簡單寫一下安裝過程,筆者使用 ubuntu 系統(tǒng)。
要按照的目標(biāo)版本: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
開機(jī)啟動 MongoDB:
sudo systemctl enable mongod
查看 MongoDB 版本:
mongo --version mongod --version
注意:由于 Linux/Unix 系統(tǒng)會對文件描述符的數(shù)量或者線程數(shù)量加以限制,如果安裝過程或者啟動時(shí)報(bào)錯(cuò),需要自行另外查找方法解決,這里不再贅述。
通過二進(jìn)制包安裝(方法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)下載二進(jìn)制包:
https://www.mongodb.com/try/download/community?tck=docs_server
Package 可以選擇包的形式,如 shell(deb)、shell(tgz)。
注意,要在服務(wù)器下載的話,就不要點(diǎn)擊 Download,而是點(diǎn)擊?Copy Link
?復(fù)制二進(jìn)制包的下載鏈接。
請注意下載的軟件版本,mongos 、tagz 包含全部功能;
其它的是單獨(dú)提供 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/ # 實(shí)際上就是將二進(jìn)制可執(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
運(yùn)行 MongoDB:
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork
之后終端會提示已經(jīng)成功啟動;也可以查看?/var/log/mongodb/mongod.log
?日志文件中的內(nèi)容確定 MongoDB 的運(yùn)行情況;
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í)行過程報(bào)錯(cuò)不用管。
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 配置:
# 進(jìn)入 shell mongo # 執(zhí)行 use admin db.runCommand( { getParameter : '*' } )
默認(rèn) MongoDB 是本地服務(wù),外界無法訪問主機(jī)的 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é)。
測試遠(yuǎn)程 IP 連接
測試連接指定 IP 和 port 的 MongoDB 服務(wù):
mongo {你的服務(wù)器公網(wǎng)IP}:27017
加上密碼驗(yàn)證
設(shè)置賬號密碼
mongo # 進(jìn)入 MongoDB shell 后 use admin db.createUser({user:"admin",pwd:"123456",roles:[{role:"root",db:"admin"}]})
如果不生效,請自行找方法解決,這里不再贅述~
開啟登錄驗(yàn)證
然后打開?/etc/mongod.conf
?文件,將?#security:
?改成:
security: authorization: enabled
如果不生效,請自行找方法解決,這里不再贅述~
停止 MongoDB
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --shutdown
搭建集群
按照此方法,再炮制一臺服務(wù)器就行。
建議使用 docker 一次性搞好,自己手動在物理機(jī)上面安裝,太折騰了。
接下來,我們要根據(jù)官方文檔,搭建簡單的副本集群。
官方文檔地址:https://docs.mongodb.com/manual/replication/
副本集
副本集是一組 MongoDB 實(shí)例來維護(hù)相同數(shù)據(jù)集。
官網(wǎng)文檔解釋:一個(gè)副本集包含多個(gè)數(shù)據(jù)承載節(jié)點(diǎn)和一個(gè)仲裁器節(jié)點(diǎn)(可選)。在數(shù)據(jù)承載節(jié)點(diǎn)中,只有一個(gè)成員被視為主要節(jié)點(diǎn),而其他節(jié)點(diǎn)則被視為次要節(jié)點(diǎn)。
用一下官方的圖:
故障轉(zhuǎn)移
圖中有三臺 MongoDB 實(shí)例,當(dāng) Primary 掛了后,Secondary
?可以換掉掛了的服務(wù)器,成為新的 Primary。
由于我只有兩臺服務(wù)器,因此只能組雙機(jī)熱備。
方案
主節(jié)點(diǎn)(Primary)
對外接收所有請求,然后將修改同步到所有 Secondary 中。
當(dāng) 主節(jié)點(diǎn)(Primary) 掛了后,其它 Secondary 或者 Arbiter 節(jié)點(diǎn)就會重新選舉一個(gè)主節(jié)點(diǎn)出來。
副本節(jié)點(diǎn)(Secondary)
副本節(jié)點(diǎn)是備胎,數(shù)據(jù)集跟主節(jié)點(diǎn)(Primary)一致,當(dāng)主節(jié)點(diǎn)掛了后,有機(jī)會成為正胎(Primary)。
仲裁者(Arbiter)
不保存數(shù)據(jù)集,也不能成為(Primary)。作用是當(dāng)主節(jié)點(diǎn)掛了后,投票給 Secondary,讓 Secondary 成為 Primary。
但是怎么配置原有的 MongoDB 實(shí)例,使其成為 Primary - Secondary 集群呢?Google 了很久。
找到 MongoDB 官方的文檔:
https://docs.mongodb.com/manual/tutorial/deploy-replica-set/
設(shè)計(jì)實(shí)例名稱
在 primary 機(jī)器和 secondary 機(jī)器上,分別打開?/etc/mongod.conf
?文件,找到?#
replication,設(shè)置節(jié)點(diǎn)名稱。
replication: replSetName: {名稱}
primary 機(jī)器設(shè)置?primary
,secondary 機(jī)器設(shè)置?beitai
。
replSetName 的作用解釋如下:
https://docs.mongodb.com/manual/reference/configuration-options/#replication.replSetName
也可以在啟動 MongoDB 時(shí)加上?--replSet "beitai"
?的參數(shù)。
mongod --replSet "beitai" ... ...
請停止 MongoDB 后,使用長命令的方法啟動 MongoDB。
請?jiān)谝O(shè)置為 Primary 的機(jī)器,執(zhí)行:
mongod --replSet "primary" --bind_ip=0.0.0.0 --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork
請?jiān)谝O(shè)置為 Secondary 的機(jī)器,執(zhí)行:
mongod --replSet "beitai" --bind_ip=0.0.0.0 --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork
如何創(chuàng)建集群
必須要做到以下兩點(diǎn)配置:
- Add Members to a Replica Set
- Deploy a Replica Set
筆者在這里踩了很大的坑,試了很多種方法和配置才成功。
啟動兩個(gè)實(shí)例(配置)
提前說明,如果使用?rs.
?指令配置實(shí)例,想重新配置,出現(xiàn) ”"errmsg" : "already initialized"“,可以使用?rs.reconfig()
?清除配置。
rsconf = rs.conf() rsconf.members = [{_id: 1, host: "本機(jī)的ip:27017"}] rs.reconfig(rsconf, {force: true})
在 Secondary 機(jī)器,執(zhí)行命令停止運(yùn)行:
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --shutdown
重新啟動 Secondary 機(jī)器:
mongod --replSet "beitai" --bind_ip=0.0.0.0 --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork
設(shè)置為 Secondary 節(jié)點(diǎn):
rs.initiate( { _id: "beitai", version: 1, members: [ { _id: 0, host : "primary的ip:27017" } { _id: 1, host : "secondary的ip:27017" } ] } )
注:id是優(yōu)先級。
在 primary 機(jī)器,執(zhí)行命令停止運(yùn)行:
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 進(jìn)入 shell:
mongo
執(zhí)行命令進(jìn)行初始化并設(shè)置自己為 primary:
rs.initiate( { _id: "primary", version: 1, members: [ { _id: 0, host : "primary的ip:27017" }, { _id: 1, host : "secondary的ip:27017" } ] } )
分別在兩個(gè)實(shí)例打開 mongo shell,執(zhí)行:
rs.status()
發(fā)現(xiàn):
beitai:SECONDARY> ... primary:PRIMARY>
使用工具連接 MongoDB 并創(chuàng)建一個(gè)名為 Test 的數(shù)據(jù)庫:
副本集狀態(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)建一個(gè)控制臺程序,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("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 管理器,查看集合。
原文鏈接:https://www.cnblogs.com/whuanle/p/13832578.html
相關(guān)推薦
- 2023-03-23 Python?shutil模塊實(shí)現(xiàn)文件的裁剪、壓縮與解壓縮的方法_python
- 2023-04-06 OpenMP中For?Construct對dynamic的調(diào)度方式詳解_C 語言
- 2022-11-18 一文搞懂正則表達(dá)式基礎(chǔ)語法以及如何應(yīng)用_正則表達(dá)式
- 2023-01-26 redis性能優(yōu)化之生產(chǎn)中實(shí)際遇到的問題及排查總結(jié)_Redis
- 2022-12-24 C++返回值是類名和返回值是引用的區(qū)別及說明_C 語言
- 2022-05-21 云原生技術(shù)kubernetes之volumes容器的使用_云其它
- 2021-12-04 Go?實(shí)現(xiàn)?Nginx?加權(quán)輪詢算法的方法步驟_Golang
- 2022-12-21 C語言中continue的用法詳解_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支