复制是跨多个服务器同步数据的过程。复制提供冗余,并通过不同数据库服务器上的多个数据副本增加数据可用性。 复制保护数据库免受单个服务器的丢失。 复制还允许从硬件故障和服务中断中恢复。 使用其他数据副本,可以将其专用于灾难恢复,报告或备份。
mongodb通过使用副本集来实现复制。副本集是托管相同数据集的一组 mongod 实例。 在一个副本中,一个节点是接收所有写操作的主节点。所有其他实例(例如辅助节点)都应用主节点的操作,以便它们具有相同的数据集。 副本集可以只有一个主节点。
3
个节点)。显示了mongodb复制的典型图,客户端应用程序始终与主节点进行交互,然后主节点将数据复制到辅助节点。
n
个节点的集群在本教程中,我们将独立的 mongodb 实例转换为副本集。要转换为副本集,以下是步骤 -
replset
选项启动 mongodb服 务器。 以下是--replset
的基本语法 -mongod --port "port" --dbpath "your_db_data_path" --replset "replica_set_instance_name"
示例
mongod --port 27017 --dbpath "d:\set up\mongodb\data" --replset rs0
27017
上启动名称为rs0
的 mongod 实例。rs.initiate()
以启动新的副本集。rs.conf()
。 要检查复制集的状态,请使用命令rs.status()
。要将成员添加到副本集,请在多台计算机上启动 mongod 实例。 现在启动一个 mongo 客户端并发出一个命令rs.add()
。
语法
rs.add()
命令的基本语法如下:
>rs.add(host_name:port)
示例
假设您的 mongod 实例名称是 mongod1.net
,它在端口 27017
上运行。要将此实例添加到副本集,请在 mongo 客户端中发出命令 rs.add()
。
>rs.add("mongod1.net:27017")
>
只能在连接到主节点时,将 mongod 实例添加到副本集。要检查是否连接到主服务器,请在 mongo 客户端中发出命令db.ismaster()
。
rs0:primary> db.ismaster()
{
"hosts" : [
"ubuntu:27017"
],
"setname" : "rs0",
"setversion" : 1,
"ismaster" : true,
"secondary" : false,
"primary" : "ubuntu:27017",
"me" : "ubuntu:27017",
"electionid" : objectid("7fffffff0000000000000001"),
"lastwrite" : {
"optime" : {
"ts" : timestamp(1498896581, 1),
"t" : numberlong(1)
},
"lastwritedate" : isodate("2017-07-01t08:09:41z")
},
"maxbsonobjectsize" : 16777216,
"maxmessagesizebytes" : 48000000,
"maxwritebatchsize" : 1000,
"localtime" : isodate("2017-07-01t08:09:50.365z"),
"maxwireversion" : 5,
"minwireversion" : 0,
"readonly" : false,
"ok" : 1
}
rs0:primary>