--------------------------------- Mongo single -----------------------------------------------------------
Mongo 安装:
1. cd /usr/local/webserver/ && tar zxpf mongodb-linux-x86_64-2.0.6.tgz && mv mongodb-linux-x86_64-2.0.6 mongodb
2. 编写配置文件如下(单个mongo配置)
vim /usr/local/webserver/mongodb/conf/mongodb.conf_back
dbpath=/data/db 数据存放路径
logpath=/mongodb_data1log/mongodb_data1.log 日志路径
fork=true 后台启动
port=27019 启动端口
logappend=true 不会覆盖日志文件
3. 启动
/usr/local/webserver/mongodb/bin/mongod -f /usr/local/webserver/mongodb/conf/mongodb.conf
4. 进入数据库:
/usr/local/webserver/mongodb/bin/mongo 192.168.4.188:27017
--------------------------------- Mongo 集群 -----------------------------------------------------------
Mongo集群:
1. 主从模式(master/slave), 双节点 ,一旦主的挂掉, 数据就无法写入
2. 副本集模式(replica set) ,至少三节点, 一主,一辅, 一控制
下面为replica set 配置
1. 192.168.4.188(master)
mkdir -p /mongodb/data/master && mkdir -p /mongodb/log/
192.168.4.31(slaver)
mkdir -p /mongodb/data/slaver && mkdir -p /mongodb/log/
192.168.4.32 (arbiter)
mkdir -p /mongodb/data/arbiter && mkdir -p /mongodb/log/
2. 分别编写配置文件如下:
#master.conf
dbpath=/mongodb/data/master
logpath=/mongodb/log/master.log
pidfilepath=/mongodb/master.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=10.10.148.130
port=27017
oplogSize=10000
fork=true
noprealloc=true
#slaver.conf
dbpath=/mongodb/data/slaver
logpath=/mongodb/log/slaver.log
pidfilepath=/mongodb/slaver.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=10.10.148.131
port=27017
oplogSize=10000
fork=true
noprealloc=true
#arbiter.conf
dbpath=/mongodb/data/arbiter
logpath=/mongodb/log/arbiter.log
pidfilepath=/mongodb/arbiter.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=10.10.148.132
port=27017
oplogSize=10000
fork=true
noprealloc=true
参数解释:
dbpath:数据存放目录
logpath:日志存放路径
pidfilepath:进程文件,方便停止mongodb
directoryperdb:为每一个数据库按照数据库名建立文件夹存放
logappend:以追加的方式记录日志
replSet:replica set的名字
bind_ip:mongodb所绑定的ip地址
port:mongodb进程所使用的端口号,默认为27017
oplogSize:mongodb操作日志文件的最大大小。单位为Mb,默认为硬盘剩余空间的5%
fork:以后台方式运行进程
noprealloc:不预先分配存储
3. 分别启动:
/usr/local/webserver/mongodb/bin/mongod -f /usr/local/webserver/mongodb/conf/master.conf
/usr/local/webserver/mongodb/bin/mongod -f /usr/local/webserver/mongodb/conf/slaver.conf
/usr/local/webserver/mongodb/bin/mongod -f /usr/local/webserver/mongodb/conf/arbiter.conf
4. 连接主库192.168.4.188
1. /usr/local/webserver/mongodb/bin/mongo 192.168.4.188:27017
2. use admin
3. cfg={ _id:"testrs", members:[ {_id:0,host:'192.168.4.188:27017',priority:2}, {_id:1,host:'192.168.4.31:27017',priority:1},{_id:2,host:'192.168.4.32',arbiterOnly:true}] };
4. rs.initiate(cfg) 初始化设置
5. rs.status() 检测配置是否生效
注:cfg是可以任意的名字,当然最好不要是mongodb的关键字,conf,config都可以。最外层的_id表示replica set的名字,members里包含的是所有节点的地址以及优先级。优先级最高的即成为主节点,即这里的10.10.148.130:27017。特别注意的是,对于仲裁节点,需要有个特别的配置——arbiterOnly:true。这个千万不能少了,不然主备模式就不能生效。
配置的生效时间根据不同的机器配置会有长有短,配置不错的话基本上十几秒内就能生效,有的配置需要一两分钟。如果生效了,执行rs.status()命令会看到如下信息
PRIMARY> rs.status()
{
"set" : "testrs",
"date" : ISODate("2015-08-17T15:56:09Z"),
"myState" : 1,
"syncingTo" : "192.168.4.31:27017",
"members" : [
{
"_id" : 0,
"name" : "192.168.4.188:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"optime" : {
"t" : 1439825218000,
"i" : 1
},
"optimeDate" : ISODate("2015-08-17T15:26:58Z"),
"self" : true
},
{
"_id" : 2,
"name" : "192.168.4.32:27017",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 2007,
"optime" : {
"t" : 0,
"i" : 0
},
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"lastHeartbeat" : ISODate("2015-08-17T15:56:09Z"),
"pingMs" : 0
},
{
"_id" : 3,
"name" : "192.168.4.31:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 1459,
"optime" : {
"t" : 1439825218000,
"i" : 1
},
"optimeDate" : ISODate("2015-08-17T15:26:58Z"),
"lastHeartbeat" : ISODate("2015-08-17T15:56:08Z"),
"pingMs" : 0
}
],
"ok" : 1
5. 测试:
主:db.t.insert({uid:12345})
db.t.find()
{ "_id" : ObjectId("55d1f1e3abe1ab56e12281a5"), "uid" : 12345 }
辅: db.t.find()
{ "_id" : ObjectId("55d1f1e3abe1ab56e12281a5"), "uid" : 12345 }
有数据同步成功
节点移除:
在主库上执行: rs.remove("192.168.4.31:27017") 其中"192.168.4.188:27017", 为rs.status() 中查询到的 节点的 "name" : "192.168.4.188:27017",
节点添加:
1. 在主库上执行: PRIMARY> rs.add("192.168.4.31:27017")
{ "ok" : 1 }
2. 需要重启mongo数据库 ,否则状态错误,如下:
[root@localhost bin]# ./mongo 192.168.4.31:27017
MongoDB shell version: 2.0.6
connecting to: 192.168.4.31:27017/test
FATAL> fatal 致命的 不同点
正确状态如下:
[root@localhost bin]# ./mongo 192.168.4.31:27017
MongoDB shell version: 2.0.6
connecting to: 192.168.4.31:27017/test
SECONDARY> 不同点
Mongo的常用命令
db 显示当前是那个数据库
rs.status() 查看节点信息
show dbs; 查看数据库
show collections 查看当前数据库下的表,及索引
use test 进入test库
db.stats() 查看数据库的状态
db.help() 查看db命令帮助
参考网址:
http://blog.csdn.net/luonanqin/article/details/8497860
http://developer.51cto.com/art/201403/434054_all.htm
http://snowolf.iteye.com/blog/1974747