大数据 MongoDB 复制集管理
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,MongoDB 复制集MongoDB复制是将数据同步在多个服务器的过程。复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。复制还允许您从硬件故障和服
千家信息网最后更新 2025年01月20日大数据 MongoDB 复制集管理
MongoDB 复制集
MongoDB复制是将数据同步在多个服务器的过程。
复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。
- 复制还允许您从硬件故障和服务中断中恢复数据。
复制集的优势
- 保障数据的安全性
- 数据高可用性 (24*7)
- 灾难恢复
- 无需停机维护(如备份,重建索引,压缩)
- 分布式读取数据
MongoDB复制原理
mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。
mongodb各个节点常见的搭配方式为:一主一从、一主多从。
主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。
MongoDB复制结构图如下所示:
以上结构图中,客户端从主节点读取数据,在客户端写入数据到主节点时, 主节点与从节点进行数据交互保障数据的一致性。
复制集集特征:
- N 个节点的集群
- 任何节点可作为主节点
- 所有写入操作都在主节点上
- 自动故障转移
- 自动恢复
安装 MongoDB (tar安装) :
1.安装创建多实例 :
tar -zxvf mongodb-linux-x86_64-3.2.1.tgz -C /usr/local/cd /usr/local/mv mongodb-linux-x86_64-3.2.1/ mongodb #重命名mkdir -p /data/mongodb/mongodb{1,2,3,4} #创建数据目录mkdir -p /data/logstouch /data/logs/mongodb{1,2,3,4}.log #创建日志文件cd /data/logs/chmod 777 *.log #赋予权限cd /usr/local/mongodb/binvim mongodb1.confport=27017dbpath=/data/mongodb/mongodb1logpath=/data/logs/mongodb1.loglogappend=truefork=truemaxConns=5000storageEngine=mmapv1replSet=test #复制集名称------------------------------------------------------------------------------------#下面是yum安装时修改、添加的replication: #去注释 replSetName: test #添加复制集名称
ln -s /usr/local/mongodb/bin/mongod /usr/bin/ #把mongodb常用的命令添加到系统命令中ln -s /usr/local/mongodb/bin/mongo /usr/bin/
2.开启多实例、初始化配置复制集 :
[root@localhost bin]# mongo> cfg={"_id":"test","members":[{"_id":0,"host":"192.168.217.129:27017"},{"_id":1,"host":"192.168.217.129:27018"},{"_id":2,"host":"192.168.217.129:27019"}]}#配置复制集 ,注意复制集的名称要一致{ "_id" : "test", "members" : [ { "_id" : 0, "host" : "192.168.217.129:27017" }, { "_id" : 1, "host" : "192.168.217.129:27018" }, { "_id" : 2, "host" : "192.168.217.129:27019" } ]}> rs.initiate(cfg) #初始化配置时保证从节点没有数据{ "ok" : 1 }test:PRIMARY> rs.status() #查看复制集的完整状态{ "set" : "test", ....... { "_id" : 0, "name" : "192.168.217.129:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", #27017 端口作为主节点 "uptime" : 1234, "optime" : { "ts" : Timestamp(1531961046, 1), "t" : NumberLong(1) }, ...... }, { "_id" : 1, "name" : "192.168.217.129:27018", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", #从节点 "uptime" : 49, "optime" : { "ts" : Timestamp(1531961046, 1), "t" : NumberLong(1) }, ...... }, { "_id" : 2, "name" : "192.168.217.129:27019", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", #从节点 "uptime" : 49, "optime" : { "ts" : Timestamp(1531961046, 1), "t" : NumberLong(1) }, ....... } ], "ok" : 1}
3.添加和删除节点 :
test:PRIMARY> rs.add("192.168.217.129:27020") #添加节点{ "ok" : 1 }test:PRIMARY> rs.status() ........ "_id" : 3, "name" : "192.168.217.129:27020", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", ........test:PRIMARY> rs.remove("192.168.217.129:27020") #删除节点{ "ok" : 1 }test:PRIMARY> rs.status().........
4. 模拟故障,查看主节点是否自动切换 :
[root@localhost bin]# mongod -f mongodb1.conf --shutdown #关闭主节点端口killing process with pid: 3552[root@localhost bin]# mongo --port 27018 test:SECONDARY> rs.status(){ "set" : "test", ....... { "_id" : 0, "name" : "192.168.217.129:27017", "health" : 0, "state" : 8, "stateStr" : "(not reachable/healthy)", "uptime" : 0, "optime" : { ....... { "_id" : 1, "name" : "192.168.217.129:27018", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 1811, ....... { "_id" : 2, "name" : "192.168.217.129:27019", #自动切换主节点 "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 712, ...... } ], "ok" : 1}
5. 手动切换主节点 :
[root@localhost bin]# mongo --port 27019 test:PRIMARY> rs.freeze(30) #暂停30s不参与选举{ "ok" : 1 }test:PRIMARY> rs.stepDown(60,30) #交出主节点位置,维持从节点状态不少于60秒,等待30秒使主节点和从节点日志同步test:SECONDARY> rs.status()......
6. 允许从节点读取数据 :
test:SECONDARY> show dbs #2018-07-19T09:04:34.898+0800 E QUERY [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 } :_getErrorWithCode@src/mongo/shell/utils.js:23:13Mongo.prototype.getDBs@src/mongo/shell/mongo.js:53:1shellHelper.show@src/mongo/shell/utils.js:700:19shellHelper@src/mongo/shell/utils.js:594:15@(shellhelp2):1:1test:SECONDARY> rs.slaveOk() #允许默认从节点读取数据test:SECONDARY> show dbslocal 1.078GB
7. 更改 oplog 大小 :
test:PRIMARY> use localswitched to db localtest:PRIMARY> rs.printReplicationInfo() #查看日志文件能够使用的大小 默认oplog大小会占用64位实例5%的可用磁盘空间configured oplog size: 95.37109375MBlog length start to end: 1103secs (0.31hrs)oplog first event time: Thu Jul 19 2018 08:43:55 GMT+0800 (CST)oplog last event time: Thu Jul 19 2018 09:02:18 GMT+0800 (CST)now: Thu Jul 19 2018 09:20:08 GMT+0800 (CST)test:PRIMARY> db.runCommand({"convertToCapped":"oplog.rs","size":10000000000}) #修改 单位:B{ "ok" : 1 }test:PRIMARY> rs.printReplicationInfo()configured oplog size: 9536.746032714844MBlog length start to end: 1103secs (0.31hrs)oplog first event time: Thu Jul 19 2018 08:43:55 GMT+0800 (CST)oplog last event time: Thu Jul 19 2018 09:02:18 GMT+0800 (CST)now: Thu Jul 19 2018 09:20:24 GMT+0800 (CST)test:PRIMARY>
节点
数据
一致
名称
大小
实例
客户
客户端
故障
日志
保证
切换
服务
配置
安全
副本
可用性
命令
备份
多个
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器开机需要输入用户名
软件开发界面交互规范
bs数据库开发
日企软件开发的特点
软件开发简历自我描述
养老院管理系统怎么设计数据库
互联网大公司用的是什么服务器
红伞网络安全版本
软件开发英语要好
网络安全事故类型
二会期间校园网络安全
破坏生产经营罪 删数据库
信息办网络安全汇报
智慧卫监数据库
0.13.0服务器
简述传统的数据库连接步骤
肖战 重庆 网络安全
国内哪个服务器不需要实名
数据库设计报告例子
江苏网络安全王云飞
云服务器可以装app吗
主流数据库管理系统对比
北京mt4软件开发
软件开发的验收函
数据库有多个默认帐号该怎么办
服务器的光纤线指示灯不闪
数据库 复选框
按什么键可以刷新数据库显示
网络安全不是难事
简述传统的数据库连接步骤