MongoDB是一個基於分佈式文件存儲的數據庫。由C++語言編寫。旨在爲WEB應用提供可擴展的高性能數據存儲解決方案。 MongoDB是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當***能最豐富,最像關係數據庫的。他支持的數據結構非常鬆散,是類似json的bjson格式,因此可以存儲比較複雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關係數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。 |
服務器部署可以有多種方式。首先,每臺config server、mongos、mongod都可以是單獨的服務器,但這樣會導致某些服務器的浪費,比如config server。下圖爲物理機共享的集羣部署,不需要額外加機器。
當然也有其他的方案,比如把mongos部署在所有的mongod(server1-6)上,又或者在每個運用服務器(server7)上部署mongos。這樣部署有個好處在於,appserver和mongos之間的通信建立在localhost interface上,減少了通信成本。當然,此乃官方說法,但本人有想法,儘管減少了appserver和mongos之間的通信成本,但mongos與mongod之間的通信成本卻增加了,而且把mongos部署在appserver上並不是很利於sa管理,mongoDB應該是一個相對獨立的系統,與應用的耦合度應該儘量降到最低,萬一應用想要換數據庫,也能多少減少些工作量。 |
四、mongodb分佈式的安裝
1、下載
- wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.4.tgz
2、安裝
- tar zxvf mongodb-linux-2.0.4.tgz
- cp -fr mongodb-linux-*2.0.4/* /data/mongodb/
- mkdir -p /data/mongodb/data/ #創建數據存儲目錄
- mkdir -p /data/mongodb/log/ #創建日誌存儲目錄
- mkdir -p /data/mongodb/config/ #創建配置存儲目錄
- mkdir -p /data/mongodb/arbiter/ #創建仲裁節點存儲目錄
3、單機模式以及個參數說明
- mongod --fork --bind_ip 127.0.0.1 --port 11811 --dbpath /data0/mongodb/data --directoryperdb --logpath /data0/mongodb/log/db1.log --logappend --nohttpinterface
- netstat -ntlp|grep mongod
- 簡單的參數說明:
- –logpath 日誌文件路徑
- –master 指定爲主機器
- –slave 指定爲從機器
- –source 指定主機器的IP地址
- –pologSize 指定日誌文件大小不超過64M.因爲resync是非常操作量大且耗時,最好通過設置一個足夠大的oplogSize來避免resync(默認的 oplog大小是空閒磁盤大小的5%)。
- –logappend 日誌文件末尾添加
- –port 啓用端口號
- –fork 在後臺運行
- –only 指定只複製哪一個數據庫
- –slavedelay 指從複製檢測的時間間隔
- –auth 是否需要驗證權限登錄(用戶名和密碼)
- –noauth 不需要驗證權限登錄(用戶名和密碼)
五、集羣模式mongos,mongod,configsvr
- 1.Shard分片--
- 第一組分片
- 192.168.200.226:
- /data/mongodb/bin/mongod --replSet rep1 --fork --port 11813 --maxConns 65535 --dbpath /data/mongodb/data --directoryperdb --logpath /data/mongodb/log/db.log --logappend --nohttpinterface
- #啓動rep1分片的一個數據節點
- /data/mongodb/bin/mongos --configdb 192.168.201.226:11812 --port 11811 --fork --chunkSize 256 --logpath /data/mongodb/log/ms.log #啓動路由節點,讀取201.226上的配置節點的配置文件,(在配置節點啓動後啓動)
- /data/mongodb/bin/mongod --replSet rep1 --fork --port 11814 --dbpath /data/mongodb/arbiter --directoryperdb --logpath /data/mongodb/log/arbiter.log --logappend --nohttpinterface
- #啓動分片的仲裁節點
- 192.168.201.226:
- /data/mongodb/bin/mongod --replSet rep1 --fork --port 11813 --maxConns 65535 --dbpath /data/mongodb/data --directoryperdb --logpath /data/mongodb/log/db.log --logappend --nohttpinterface
- #啓動rep1分片的第二個數據節點
- /data/mongodb/bin/mongos --configdb 192.168.201.226:11812 --port 11811 --fork --chunkSize 256 --logpath /data/mongodb/log/ms.log
- #啓動第二個路由節點 (在配置節點啓動後啓動)
- 2.ConfigServer---
- #啓動config server
- 192.168.201.226:
- /data/mongodb/bin/mongod --configsvr --dbpath /data/mongodb/config --port 11812 --fork --logpath /data/mongodb/log/mc.log
- #啓動配置節點,注意配置節點應該優先啓動,不然路由節點讀取不到配置節點信息則會啓動失敗。
- 3.Mongos路由---
- #啓動mongos,指定config server, chunkSize 256M
- 192.168.201.226:
- /data/mongodb/bin/mongos --configdb 192.168.201.226:11812 --port 11811 --fork --chunkSize 256 --logpath /data/mongodb/log/ms.log
- #啓動路由節點
由於機器有限,只配置了一個shard分片,該分片裏有2個節點,新增加分片只需對應改replSet 名稱即可。
- 4.配置replSet: 連接任一mongod members
- mongo 192.168.201.226:11813
- config = {_id: 'rep1', members: [
- {_id: 0, host: '192.168.200.226:11813', priority: 2}, #priority 爲定義優先級,默認爲1,高優先級會被認爲是主節點優先啓用。
- {_id: 1, host: '192.168.201.226:11813'},
- {_id: 2, host: '192.168.200.226:11814', arbiterOnly: true}]
- }
- rs.initiate(config);
- rs.status()
- 5.連接mongos增加shard 80G
- mongo 192.168.201.226:11811/admin
- show dbs
- use admin
- db.runCommand({addshard:'rep1/192.168.201.226:11813,192.168.200.226:11813',maxsize:81920})
- db.runCommand({listshards:1})
- 6.連接mongos增加創建test庫和c1集合,並測試
- mongo 192.168.201.226:11811/admin
- db.runCommand({enablesharding:'test'})
- printShardingStatus()
- db.runCommand({shardcollection:'test.auto_increment_id', key:{_id:1}, unique : true})
- db.runCommand({shardcollection:'test.c1', key:{_id:1}, unique : true})
- for (var i = 1; i <= 100; i++)db.c1.save({id:i,value1:"1234567890",value2:"1234567890",value3:"1234567890",value4:"1234567890"})
- db.c1.stats()
- db.createCollection("cap_coll", {capped:true, size:100000, max:100});
- db.mycoll.validate();
- 7.檢查: db.printCollectionStats()
- 8.管理: mongo 127.0.0.1:11811
- show dbs
- use admin
- show collections
- db.serverStatus()
- db.shutdownServer()
- exit
- 9.索引:
- db.product_data.ensureIndex({data_id: 1}, {unique: true,dropDups: true}); #創建索引
- db.product_data.dropIndexes(); #刪除索引