|
在MongoDB中,所有写操作都会产生 oplog,oplog 是每修改一条数据都会生成一条,如果你采用一个批量update命令更新了 N 多条数据,那么oplog 会有很多条,而不是一条。所以同步延迟就是写操作在主节点上执行完后,从节点还没有把 oplog 拿过来再执行一次。而这个写操作的量越大,主节点与从节点的差别也就越大,同步延迟也就越大了。
分片
当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。
分片集群结构分布:
三个主要组件:
- Shard:数据存储位置,以chunk为单位存数据,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担,防止主机单点故障;
- Config Server:mongod实例,存储了整个ClusterMetadata,其中包括 chunk信息,默认需要配置3个Config Server节点;
- Query Routers:(Mongos) 前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。
Mongos本身并不持久化数据,Sharded Cluster所有的元数据都会存储到Config Server,而用户的数据会议分散存储到各个shard。Mongos启动后,会从配置服务器加载元数据,开始提供服务,将用户的请求正确路由到对应的碎片。
Mongos的路由功能:
- 当数据写入时,MongoDB Cluster根据分片键设计写入数据。
- 当外部语句发起数据查询时,MongoDB根据数据分布自动路由至指定节点返回数据。
分片部署
条件有限,我们还是在单机上,用不同MongoDB线程来部署分片。
分片服务器
Shard Server和普通Mongod程序一样,不同的是需要在配置文件中添加shardsvr=true标记为Shard Server,配置参考如下:
- # 指定数据库路径
- dbpath=/usr/local/mongodb/share/1/data/db
- # 使用追加的方式写日志
- logpath=/usr/local/mongodb/share/1/log/mongodb.log
- # 使用追加的方式写日志
- logappend = true
- # 绑定服务IP
- bind_ip=127.0.0.1
- # 服务器端口
- port = 27020
- # 以守护进程的方式运行MongoDB,创建服务器进程
- fork = true
- # PID File 的完整路径
- pidfilepath=/usr/local/mongodb/var/mongod27020.pid
- # 不启用验证
- noauth=true
- # 最大同时连接数,默认2000
- maxConns=2000
- # 同步复制的日志大小设置,单位MB
- oplogSize=10
- # 设置为shared server
- shardsvr=true
(编辑:哈尔滨站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|