MongoDB 复制(副本集)学习笔记
本文实例讲述了MongoDB复制(副本集)。分享给大家供大家参考,具体如下:
replicationset复制集,
复制集,多台服务器维护相同的数据副本,提高服务器的可用性。
MongoDB复制是将数据同步在多个服务器的过程。
复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性。
复制还允许您从硬件故障和服务中断中恢复数据。
设置过程:
(1)创建示例
假设创建三台,创建三个实例目录和日志目录:
mkdir/home/m17/home/m18/home/m19/home/mlog
启动三个示例,端口分别为27017、27018、27019。
./mongod--dbpath=/home/m17--logpath=/home/mlog/m17.log--fork--port=27017--replSet=rs2--smallfiles ./mongod--dbpath=/home/m18--logpath=/home/mlog/m18.log--fork--port=27018--replSet=rs2--smallfiles ./mongod--dbpath=/home/m19--logpath=/home/mlog/m19.log--fork--port=27019--replSet=rs2--smallfiles
说明:
参数--replSet设置一样,才能属于同一个复制集
参数--smallfiles可以节省空间,提高速度。
然后使用psaux|grepmongo可以查看到启动起来的三个端口。
(2)配置
使用客户端连接mongo进行配置:
[test@localhostbin]$./mongo
要管理配置,所以切换到admin上:
>useadmin
(配置是json格式)
varrsconf={ _id:'rs2', members:[ {"_id":0,host:'192.168.8.172:27017'}, {_id:1,host:'192.168.8.172:27018'}, {_id:2,host:'192.168.8.172:27019'} ] }
如果没有配置ip,使用127.0.0.1
varrsconf={ _id:'rs2', 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'} ] }
执行后,使用printjson(rsconf)查看刚才的配置。
然后执行初始化:
>rs.initiate(rsconf); >rs.initiate(rsconf); { "ok":1, "operationTime":Timestamp(1539933041,1), "$clusterTime":{ "clusterTime":Timestamp(1539933041,1), "signature":{ "hash":BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId":NumberLong(0) } } } rs2:SECONDARY>
查看节点:
rs.status()
删除节点:
rs.remove('127.0.0.1:27019')
添加节点:
rs.add('127.0.0.1:27019')
切换节点:
默认是在27017端口,即rs2:PRIMARY>状态,
退出mongo客户端命令模式,
切换到另一个端口:
[test@localhostbin]$./mongo--port=27018,
即切换到rs2:SECONDARY>状态。
测试:
在主服务上,创建库和集合,
rs2:PRIMARY>usestudent switchedtodbstudent rs2:PRIMARY>db.user.insert({uid:1,name:'zhangsan'}) WriteResult({"nInserted":1}) rs2:PRIMARY>db.user.find(); {"_id":ObjectId("5bc9889f85a0986431fd2499"),"uid":1,"name":"zhangsan"}
去从服务上查看
showdbs
然后看到有错误,具体错误信息是:
...
"errmsg":"notmasterandslaveOk=false",
...
是因为slave默认不允许读写:
>rs.slaveOk();
然后就可以看到主服务器创建的库和集合了。
同理27019也需要执行这个命令才能自动同步和读写。
当主服务器27017停掉的时候,
第二个27018就自动变成主服务器master状态。
但是27019需要再次执行rs.slaveOk()才能自动同步读写。
shell脚本:
#!/bin/bash IP=127.0.0.1 NA=rs2 sudomkdir-p/home/m17/home/m18/home/m19/home/mlog sudochmod-R777/home/m17/home/m18/home/m19/home/mlog ./mongod--dbpath=/home/m17--logpath=/home/mlog/m17.log--fork--port=27017--replSet=${NA}--smallfiles ./mongod--dbpath=/home/m18--logpath=/home/mlog/m18.log--fork--port=27018--replSet=${NA}--smallfiles ./mongod--dbpath=/home/m19--logpath=/home/mlog/m19.log--fork--port=27019--replSet=${NA}--smallfiles ./mongo<希望本文所述对大家MongoDB数据库程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。