mongDB主从
MongoDB【第二篇】MongodDB主从
官方网站:
http://www.mongodb.org/
MongoDB的一些参数
1 --logpath 日志文件路径 2 --master 指定为主机器 3 --slave 指定为从机器 4 --source 指定主机器的IP地址 5 --pologSize 命令行参数(与--master一同使用)配置用于存储给从节点可用的更新信息占用的磁盘空间(M为单位),如果不指定这个参数,默认大小为当前可用磁盘空间的5%(64位机器最小值为1G,32位机器为50M)。 6 --logappend 日志文件末尾添加 7 --port 启用端口号 8 --fork 在后台运行 9 --only 指定只复制哪一个数据库 10 --slavedelay 指从复制检测的时间间隔 11 --auth 是否需要验证权限登录(用户名和密码) 12 -h [ --help ] show this usage information 13 --version show version information 14 -f [ --config ] arg configuration file specifying additional options 15 --port arg specify port number 指定端口号 16 --bind_ip arg local ip address to bind listener - all local ips 17 bound by default 18 -v [ --verbose ] be more verbose (include multiple times for more 19 verbosity e.g. -vvvvv) 20 --dbpath arg (=/data/db/) directory for datafiles 指定数据存放目录 21 --quiet quieter output 静默模式 22 --logpath arg file to send all output to instead of stdout 指定日志存放目录 23 24 --logappend appnd to logpath instead of over-writing 指定日志是以追加还是以覆盖的方式写入日志文件 25 26 --fork fork server process 以创建子进程的方式运行 27 --cpu periodically show cpu and iowait utilization 周期性的显示cpu和io的使用情况 28 --noauth run without security 无认证模式运行 29 --auth run with security 认证模式运行 30 --objcheck inspect client data for validity on receipt 检查客户端输入数据的有效性检查 31 --quota enable db quota management 开始数据库配额的管理 32 --quotaFiles arg number of files allower per db, requires --quota 规定每个数据库允许的文件数 33 --appsrvpath arg root directory for the babble app server 34 --nocursors diagnostic/debugging option 调试诊断选项 35 --nohints ignore query hints 忽略查询命中率 36 --nohttpinterface disable http interface 关闭http接口,默认是28017 37 --noscripting disable scripting engine 关闭脚本引擎 38 --noprealloc disable data file preallocation 关闭数据库文件大小预分配 39 --smallfiles use a smaller default file size 使用较小的默认文件大小 40 --nssize arg (=16) .ns file size (in MB) for new databases 新数据库ns文件的默认大小 41 --diaglog arg 0=off 1=W 2=R 3=both 7=W+some reads 提供的方式,是只读,只写,还是读写都行,还是主要写+部分的读模式 42 --sysinfo print some diagnostic system information 打印系统诊断信息 43 --upgrade upgrade db if needed 如果需要就更新数据库 44 --repair run repair on all dbs 修复所有的数据库 45 --notablescan do not allow table scans 不运行表扫描 46 --syncdelay arg (=60) seconds between disk syncs (0 for never) 系统同步刷新磁盘的时间,默认是60s 47 Replication options: 48 --master master mode 主复制模式 49 --slave slave mode 从复制模式 50 --source arg when slave: specify master as <server:port> 当为从时,指定主的地址和端口 51 --only arg when slave: specify a single database to replicate 当为从时,指定需要从主复制的单一库 52 --pairwith arg address of server to pair with 53 --arbiter arg address of arbiter server 仲裁服务器,在主主中和pair中用到 54 --autoresync automatically resync if slave data is stale 自动同步从的数据 55 --oplogSize arg size limit (in MB) for op log 指定操作日志的大小 56 --opIdMem arg size limit (in bytes) for in memory storage of op ids指定存储操作日志的内存大小 57 Sharding options: 58 --configsvr declare this is a config db of a cluster 指定shard中的配置服务器 59 --shardsvr declare this is a shard db of a cluster 指定shard服务器
60 --diaglog:创建一个非常详细的故障排除和各种错误的诊断日志记录。默认0。设置为1,为在dbpath目录里生成一个diaglog.开头的日志文件,他的值如下:
例子:diaglog:
1.
Value Setting
2.
0
off. No logging. #关闭。没有记录。
3.
1
Log write operations. #写操作
4.
2
Log read operations. #读操作
5.
3
Log both read and write operations. #读写操作
6.
7
Log write and some read operations. #写和一些读操作
MongoDB 安裝,主从配置
一 MongoDB 安装
1 [root@zabbix_server src]# wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.0.tgz 2 [root@zabbix_server src]# tar xzvf mongodb-linux-x86_64-2.0.0.tgz 3 [root@zabbix_server src]# mv mongodb-linux-x86_64-2.0.0 /usr/local/mongodb 4 5 [root@zabbix_server src]# mkdir /usr/local/mongodb/data 6 [root@zabbix_server src]# touch /usr/local/mongodb/logs 7 8 [root@zabbix_server bin]# /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend --port=27017 --fork 9 10 11 12 [root@zabbix_server bin]# ./mongo 13 MongoDB shell version: 2.0.0 14 connecting to: test 15 > use test; 16 switched to db test 17 > exit 18 bye 19 20 21 [root@zabbix_server bin]# netstat -anlpt | grep mongo 22 tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 11504/mongod 23 tcp 0 0 0.0.0.0:28017 0.0.0.0:* LISTEN 11504/mongod
注意:
如果报错
-bash: /usr/local/mongodb/bin/mongod: cannot execute binary file
说明你的服务器和mongodb 的版本不对应, 如果服务器是64位,下载x86_64的mongodb ,如果服务器是32位的, 下载i686的mongodb/
二 MongoDB 主从配置
1)实验环境
主:192.168.0.14
从:192.168.0.64
2)时间同步
两台机器做时间同步
[root@zabbix_server src]# ntpdate time.windows.com
3)启动服务:方法一
master:192.168.0.14
启动命令
/usr/local/mongodb/bin/mongod --master --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend --port=27017 --fork
slave:192.168.0.64
启动命令
/usr/local/mongodb/bin/mongod --slave --source 192.168.0.14:27017 --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend --port=27017 --fork
方法二(将启动方法写成配置文件的形式)
vi mongod.conf(主库的配置文件)
port=27017
dbpath=/usr/local/mongodb01/db
logpath=/usr/local/mongodb01/logs/mongodb.log
logappend=true
journal=true
fork = true
master = true
vi mongod.conf(从库的配置文件)
port=27017
dbpath=/usr/local/mongodb02/db
logpath=/usr/local/mongodb02/logs/mongodb.log
logappend=true
journal=true
fork = true
source = 10.143.79.16:27017
./bin/mongd -f mongod.conf 执行后mongo启动
4)测试主从
在主上插入数据
测试1:
1 测试1: 2 1 在主库上插入数据 3 [root@cacti bin]# ./mongo 4 MongoDB shell version: 2.0.0 5 connecting to: test 6 > db.foo.save({"id":123456,"name":'lizonggang'}) 7 > db.foo.find({"id":123456}) 8 { "_id" : ObjectId("51c3f4b21399022afd992f39"), "id" : 123456, "name" : "lizonggang" } 9 > 10 11 2 在从上查看数据(已有在主上插入的数据,说明主从成功) 12 [root@zabbix_server bin]# ./mongo 13 MongoDB shell version: 2.0.0 14 connecting to: test 15 > db.foo.find({"id":123456}) 16 { "_id" : ObjectId("51c3f4b21399022afd992f39"), "id" : 123456, "name" : "lizonggang" } 17 >
进行数据同步是可能出现错误
Error: error: { "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 } 此错误是当主库插完数据后,在从库查询的时候出现的
MongoDb的“not master and slaveok=false”错误及解决方法
解决方法:1.在从进库输入>rs.slaveOk();进行强制同步(不推荐)
2.在主库上设置 slaveok=ok
[mongodb@ligh bin]$ mongo 127.0.0.1:33333
测试2:
1 1 在主库上入数据 2 > use elaindb 3 switched to db elaindb 4 > db.test.save({title:"This is a test!"}) 5 > db.test.find(); 6 { "_id" : ObjectId("51c3f8f11a90c8da157c7f64"), "title" : "This is a test!" } 7 > 8 9 2 在从库上验证数据 10 [root@zabbix_server bin]# ./mongo 11 MongoDB shell version: 2.0.0 12 connecting to: test 13 > use elaindb 14 switched to db elaindb 15 > db.test.find(); 16 { "_id" : ObjectId("51c3f8f11a90c8da157c7f64"), "title" : "This is a test!" } 17 > db.printReplicationInfo(); 18 this is a slave, printing slave replication info. 19 source: 192.168.0.14:27017 20 syncedTo: Fri Jun 21 2013 14:59:10 GMT+0800 (CST) 21 = 9 secs ago (0hrs) 22 > 23 > db.printSlaveReplicationInfo(); 24 source: 192.168.0.14:27017 25 syncedTo: Fri Jun 21 2013 14:59:30 GMT+0800 (CST) 26 = 16 secs ago (0hrs) 27 >
测试3:
1 在这个状态下,slave 下是不可以插入数据的 2 > db.test.save({title:"This is slave test!"}) 3 not master
5) 一些查询状态的语句
1)查询库
1 > show dbs; 2 elaindb 0.0625GB 3 local 0.125GB 4 test 0.0625GB
2)在从库上查询主库的地址
1 > use local; 2 switched to db local 3 > db.sources.find() 4 { "_id" : ObjectId("51c3f5dd568d10529950b10d"), "host" : "192.168.0.14:27017", "source" : "main", "syncedTo" : { "t" : 1371797300000, "i" : 1 } } 5 >
3)查看主从复制状态
1 > db.printReplicationInfo(); 2 configured oplog size: 47.6837158203125MB 3 log length start to end: 1375secs (0.38hrs) 4 oplog first event time: Fri Jun 21 2013 14:30:35 GMT+0800 (CST) 5 oplog last event time: Fri Jun 21 2013 14:53:30 GMT+0800 (CST) 6 now: Fri Jun 21 2013 14:53:32 GMT+0800 (CST) 7 >
4)查看Collection状态
1 > db.printCollectionStats(); 2 foo 3 { 4 "ns" : "test.foo", 5 "count" : 1, 6 "size" : 56, 7 "avgObjSize" : 56, 8 "storageSize" : 4096, 9 "numExtents" : 1, 10 "nindexes" : 1, 11 "lastExtentSize" : 4096, 12 "paddingFactor" : 1, 13 "flags" : 1, 14 "totalIndexSize" : 8176, 15 "indexSizes" : { 16 "_id_" : 8176 17 }, 18 "ok" : 1 19 } 20 --- 21 system.indexes 22 { 23 "ns" : "test.system.indexes", 24 "count" : 1, 25 "size" : 64, 26 "avgObjSize" : 64, 27 "storageSize" : 4096, 28 "numExtents" : 1, 29 "nindexes" : 0, 30 "lastExtentSize" : 4096, 31 "paddingFactor" : 1, 32 "flags" : 0, 33 "totalIndexSize" : 0, 34 "indexSizes" : { 35 36 }, 37 "ok" : 1 38 } 39 --- 40 >
6)应急
如果在应用中主挂掉了怎么办?
这个情况就需要,停止从库, 把从库以主库的启动命令起来就可以了。
1)停掉从库
kill -9 进程号
2)删除locat下文件
1 rm mongodb/db/locat.* -rf
3)启动从库
1 /usr/local/mongodb/bin/mongod --master --dbpath=/usr/local/mongodb/data
--logpath=/usr/local/mongodb/logs --logappend --port=27017 --fork
6) Mongdb Web 查看界面
7) MongoDB 增,删,改,查
1 [root@cacti bin]# ./mongo 2 MongoDB shell version: 2.0.0 3 connecting to: test 4 > db.test.insert({ "Name" : "ymind", "age" : 8 }); #在test数据库里插入数据 5 > 6 > db.test.find({ "Name" : "ymind" } ); #查询数据 7 { "_id" : ObjectId("51c4187090db4e4751a3cd05"), "Name" : "ymind", "age" : 8 } 8 > db.test.find({ "age" : 8} ); #查询数据 9 { "_id" : ObjectId("51c4187090db4e4751a3cd05"), "Name" : "ymind", "age" : 8 } 10 > 11 > 12 > db.test.update({"Name" : "ymind"}, { "$set" : { "age" : "5" } } ); #修改数据 13 > db.test.find({ "Name" : "ymind" } ); 14 { "Name" : "ymind", "_id" : ObjectId("51c4187090db4e4751a3cd05"), "age" : "5" } 15 > 16 > db.test.remove({ "Name" : "ymind" } ); #删除数据 17 > db.test.find({ "Name" : "ymind" } ); 18 > 19 >