当前位置: 首页 > news >正文

【赵渝强老师】部署MongoDB复制集

1

​在了解到了MongoDB复制集的体系架构以后,下面将通过具体的步骤来演示如何搭建单个节点的MongoDB复制集环境。下表列举了MongoDB复制集的配置信息。​

2

提示:上表在一台主机上通过监听不同的端口来搭建MongoDB复制集环境,也可以使用三台主机来搭建。

image.png
点击这里查看视频讲解:【赵渝强老师】部署MongoDB复制集

下面是具体的搭建步骤:

(1)创建MongoDB复制集每个节点数据存储的目录。

mkdir -p /data/primary/
mkdir -p /data/slave01/
mkdir -p /data/slave02/

(2)编辑主库的配置文件/data/primary/mongo_primary.conf。

dbpath=/data/primary/ 
port=27017 
fork=true
logpath=/data/primary/primary.log
replSet=mycluster

提示:在搭建MongoDB复制集环境时,最重要的参数就是replSet。该参数将用于标识该节点从属的复制集信息。

(3)编辑第一个从库的配置文件/data/slave01/mongo_slave01.conf。

dbpath=/data/slave01/ 
port=27018
fork=true
logpath=/data/slave01/slave01.log
replSet=mycluster

(4)编辑第二个从库的配置文件/data/slave02/mongo_slave02.conf

dbpath=/data/slave02/ 
port=27019
fork=true
logpath=/data/slave02/slave02.log
replSet=mycluster

(5)使用mongod命令启动每个节点。

mongod --config /data/primary/mongo_primary.conf
mongod --config /data/slave01/mongo_slave01.conf 
mongod --config /data/slave02/mongo_slave02.conf 

(6)确定MongoDB实例监听的地址信息。

netstat -ntulp | grep mongod输出的信息如下:
tcp 0 0 127.0.0.1:27019  0.0.0.0:*  LISTEN      46922/mongod        
tcp 0 0 127.0.0.1:27017  0.0.0.0:*  LISTEN      46804/mongod        
tcp 0 0 127.0.0.1:27018  0.0.0.0:*  LISTEN      46868/mongod  

(7)使用mongoshell登录其中的一个MongoDB数据库实例。

mongo

(8)查看复制集的状态。

> rs.status()输出的信息如下:
{"ok" : 0,"errmsg" : "no replset config has been received","code" : 94,"codeName" : "NotYetInitialized"
}

提示:MongoDB复制集在使用前需要先执行初始化。

(9)创建复制集的配置信息,将各个节点添加到复制集配置信息中。

> cfg = {"_id":"mycluster","members":[{"_id":0,"host":"127.0.0.1:27017"},{"_id":1,"host":"127.0.0.1:27018"},{"_id":2,"host":"127.0.0.1:27019"}]}

(10)执行复制集的初始化

> rs.initiate(cfg)

(11)查看副本集的状态。

> rs.status()输出的信息如下:
{"set" : "mycluster","date" : ISODate("2022-04-06T04:03:05.729Z"),"myState" : 2,"term" : NumberLong(0),"syncSourceHost" : "","syncSourceId" : -1,"heartbeatIntervalMillis" : NumberLong(2000),"majorityVoteCount" : 2,"writeMajorityCount" : 2,"votingMembersCount" : 3,"writableVotingMembersCount" : 3,......"members" : [{"_id" : 0,"name" : "127.0.0.1:27017","health" : 1,"state" : 2,"stateStr" : "SECONDARY","uptime" : 603,"optime" : {"ts" : Timestamp(1649217783, 1),"t" : NumberLong(-1)},......},{"_id" : 1,"name" : "127.0.0.1:27018","health" : 1,"state" : 2,"stateStr" : "SECONDARY","uptime" : 2,"optime" : {"ts" : Timestamp(1649217783, 1),"t" : NumberLong(-1)},"optimeDurable" : {"ts" : Timestamp(1649217783, 1),"t" : NumberLong(-1)},......},{"_id" : 2,"name" : "127.0.0.1:27019","health" : 1,"state" : 2,"stateStr" : "SECONDARY","uptime" : 2,"optime" : {"ts" : Timestamp(1649217783, 1),"t" : NumberLong(-1)},"optimeDurable" : {"ts" : Timestamp(1649217783, 1),"t" : NumberLong(-1)},......}],"ok" : 1,......
}

提示:输出的三个节点信息包含以下的字段信息:
"stateStr" : "SECONDARY",
这说明MongoDB复制集正在执行选举的操作,此时的三个节点都是从库。

(12)等待一段时间,再次查看副本集的状态。

> rs.status()
输出的信息如下:
......
"members" : [{"_id" : 0,"name" : "127.0.0.1:27017","health" : 1,"state" : 1,"stateStr" : "PRIMARY","uptime" : 961,......},{"_id" : 1,"name" : "127.0.0.1:27018","health" : 1,"state" : 2,"stateStr" : "SECONDARY","uptime" : 360,......},{"_id" : 2,"name" : "127.0.0.1:27019","health" : 1,"state" : 2,"stateStr" : "SECONDARY","uptime" : 360,......}
],
......

提示:MongoDB复制集经过选举后,27017的节点被选举成了主库,而27018和27019的节点成为了从库。

(13)在主库上创建一个集合并插入一条文档。

> use demo
> db.test1.insert({name:'Tom'})

(14)在主库上查询文档。

> db.test1.find()输出的信息如下:
{ "_id" : ObjectId("624d13bc587b73632da622ce"), "name" : "Tom" }

(15)使用mongoshell登录到其中一个从库上,并查看数据库信息。

mongo --port 27018
> show dbs输出的错误信息如下:
......
uncaught exception: Error: listDatabases failed:{"topologyVersion" : {"processId" : ObjectId("624d0ea30b93b269b4c404d6"),"counter" : NumberLong(4)},"ok" : 0,"errmsg" : "not master and slaveOk=false","code" : 13435,"codeName" : "NotPrimaryNoSecondaryOk","$clusterTime" : {"clusterTime" : Timestamp(1649218594, 1),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}},"operationTime" : Timestamp(1649218594, 1)
} :
......

提示:在默认情况下,MongoDB复制集的从库是不可用的,需要手动启用从库。

(16)启用从库并查看数据库信息。

> rs.slaveOk()
> show dbs输出的信息如下:
admin   0.000GB
config  0.000GB
demo    0.000GB
local   0.000GB

(17)查看demo数据库中的集合。

> use demo
> db.test1.find()

(18)在从库上插入一条新的文档。

> db.test1.insert({name:'Mary'})输出的错误信息如下:
WriteCommandError({"topologyVersion" : {"processId" : ObjectId("624d0ea30b93b269b4c404d6"),"counter" : NumberLong(4)},"ok" : 0,"errmsg" : "not master","code" : 10107,"codeName" : "NotWritablePrimary","$clusterTime" : {"clusterTime" : Timestamp(1649221014, 1),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}},"operationTime" : Timestamp(1649221014, 1)
})

提示:在MongoDB复制集的环境中从库是只读的状态。

http://www.zskr.cn/news/115711.html

相关文章:

  • feishu2md:解放双手的飞书文档转换神器,让格式转换变得简单高效
  • 31、Nagios CGI配置详解
  • 避开绩效考核误区:实时反馈系统的正确打开方式
  • 2025 年 12 月假山制作厂家权威推荐榜:园林景观点睛之选,仿真自然与艺术造型的匠心品牌深度解析 - 品牌企业推荐师(官方)
  • IndexTTS2配置文件深度解析:从入门到精通的参数调优指南
  • 完整教程:直接插入排序,希尔排序,直接选择排序,堆排序,冒泡排序,快速排序,归并排序,计数排序
  • OpenVoice V2:开启多语言语音克隆的无限可能
  • DWMBlurGlass:打造极致透明的Windows视觉盛宴
  • 2025年知名的铜钎焊炉行业内知名厂家排行榜 - 行业平台推荐
  • 计算属性computed get()和set() 用法
  • 2025年知名的抽屉缓冲滑轨/三节同步缓冲滑轨高评价厂家推荐榜 - 行业平台推荐
  • 从 1600+ 份 Word 文档到生产级 RAG:一个工控行业知识库的全链路实战复盘
  • “微信、阿里齐发力封杀豆包手机,平台生态战升级!”
  • Blender建筑神器building_tools:5分钟学会专业级建筑建模
  • TeslaMate实战指南:从数据焦虑到智能掌控的完整解决方案
  • 导出数据文件名称异常业务处理
  • 酵母三杂交实验:体内解析 RNA 相关互作的核心技术与科学意义
  • 水飞蓟哪个牌子最好最安全,水飞蓟哪个品牌好排名前十,水飞蓟养肝哪家强? - 博客万
  • Redash数据可视化终极指南:从零开始构建专业仪表板
  • Tulsimer 树脂在三元前驱体废水处理中的技术应用与工程实践 —— 基于离子交换法的镍钴回收与资源化方案
  • 高效NAS媒体管理神器:MoviePilot自动化工具完全指南
  • 免费开源Windows组策略编辑器:Policy Plus完整使用手册
  • SRv6技术完全指南(1):下一代网络的核心引擎
  • 【MySQL | 基础】多表查询 - 教程
  • 汇川 PLC 从入门到 EtherCAT 运动控制,全套资料齐了
  • 2025年比较好的护墙灯衣柜灯/线型灯衣柜灯厂家推荐及采购参考 - 行业平台推荐
  • 企业级数据导入导出框架AGEIPort:架构解析与深度实践
  • 2025年信誉高的AI搜索推广服务商排行榜,看哪家技术强? - myqiye
  • 网络加速革命:用TurboACC彻底解决OpenWrt路由器性能瓶颈
  • EmotiVoice语音合成语音老化模拟:预测用户未来声音变化