当前位置:网站首页 / 数据库 / 正文

[AY-Mongo 3.x]写给自己的MongoDB笔记-深入浅出-运维实践[13]

时间:2015年11月12日 | 作者 : aaronyang | 分类 : 数据库 | 浏览: 2641次 | 评论 0

1.  安装部署

卸载服务

D:\mongodb-win32-x86_64-3.0.6\bin\mongod.exe --remove --serviceName "MongoDB"

 以服务的方式安装

D:\mongodb-win32-x86_64-3.0.6\bin\mongod --dbpath=D:\mongodb-win32-x86_64-3.0.6\data\db --logpath=D:\mongodb-win32-x86_64-3.0.6\log.txt --port 2222 --install --serviceName "MongoDB"

blob.png

blob.png

查看帮助

blob.png

当然mongo --help也行

2015年11月12日    ==== AYUI www.ayjs.net AY 杨洋原创编写,请不要转载谢谢=====

net start mongoDb启动服务

blob.png



2.  状态监控

监控可以让我们实时的了解数据库的健康状况以及性能调优,在mongodb里面给我们提供了三种方式


1:http监视器

     这个我在先前的文章中也提到了,这里就不赘述了

2:serverStatus()

    这个函数可以获取到mongodb的服务器统计信息,其中包括 :全局锁,索引,用户操作行为等等这些统计信息,对管理员来说非常重要

Field

Example Value

Explanation

Host

te.rzw.com:27018

运行实例所监听的IP与端口

version

1.8.3

当前实例所使用的版本

Process

mongod

当前实例是mongod,还是mongos

Uptime

231905

实例连续正常运行时间,单位秒

uptimeEstimate

223083

基于mongodb内部粗粒定时器的连续正常运行时间

localTime

ISODate("2011-10-13T01:47:38.773Z")

本机时间,以UTC时间为计算标准。

globalLock.totalTime

231905155987

自实例启动全局锁创建以来到现在多长时间,单位微秒.

globalLock.lockTime

9053050

自全局锁创建以来锁定总时间,单位微秒

globalLock.ratio

0.0000390377262

锁定的时间所占的比例(lockTime/ totalTime)

globalLock.currentQueue.total

0

当前等待全局锁的数量

globalLock.currentQueue.readers

0

当前等待读锁的数量

globalLock.currentQueue.writers

0

当前等待写锁的数量

globalLock.activeClients.total

1

连接到当前实例处于活动状态的客户端数量。

globalLock.activeClients.readers

1

处于活动状态的客户端中有多少是在执行read操作

globalLock.activeClients.writers

0

处于活动状态的客户端中有多少是在执行write操作

Mem.resident

6

到现在总共使用的物理内存,单位是MB

Mem.virtual

17307

当前Mongodb实例使用的虚拟内存大小,单位MB,一般情况下比mem.map的值要超大一点,如果大很多很有可能发生内存泄露,如果使用journal,大约是2倍的map

Mem.maped

8556

Mongodb使所有数据都映射到内存中,所以这个值可以看似整个数据量的值。

Mem.bits

64

机器位数,32位或64

Mem.supported

true

本机是否支持内存扩展

Connections.current

2

当前连接到本机处于活动状态的连接数

Connections.available

19998

剩余多少可供连接

extra_info.heap_usage_bytes

            521152

当前实例堆大小,单位bytes

extra_info.page_faults

569

加载磁盘内容时发生页错误的次数

indexCounters.Btree.accesses

1

访问索引次数

indexCounters.Btree.hits

1

访问索引时,索引在内存中被命中的次数

indexCounters.Btree.misses

0

访问索引时,索引不是在内存中被命中的次数

indexCounters.Btree.resets

0

索引计数器被重置的次数

indexCounters.Btree.missRatio

0

索引非命中率

backgroundFlushing.flushes

3864

实例刷新数据到磁盘的数次

backgroundFlushing.total_ms

15473

刷新到磁盘总共花费的时间,单位毫秒

backgroundFlushing.average_ms

4.004399585921325

平均每次刷新执行时间

backgroundFlushing.last_ms

3

最后一次刷新执行时间

backgroundFlushing.last_finished

ISODate("2011-10-13T01:46:51.184Z")

最后一次刷新完成的时间点

Cursors.totalOpen

1

当前游标数量

Cursors.timeOut

2

从实例启动到现在游标超时的总数量

Network.bytesIn

4680778

发送到实例的字节大小

Network.bytesOut

4759827

发送出去的字节大小

Repl.setName

myset

replSet结构定义的名称

Repl.isMaster

True

当前实例是否是replSet结构中的Master节点

Repl.secondary

False

当前实例是否是replSet结构中的secondary节点

Repl.hosts

[ “te.rzw.com:27018”,”te.rzw.com:27019”]

replSet结构中每个节点情况

Opcounters.insert

4

自实例启动以来,执行insert次数

Opcounters.query

181

自实例启动以来,执行query次数

Opcounters.update

92084

自实例启动以来,执行update次数

Opcounters.delete

0

自实例启动以来,执行delete次数

Opcounters.getmore

92816

自实例启动以来,在游标执行getMore次数

Opcounters.command

316

自实例启动以来,执行其他操作的次数

Asserts.regular

0

自实例启动以来,断言正常的次数

Asserts.warn

0

自实例启动以来,断言警告的次数

Asserts.msg

0

自实例启动以来,断言内部错误的次数

Asserts.user

134

自实例启动以来,因用户使用造成的错误而被断言次数

Asserts.rollovers

0

断言被翻转的次数

writeBacksQueued

False

mongos中,操作被重做的次数

Dur.commits

        1

在最近间隔,向journal文件提交的次数

Dur.journaledMB

0.008192

在最近间隔,journalr文件写入数据量,单位MB

Dur.writeToDataFilesMB

0

在最近间隔,journal文件向数据文件写入的数据量,单位MB

Dur.commitsInWriteLock

0

在最近间隔中,处于写锁状态下向journal提交的次数.这种提交方式是不被推荐的

Dur.earlyCommits

0

在预定时间之前请求提交的次数

Dur.timeMs.dt

3045

Journal状态收集的频率,单位毫秒

Dur.timeMs.prepLogBuffer

0

journal写数据前的准备所花费时间单位毫秒

Dur.timeMs.writeToJournal

2

journal写数据所花费时间,单位毫秒

Dur.timeMs.writeToDataFiles

0

在写入journal文件后向数据文件写数据花费时间,单位毫秒

Dur.timeMs.remapPrivateView

0

重新在内存中映射数据花费的时间

Ok

1

serverStatus操作是否被成功执行


blob.png

很长的

3. mongostat

  前面那些统计信息再牛X,那也是静态统计,不能让我观看实时数据变化,还好,mongodb里面提供了这里要说的mongodstat监视器,这玩意会每秒刷新

D:\mongodb-win32-x86_64-3.0.6\bin\mongostat --port 2222

blob.png


2015年11月12日    ==== AYUI www.ayjs.net AY 杨洋原创编写,请不要转载谢谢=====

3.  安全认证

作为数据库软件,我们肯定不想谁都可以访问,为了确保数据的安全,mongodb也会像其他的数据库软件一样可以采用用户验证的方法,那么该怎么做呢?其实很简单,mongodb提供了addUser方法,还有一个注意点就是如果在admin数据库中添加将会被视为“超级管理员”

2.x的写法

db.addUser("ay","123456")

3.x的写法

db.createUser( { user: "ay", pwd: "123456", roles: [ "readWrite", "dbAdmin" ] } )

不设置角色,具体的 参考这个文章

blob.png

下面的操作是,在admin数据库中创建一个appAdmin的用户,然后赋予用户 对config数据库的读写权限,也就是允许他修改当前分片节点的设置,比如balancer设置

use admin
db.createUser(
   {
     user: "appAdmin",
     pwd: "password",
     roles:
       [
         { role: "readWrite", db: "config" },
         "clusterAdmin"
       ]
   }
)


稍微看下3.x的createUser

blob.png

user和pwd不解释,customData是,额外信息,类似备注,比如存这个用户的员工号。roles是一个角色数组,可以有多个角色

use products
db.createUser( { "user" : "accountAdmin01",
                 "pwd": "cleartext password",
                 "customData" : { employeeId: 12345 },
                 "roles" : [ { role: "clusterAdmin", db: "admin" },
                             { role: "readAnyDatabase", db: "admin" },
                             "readWrite"
                             ] },
               { w: "majority" , wtimeout: 5000 } )

在admin数据库上是 clusterAdmin和readAnyDatabase角色,在products是readWrite权限
具体权限列表:https://docs.mongodb.org/manual/reference/built-in-roles/


4.  备份和恢复

1: 直接copy

       这个算是最简单的了,不过要注意一点,在服务器运行的情况下直接copy是很有风险的,可能copy出来时,数据已经遭到破坏,唯一能保证的就是要暂时关闭下服务器,copy完后重开

2:mongodump和mongorestore

      这个是mongo给我们提供的内置工具,很好用,能保证在不关闭服务器的情况下copy数据。为了操作方便,我们先删除授权用户

下面是2.x删除用户

blob.png

D盘建立一个backup文件夹用于存放test数据库

D:\mongodb-win32-x86_64-3.0.6\bin\mongodump --port 2222 -d test -o d:\\backup

blob.png

blob.png

快看,数据已经备份过来了,太爽了,现在我们用mongorestore恢复过去,记住啊,它是不用关闭机器的。

D:\mongodb-win32-x86_64-3.0.6\bin\mongorestore --port 2222 -d test -drop d:\\backup\test

blob.png


3:主从复制

       这个我在上上篇有所介绍,这里也不赘述了。

    其实上面的1,2两点都不能保证获取数据的实时性,因为我们在备份的时候可能还有数据灌在内存中不出来,那么我们

想说能不能把数据暴力的刷到硬盘上,当然是可以的,mongodb给我们提供了fsync+lock机制就能满足我们提的需求。

fsync+lock首先会把缓冲区数据暴力刷入硬盘,然后给数据库一个写入锁,其他实例的写入操作全部被阻塞,直到fsync

+lock释放锁为止。

这里就不测试了。

 加锁:    db.runCommand({"fsync":1,"lock":1})

 释放锁: db.$cmd.unlock.findOne()






2015年11月12日    ==== AYUI       www.ayjs.net      AY         杨洋原创编写,请不要转载谢谢=====

文章参考:http://www.cnblogs.com/huangxincheng/archive/2012/03/08/2384571.html
















推荐您阅读更多有关于“mongodb,”的文章

猜你喜欢

额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

  查看权限

抖音号:wpfui,可以看到我的很多作品效果

AYUI8社区版Github地址:前往获取

作者:杨洋(AaronYang简称AY,安徽六安人)目前是个人,还没公司AY唯一QQ:875556003和AY交流

高中学历,2015年1月17日开始,兴趣学习研究WPF

声明:AYUI7个人与商用免费,源码可购买。部分DEMO不免费.AY主要靠卖技术服务挣钱

不是从我处购买的ayui7源码,我不提供任何技术服务,如果你举报从哪里买的,我可以帮你转正为我的客户,并送demo

查看捐赠

AYUI7.X MVC教程 更新如下:

第一课 第二课 程序加密教程

兼容XP到win10,vs2015/2019,最新AYUI:7.6.5.2

vs2015 企业版密钥HM6NR-QXX7C-DFW2Y-8B82K-WTYJV

vs2017 企业版密钥NJVYC-BMHX2-G77MM-4XJMR-6Q8QF

标签列表