复制是跨多个服务器同步数据的过程.复制可在不同数据库服务器上使用多个数据副本提供冗余并提高数据可用性.复制可以保护数据库免于丢失单个服务器.复制还允许您从硬件故障和服务中断中恢复.使用其他数据副本,您可以将其专用于灾难恢复,报告或备份.
为什么要复制?
确保数据安全
数据可用性高(24 * 7)
灾难恢复
没有维护停机时间(如备份,索引重建,压缩)
读取比例(要读取的额外副本)
副本集对应用程序是透明的
MongoDB中复制的工作方式
MongoDB通过使用副本实现复制组.副本集是一组承载相同数据集的 mongod 实例.在副本中,一个节点是接收所有写入操作的主节点.所有其他实例(例如辅助节点)从主节点应用操作,以便它们具有相同的数据集.副本集只能有一个主节点.
副本集是一组包含两个或更多节点(通常最少3个节点)需要).
在副本集中,一个节点是主节点,其余节点是辅助节点.
所有数据都从主节点复制到辅助节点.
在自动故障转移或维护时,选择为主节点和新主节点建立节点被选举.
恢复故障节点后,它再次加入副本集并作为辅助节点.
显示了一个典型的MongoDB复制图,其中客户端应用程序始终与主节点交互,然后主节点将数据复制到辅助节点.
副本集功能
N个节点的集群
任何一个节点都可以是主要的
所有写入操作都转到主要
自动故障转移
自动恢复
主要的共识选举
设置副本集
在本教程中,我们将独立的MongoDB实例转换为副本集.要转换为副本集,请执行以下步骤 :
关闭已经运行的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实例.
现在启动命令提示符并连接到此mongod实例.
在Mongo客户端中,发出命令 rs.initiate()以启动新的副本集.
要检查副本集配置,请发出命令 rs.conf().要检查副本集的状态,请发出命令 rs.status().
将成员添加到副本设置
要将成员添加到副本集,请在多台计算机上启动mongod实例.现在启动mongo客户端并发出命令 rs.add().
语法
>rs.add(HOST_NAME:PORT)
示例
假设您的mongod实例名称是 mongod1.net 并且它在端口上运行 27017 的.要将此实例添加到副本集,请在Mongo客户端中发出命令 rs.add().
>rs.add("mongod1.net:27017")>
只有连接到主节点时,才能将mongod实例添加到副本集.要检查您是否已连接到主服务器,请在mongo客户端中发出命令 db.isMaster().