共计 2729 个字符,预计需要花费 7 分钟才能阅读完成。
这篇文章主要介绍了 MongoDB 中副本集的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。
具体如下:
replication set 复制集,
复制集,多台服务器维护相同的数据副本,提高服务器的可用性。
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 可以节省空间,提高速度。
然后使用 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 状态,
退出 mongo 客户端命令模式,
切换到另一个端口:
[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
然后看到有错误,具体错误信息是:
…
errmsg : not master and slaveOk=false ,
…
是因为 slave 默认不允许读写:
rs.slaveOk();
然后就可以看到主服务器创建的库和集合了。
同理 27019 也需要执行这个命令才能自动同步和读写。
当主服务器 27017 停掉的时候,
第二个 27018 就自动变成主服务器 master 状态。
但是 27019 需要再次执行 rs.slaveOk()才能自动同步读写。
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)
感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“MongoDB 中副本集的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!