mongDB主從

MongoDB【第二篇】MongodDB主從

官方網站:
http://www.mongodb.org/
html

MongoDB的一些參數linux

 

 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:mongodb

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. #寫和一些讀操做
正確關閉mongo的方法:
kill -2 pid

 

 



MongoDB 安裝,主從配置

一 MongoDB 安裝
shell

 

 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數據庫

                  方法二(將啓動方法寫成配置文件的形式)windows

vi mongod.conf(主庫的配置文件)  bash

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(從庫的配置文件)                                                                 
app

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:27017tcp

./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」錯誤及解決方法

首先這是正常的,由於SECONDARY是不容許讀寫的,  在寫多讀少的應用中,使用Replica Sets來實現讀寫分離。經過在鏈接時指定或者在主庫指定slaveOk,由Secondary來分擔讀的壓力,Primary只承擔寫操做。
對於replica set 中的secondary 節點默認是不可讀的,

 

解決方法:1.在從進庫輸入>rs.slaveOk();進行強制同步(不推薦)

              2.在主庫上設置 slaveok=ok

                 [mongodb@ligh bin]$ mongo 127.0.0.1:33333

                 MongoDB shell version: 2.0.1
                 connecting to: 127.0.0.1:33333/test

 

PRIMARY> db.getMongo().setSlaveOk(); 此命令在從庫衝輸入

 

而後能夠在從庫上測試一下。

 

測試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 >
相關文章
相關標籤/搜索