在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
本文实例讲述了MongoDB 复制(副本集)。分享给大家供大家参考,具体如下: replication set复制集, 设置过程: (1)创建示例 假设创建三台,创建三个实例目录和日志目录: ./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设置一样,才能属于同一个复制集 然后使用ps aux | grep mongo可以查看到启动起来的三个端口。 (2)配置 使用客户端连接mongo进行配置: [test@localhost bin]$ ./mongo 要管理配置,所以切换到admin上: >use admin (配置是json格式) var rsconf = { _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 var rsconf = { _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>状态, [test@localhost bin]$ ./mongo --port=27018, 即切换到rs2:SECONDARY>状态。 测试: 在主服务上,创建库和集合, rs2:PRIMARY> use student switched to db student rs2:PRIMARY> db.user.insert({uid:1,name:'zhang san'}) WriteResult({ "nInserted" : 1 }) rs2:PRIMARY> db.user.find(); { "_id" : ObjectId("5bc9889f85a0986431fd2499"), "uid" : 1, "name" : "zhang san" } 去从服务上查看 show dbs 然后看到有错误,具体错误信息是: ... 是因为slave默认不允许读写: >rs.slaveOk(); 然后就可以看到主服务器创建的库和集合了。 同理27019也需要执行这个命令才能自动同步和读写。 当主服务器27017停掉的时候, shell脚本: #!/bin/bash IP=127.0.0.1 NA=rs2 sudo mkdir -p /home/m17 /home/m18 /home/m19 /home/mlog sudo chmod -R 777 /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 <<EOF use admin var rsconf = { _id:'rs2', members:[ {_id:0,host:'${IP}:27017'}, {_id:1,host:'${IP}:27018'}, {_id:2,host:'${IP}:27019'} ] } rs.initiate(rsconf) 希望本文所述对大家MongoDB数据库程序设计有所帮助。 |
请发表评论