MongoDB学习07–运维技术

6月 16th, 2012
运维技术

  1. 常见的运维技术:
    1. 安装部署;
    2. 状态监控;
    3. 安装认证;
    4. 备份与恢复;
  2. 安装部署:
    1. mongod进程总是停留在命令行窗口下,很容易误操作给结束掉;而且日志信息总是在命令行下打印,不便于之后的查看,可以把mongod作为后台进程运行,并把日志输出到文件中;
    2. Linux中:mongod –dbpath=/mongo/data –logpath=/mongo/logs/mongod.log –logappend –port=27017 –fork;                         
    3. Windows中:mongod –dbpath=D:\mongo\data –logpath=D:\mongo\logs\mongod.log –logappend –port=27017 –install;之后就可以通过[net start/stop MongoDB]命令来开启和关闭mongodb数据库了;
    4. Linux下开机启动,可以编辑/etc/rc.d/rc.local文件,把mongod启动的脚本添加进去即可;
    5. Linux下关闭mongod服务器:
      1. 如果没有使用–fork命令,则直接退出终端即可,mongodb会自动清理;
      2. 如果使用了–fork命令,在admin数据库下执行:db.shutdownServer();
      3. 如果在Master-Slave集群中,如果备机和主机时间相差超过10s的话不会关闭mongod,可以通过配置timeoutSecs来完成mongod的数据更新,时间差在10s以内的话就可以关闭了:db.shutdownServer({force : true, timeoutsec : 5});
  3. 监控状态:
    1. http监控器,通过页面打开,网页使用端口是mongod服务端口加1000:http://mongod-host:port;
    2. 打开客户端调用db.serverStatus()获得服务器的状态,包括服务器基本信息,锁,索引,内存,连接,游标,网络和用户操作行为等信息;
    3. 使用客户端工具mongostat来实时查看统计信息(具体的字段含义可以通过mongostat -h查看),每秒刷新一次:mongostat –port=27017 –all;                           
  4. 安全认证:
    1. mongodb身份验证的机制:
      1. 当启动mongod服务的时候不加–auth参数,默认是没有权限验证的,可以直接登陆数据库做任何操作而且可以远程访问数据库,相当于都是超级用户的权限;
      2. 当启动mongod服务的时候添加–auth参数,如果没有在admin数据库中添加过用户(即admin.system.users不存在或者为空),那么还是可以做任何操作,直到在admin.system.users中添加了一个用户(如果没有在admin.system.users中添加用户,而在其它数据库下添加了用户,它们依然是超级用户的权限,因为只有admin.system.users中有用户后mongod的认证授权服务才生效);
      3. admin.system.users中保存的用户都是超级用户,可以对其它的数据库进行操作,而其它数据库中的用户只能对自己数据库中的集合(不论是哪个用户创建的集合)进行操作;
      4. mongodb中,数据库是由超级用户来创建的,一个数据库可以包含多个用户,但是一个用户只能在一个数据库中操作,不同的数据库中的用户可以同名;
    2. 创建用户的语法:db.addUser(username, password[, readOnly=false]);
      1. username:用户名;
      2. password:访问的密码;
      3. readOnly:默认是false,即有读写的权限,如果设置为true的话,则只有读的权限;
    3. 创建超级用户:mongo –port=27017 admin;db.addUser(“root”, “mongo”);                                           
    4. 验证用户:
      1. 可以在登陆时指定用户名密码:mongo 127.0.0.1:27017/admin -uroot -pmongo;                                
      2. 登陆之后使用db.auth()函数验证用户:db.auth(“root”, “mongo”),返回1表示成功,返回0表示失败;                      
    5. 查看用户:db.getCollection(‘system.users’).find();                               
    6. 删除用户:db.removeUser(“root”),也可以使用db.system.users.remove()操作,如果删除所有admin.system.users中的用户,则就没有安全验证了;                                    
    7. 其它数据库中创建用户的做法相同;
  5. 备份与恢复:
    1. 冷备份:在关闭服务器的情况下直接拷贝mongodb的数据目录,不推荐;
    2. mongodump和mongorestore:mongodb提供的内置工具,提供了热备功能,备份的父目录为/mongo/backup;
      1. mongodump:mongodump -h 127.0.0.1 –port 27017 -d test -o /mongo/backup;                      
      2. mongorestore:mongorestore -h 127.0.0.1 –port 27017 -d test -drop /mongo/backup/test;(–drop选项是指定导入数据之前先删除原来的数据)                             
      3. 在导出的时候可能数据的实时性不能保证,因为导出的时候可能数据还在内存中,可以使用mongodb提供的fsync+lock机制把缓冲区数据暴力刷入硬盘,然后给数据库一个写入锁,所有的写入都会被阻塞,直到fsync+lock释放锁为止;
        1. 加锁:db.runCommand({“fsync”:1, “lock”:1});
        2. 释放锁:db.$cmd.unlock.findOne();
    3. Master-Slave架构;
标签:
目前还没有任何评论.