副本集简介
所谓副本集,就是指一组服务器的集群,其中有一个主服务器,用于处理用户的请求;其余为备份服务器,用于保存主服务器的数据副本。如果主服务器崩溃了,会自动将一个备份服务器升级为新的主服务器(MongoDB内部处理),从而保证服务的进行。
MongoDB提供复制的功能,用来将数据保存到多台服务器上,在实际生产环境中,强烈建议集群并使用复制的功能,以实现故障转移和健壮服务。创建副本集
1:先创建几个存放数据的文件夹,比如在前面的dbs下面创建db1,db2,db3;(本地测试启动多个Mongo服务,生产环境在不同服务器上启动)同理在前面的logs下面创建logs1,logs2,logs3
2:在启动MongoDB服务器的时候,使用--replSet 副本集名称 选项,如:
./mongod --dbpath ../dbs/db1 --logpath ../logs/log1 --port 20001 --fork --replSet myrepl
(设置db的存储地方和日志存储的地方以及端口,fork为后台运行, replSet为副本集指令 myrepl为副本集名称)
3:然后再启动两个,端口分别为20002和20003,当然要修改相应的数据文件路径和日志路径,副本集名称跟上面一样4:连接到副本集1,进行副本集的初始化
rs.initiate({_id:"myrepl",members:[
{_id:0,host:'127.0.0.1:20001'},
{_id:1,host:'127.0.0.1:20002'},
{_id:2,host:'127.0.0.1:20003'}]
})
当rs指令执行完成之后,副本集已经配置成功
5:察看副本集状态
rs.status(); 或者 rs.config(); 或者 db.printReplicationInfo();
6:几点说明:
(1)客户端的读写请求,都是发送到主节点进行操作
(2)客户端不能在备份节点上进行写请求
(3)默认情况下,客户端不能从备份节点读取数据,可以通过显示的执行如下语句来允许读:db.getMongo().setSlaveOk();
至此就创建好了副本集,可以进行使用测试了。
rs辅助函数
rs是一个全局变量,其中包含了与复制相关的辅助函数,可以通过rs.help()查看。rs.status()说明:
rs.status函数对应的命令是replSetGetStatus,返回的信息中,主要的字段说明:
1:self:这个字段只会出现在运行rs.status函数的成员信息中
2:stateStr:服务器状态,状态选项在后面讲心跳的时候有
3:uptime:从成员可达一直到现在所经历的时间,单位是秒
4:optimeDate:每个成员的oplog中最后一个操作发生的时间。
注意:这里的状态是每个成员通过心跳报告上来的状态,所以optime跟实际时间可能会有几秒钟的偏差
5:lastHeartbeat:当前服务器最后一次收到其他成员心跳的时间,如果网络故障,或者是当前服务器比较繁忙,这个时间可能会是2秒钟之前
6:pingMs:心跳从当前服务器到达某个成员所花费的平均时间
7:errmsg:成员在心跳请求中返回的状态信息,通常是一些状态信息,而不是错误信息。
8:state:也表示服务器的状态,state是内部表示,而stateStr是适合阅读的表示
9:optime:和optimeDate也是一样的,只是optimeDate更适合阅读
10:syncingTo:表示当前成员正在从哪个成员处进行复制