一.什么是MongoDB副本集?
副本集是一组mongod维护相同数据集的实例,它提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性;还允许您从硬件故障和服务中断中恢复数据;实现自动故障转移,还可以采用分布式方式读取数据。
二.MongoDB副本集的原理?
mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。mongodb各个节点常见的搭配方式为:一主一从、一主多从。
主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。
通过在不同数据库服务器上提供多个数据副本,复制可提供一定级别的容错功能,以防止丢失单个数据库服务器。
三.MongoDB副本集同步?
克隆除本地数据库之外的所有数据库。要克隆mongod扫描每个源数据库中的每个集合,并将所有数据插入到这些集合的自己的副本中。版本3.4中已更改:初始同步会在为每个集合复制文档时构建所有集合索引。在早期版本的MongoDB中,仅
_id
在此阶段构建索引。初始同步在数据复制期间提取新添加的oplog记录。确保目标成员在local
数据库中有足够的磁盘空间,以便在此数据复制阶段的持续时间内临时存储这些oplog记录。-
将所有更改应用于数据集。使用源中的oplog,mongod更新其数据集以反映副本集的当前状态。
四.部署MongoDB副本集的注意事项
- 如果可能,请使用逻辑DNS主机名而不是IP地址,尤其是在配置副本集成员或分片集群成员时。逻辑DNS主机名的使用避免了由于IP地址更改而导致的配置更改。
- IP绑定 3.6版本之后才默认绑定地址为localhost,所以最好还是配置--bind-ip参数,如若绑定的非本地计算机,请确保已保护您的群集免受未经授权的访问,最好考虑启用身份验证和 强化网络基础架构
- 确保网络流量可以在集合的所有成员和网络中的所有客户端之间安全地传递
1.建立虚拟专用网络。确保您的网络拓扑通过局域网路由单个站点内的成员之间的所有流量。
2.配置访问控制以防止从未知客户端到副本集的连接。
3.配置网络和防火墙规则,以便仅在默认的MongoDB端口上允许传入和传出的数据包,并且仅在部署中允
- 最好部署具有已启用访问控制的副本集
- 备份数据库在备份时会出现一定的延迟
- 启动MongoDB 需以副本集模式启动
- 备份数据库必须设置votes 值为1才拥有选举成为Primary服务器的可能
五.MongoDB副本集的需要哪些资源配置?
一台安装好MongoDB 的服务器 192.168.1.1
或者
三台安装好MongoDB 的服务器 192.168.1.1 192.168.1.2 192.168.1.3
网络处于可使用状态
六.部署MongoDB副本集
1. 设置配置文件
通过 --replSet 和 --bind_ip 命令行选项指定副本集名称和ip绑定
语法:mongod --replSet "rs0" -- bind_ip localhost,<hostname ( s )| ip address ( es ) >
或者使用配置文件指定 replica set name 和 ip addresses
systemLog
path: /var/log/mongodb/mongodb.log
storage
dbPath: /var/lib/mongo-res1
journal:
enabled: true
replication:
replSetName : rs0
net :
bindIp : localhost,<hostname(s)| ip address(es)>
配置参数含义:
replSet:设置Replica Set的name,在各个配置文件中,其值必须相同。
dbpath:MongoDB用于存储数据的目录,默认值是C:\data\db
bind_ip 指定ip
path:用于记录mongod的日志数据
port:指定MongoDB监听的端口,默认值是27017
然后要使用配置文件启动MongoDB实例 ,使用 --config 选项指定配置文件的路径。
mongod --config <path-to-config>
三个实例启动完毕后,查看 ps -ef|grep mongo
2.使用 mongoDB shell 连接到其中一个 mongod 实例
mongo --host 192.168.1.1 --port 27017
3.启动副本集
使用 rs.initiate() 来指定副本集的所有成员
rs.initiate({
_id : "rs0",
members :[
{ _id : 0 , host: "192.168.1.1:27017"},
{ _id : 1 , host: "192.168.1.1:27019"},
{ _id : 2 , host: "192.168.1.1:27019"}
]
})
4.查看副本集配置
rs.conf()
5.查看副本集主副本信息
rs.status()
七.应用MongoDB副本集
尝试关闭主节点
db.shutdownServer();
或者使用kill 端口的方式
然后再查看剩下的两个副节点是否有一个成为新的节点
stateStr : "PRIMARY" 就是主节点