本文共 4056 字,大约阅读时间需要 13 分钟。
配置:
常用配置如下:配置示例
|
客户端的读写策略:
用户端访问分片的 mongos 跟访问单个 mongod 类似,所有 mongos 是对等关系,用户访问分片集群可通过任意一个或多个mongos。 mongos 本身是无状态的,可任意扩展,集群的服务能力为『Shard服务能力之和』与『mongos服务能力之和』的最小值。 访问分片集群时,最好将应用负载均匀的分散到多个 mongos 上。所有官方的driver都支持以 Connection String 的方式来连接 MongoDB 副本集或分片集群。
Connection String的格式: mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]readPreference=secondaryPreferred
即可实现读请求优先到Secondary节点,从而实现读写分离的功能。readPreference值说明:
primary | 默认值,所有请求都从primary读取 |
primaryPreferred | 所有请求都从primary读取,当primary不可用时, 从secondary读取 |
secondary | 所有请求都从secondary读取 |
secondaryPreferred | 所有请求都从secondary读取,当secondary不可用时, 从primary读取 |
nearest | 所有请求都从最近(通信延迟最低)的成员读取,而不管其类型为primary或secondary |
w | 指定本次操作需要写入到集群的多少台机器后才算写入成功,默认值:1 当w>1时,本次写入需要给定值数量的机器都返回成功后本次写入才算成功 w=majority时,写到大多数机器才算成功(性能会有所影响),这个值根据副本集内有投票权的机器数量决定(数量足够完成一次选举),适合对可靠性要求非常高的场景 |
j | 标识是否需要将本次写入同步到日记文件后才算成功 |
wtimeout | 本次写入的超时时间 |
在JAVA客户端驱动内,可以这样指定写策略: MongoClient.setWriteConcern(WriteConcern.xxxx);
备份
文件快照 | 文件快照是最简单的备份方法,不过需要文件系统本身支持快照技术,以及配置中打开了日记功能(journal) 参见: |
复制data目录 | 在没有文件快照支持的情况下,可以使用这种试,注意复制时,需要禁止数据库的写入 可以使用如下命令:db.fsyncLock()/db.fsyncUnlock()对数据库进行锁定和解锁 恢复时,只需要把原目录删除或移走,然后将备份的文件放到数据目录既可。 |
mongodump | 官方提供的一种备份工具,速度较慢,但可以单独备份指定的库或集合。 |
目前我们的备份脚本如下:
|
性能监控
a.打开数据库profiling:db.
setProfilingLevel
(level, slowms) level | integer | 0关闭profiling,1仅输出慢操作,2输出所有操作(影响性能) |
slowms | integer | 大于等于此值,则会被判定为慢操作 |
b.耗时操作的处理:
查看当前操作:db.
currentOp
(),可以传ture或者一个查询对象做为参数 当传ture时:只统计未关闭连接的操作和系统操作 当传对象时:和普通查询一样,返回匹配的操作结果 返回值: 重点关注以下几个参数: opid | 操作ID |
secs_running | 已运行时间 |
op | 操作类型,可能的值有: "none" "update" "insert" "query" "getmore" "remove" "killcursors" |
ns | 对应的集合命名空间,如:datacenter_release.order |
query | 操作所使用的查询条件 |
planSummary | 查询的执行计划(此处可以看到是否有用到索引和所用的索引名称) |
找到慢操作后,可以使用:db.killOp(opid)关闭慢操作
转载地址:http://hiuws.baihongyu.com/