数据库

 首页 > 数据库 > MongoDB > mongodb安装和维护

mongodb安装和维护

分享到:
【字体:
导读:
         摘要:基础知识:介绍JSONJSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式mongoshellmongoisafullJavaScriptshell,soanyJavaScriptfunction,syntax,orclasscanbeusedintheshell.本文不介绍自动分片的...

mongodb安装和维护
基础知识:
介绍 JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式 mongo shell mongo is a full JavaScript shell, so any JavaScript function, syntax, or class can be used in the shell. 本文不介绍自动分片的机制和部署.
mongos ,这个程序相当于一个数据库的路由器,可以实现自动分片(auto-sharding) .
replication set的部署安装
Replica Sets 使用 n 个 Mongod 节点,构建具备自动容错转移(auto-failover)、自动恢复(auto-recovery) 的高可用方案
生产环境都必须是replication set模式,因为主从不能保障服务高可用.
至少保证有3个节点(或者2个节点+1个 arbiter. , 一般为2~7个node) 1.安装
wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.3.tgz
mkdir $HOME/app
cd app
tar zxvf ../mongodb-linux-x86_64-1.6.5.tgz
ln -s mongodb-linux-x86_64-1.6.5 mongodb
cd
vi .bash_profile ,添加到Path路径.PATH=$HOME/app/mongodb/bin:$PATH:$HOME/bin
2. 配置
source  .bash_profile
创建数据目录,日志目录和配置文件目录,编辑参数文件
cd
mkdir data
mkdir data/db
mkdir data/log
mkdir data/conf
vi /home/mongodb/data/conf/mongodb.cnf
dbpath=/home/mongodb/data/db
logpath=/home/mongodb/data/log/mongodb.log
fork=true
logappend=true
解释:
?dbpath:默认/data/db
?port:默认27017,还有一个http端口28017   (监听端口+1000)
?fork:以daemon方式启动
?logpath:日志路径,增加?logappend,以追加日志的方式,否则每次启动会覆盖旧日志.
?config or  -f :可以用命令行参数也可以使用配置文件.
创建启动脚本
vi  /home/mongodb/start_mongodb.sh
#!/bin/bash
#source $HOME/.bash_profile
BIN_PATH=$HOME/app/mongodb/bin
cd $BIN_PATH
./mongod -f /home/mongodb/data/conf/mongodb.cnf ?rest ?replSet myset
解释:
启动加?rest ,可以在web页面执行一些管理命令.方便我们查看replication set状态.
?replSet  复制集名称
3. 启动mongodb
运行启动脚本,确认服务正常启动
./start_mongodb.sh
检查端口  netstat -tlpn |grep mongo
检查日志 /home/mongodb/data/log/mongodb.log
4. 关闭已经安装好的mongodb节点, 打包/home/mongodb目录到其他节点,解压,然后运行启动脚本.
kill mongod实例进程id
tar czvf mongodb.tar.gz mongodb ?exclude=mongodb/data/db/* ?exclude=mongodb/data/log/*
在其他节点使用start_mongodb.sh启动mongod服务.
5. 配置replciation set
包括主(primary)节点和次要(secondary) ,节点还有其他一些状态: 略
1). 登录要第一个节点(未来做Primary节点的)
mongo
2). >  rs.status()              #会显示“errmsg” : “can’t get local.system.replset ,还没有初始化
3). > rs.initiate()
例子:
> // all at once method > cfg = {
_id : “acme_a”,
members : [
{ _id : 0, host : "sf1.acme.com" },
{ _id : 1, host : "sf2.acme.com" },
{ _id : 2, host : "sf3.acme.com" } ] }
> rs.initiate(cfg)
> rs.status()
—也可以使用简易的方式.全部使用默认值,不建议
rs.initiate()                 #初始化节点,这个节点可以原来存在数据,其他节点必须是空的 以上命令默认把本机的节点加入复制集. 会使用主机名,以后的配置稍繁琐,所有客户端服务器需要在/etc/hosts里添加主机名映射.
如果添加的是内网域名呢? 短连接和长连接的定义一样吗?
4). > rs.status()                #确认已经创建了replication set,已经拥有一个成员
> db.isMaster()              #确认本节点是master
5). 登录其他节点
在每个其他节点/etc/hosts内 添加第一个primary节点主机的主机名.
mongo ?host  primary节点的主机ip
rs.add(“要添加的节点ip”);
6).web界面观看,确认
http://主节点ip:28017/                          #主节点ip端口(默认27017)+1000 = 28017 有一个web界面方便查看复制集的状态.
相关命令
rs.help()
rs.status()
rs.conf()
db.isMaster()
安装目录/bin下的程序解释
mongod 主数据库程序
mongo    数据库shell工具(可以使用javascript和服务器交互)
其他工具略:mongoimport,mongoexport,mongodump,mongorestore,bsondump,mongofiles,mongostat
默认的端口:
mongod :27017
mongos: 27017
shard server (mongod ?shardsvr) : 27018
config server (mongod ?configsvr) : 27019
web stats page for mongod : add 1000 to port number (28017, by default)
1.可考虑关闭atime
2. 设置文件描述符限制  (> 4000+)   #  (see etc/limits and ulimit)
3. 不要使用大内存页
4. dmesg 检查下;
5. 考虑BIOS禁用NUMA,或者使用numactl命令启动mongod(mongod启动的时候会自动检查os配置,并提示warnings)
6. 使用ntp同步好各主机的时间 7. 内核版本 > 2.6.36
================================================================
维护
1. 启动,见安装部分.关闭:
1). kill pid
2). mongo登录关闭(本地或者验证用户才能这样关闭)
> use admin
> db.shutdownServer();
如果关闭复制集(replication set)的主库,那么mongodb会检查是否有  复制超时<10秒的secondary节点,没有的话,就不关闭主节点,除非强制执行.
如果有的话,那么primary节点step down,等待secondary节点跟上primary节点.然后60秒后,primary节点关闭.
强制关闭的方法:
> db.shutdownServer({force : true})
一直检查N秒,如果N秒内有满足条件(复制超时<10秒)的次要节点,那么关闭主节点.
> db.shutdownServer({timeoutSecs : 5})
2 .查看服务状态
http接口查看
?nohttpinterface #禁用它
>use admin
>db.addUser(“root”, “abcd”); #添加了一个管理用户
http://localhost:28017/_status #输入上面配置的用户和密码即可.
以上需要使用带权限认证的方式启动才生效(未验证)
?rest   这个参数可以让web界面执行一些管理命令.
获取mongodb状态
db.serverStatus命令
rs.status()
具体参考监控章节
故障处理
强制一个节点为主库. (v2.0+)
必须在primary库运行, 默认的优先级是1, 所以在主库上指定某个节点的优先级> 主库的优先级即可.  原来的主库会短暂失去响应,估计在几秒内.
$ mongo > // example : give 2st member priority 2
> config = rs.conf()
> config.version++ > // the default priority is 1
> config.members[1].priority = 2
> rs.reconfig(config)
查看,终止当前的操作
db.currentOp();
> db.killOp(1234/*opid*/)
> // same as: db.$cmd.sys.killop.findOne({op:1234})
mongodb安装和维护
分享到:
使用java程序访问 mongodb 数据库演示
使用java程序访问 mongodb 数据库演示 NoSQL 数据库因为其良好的可伸缩性日益受关注,如果使用得当的话,NoSQL 可以带来很大的提升。而 MongoDB 就是一个用 C++ 开发的开源的高可伸缩性的 NoSQL 数据库。 本文将介绍如何在 Java 程序中使用 MongoDB 数据库(Windows平台)。1. 安装 MongoDB 安装非常简单,你可...
mongodb常用命令
mongodb常用命令概述 如果插入数据,mongodb会自动创建集合和数据库.如果查询不存在的集合,mongodb认为是一个空集. 即use mydb(不存在),并不会创建mydb,也不会报错,但如果插入了数据,则自动创建相应的数据库和集合, show dbs可以显示mydb. mongodb的collection(集合)可对应传统关系数据库的table, document 对应行(记录) 按...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……