MongoDB配置及php串連測試 (2010-05-10 10:41:36) 轉載▼
標籤: mongodb php 雜談 |
分類: 技術文章 |
MongoDB的auto-sharding功能是指mongodb通過mongos自動建立一個水平擴充的資料庫叢集系統,將資料庫分表格儲存體在sharding的各個節點上。 一個mongodb叢集包括一些shards(包括一些mongod進程),mongos路由進程,一個或多個config伺服器
Shards 每一個shard包括一個或多個服務和儲存資料的mongod進程(mongod是MongoDB資料的核心進程) 典型的每個shard開啟多個服務來提高服務的可用性。這些服務/mongod進程在shard中組成一個複製集
Chunks Chunk是一個來自特殊集合中的一個資料範圍,(collection,minKey,maxKey)描敘一個chunk,它介於minKey和maxKey範圍之間。 例如chunks 的maxsize大小是100M,如果一個檔案達到或超過這個範圍時,會被切分到2個新的chunks中。當一個shard的資料過量時,chunks將會被遷移到其他的shards上。同樣,chunks也可以遷移到其他的shards上
Config Servers Config伺服器儲存著叢集的metadata資訊,包括每個伺服器,每個shard的基本資料和chunk資訊 Config伺服器主要儲存的是chunk資訊。每一個config伺服器都複製了完整的chunk資訊。
配置:(類比2個shard服務和一個config服務) Shard1:192.168.11.37:27017 Shard2:192.168.11.39:27017 Config:192.168.11.40:27019 mongos: 192.168.11.41:27017 Mongos啟動時預設使用的27017連接埠
啟動服務 192.168.11.37 mkdir /data/db cd /mnt/disk1/mongodb-linux-x86_64-1.4.2/bin ./mongod --shardsvr --dbpath /data/db > /tmp/mongodb.log &
192.168.11.39 mkdir /data/db cd /mnt/disk1/mongodb-linux-x86_64-1.4.2/bin ./mongod --shardsvr --dbpath /data/db > /tmp/mongodb.log &
192.168.11.40 cd /mnt/disk1/mongodb-linux-x86_64-1.4.2/bin ./mongod --configsvr --dbpath /data/db > /tmp/mongoconfigdb.log &
192.168.11.41 cd /mnt/disk1/mongodb-linux-x86_64-1.4.2/bin ./mongos --configdb 192.168.11.40:27019 > /tmp/mongoconfigdb.log &
檢查服務狀態 ps -ef|grep mongo netstat -an -t 開啟的28017是對應的http介面
管理MongoDB 192.168.11.41 cd /mnt/disk1/mongodb-linux-x86_64-1.4.2/bin ./mongo 預設串連到mongos上 > show dbs 加入shard節點 > use admin > db.runCommand( { addshard : "192.168.11.37:27018", allowLocal : true } ) > db.runCommand( { addshard : "192.168.11.39:27018", allowLocal : true } ) > db.runCommand({listshards:1}); 查看shard節點列表 建立自動切片的庫user001: > config = connect("192.168.11.40:27019") > config = config.getSisterDB("config") > user001=db.getSisterDB("user001"); > db.runCommand({enablesharding:"user001"}) > db.printShardingStatus(); 在user001中建立表,插入資料 > use user001 > db.createCollection("user_001") > show collections > db.user_001.insert({uid:1,username:"Falcon.C",sex:"男",age:25}); > db.user_001.find(); 查看user001庫分配到了哪個shard 192.168.11.37/39 cd /data/db ls -l 可以看到user001被分配到了192.168.11.39的shard上了,但是通過mongos路由,我們並感覺不到是資料存放在哪個shard的chunk上
Sharding的管理命令 192.168.11.41 > db.$cmd.findOne({isdbgrid:1}); > db.$cmd.findOne({ismaster:1}); > printShardingStatus(db.getSisterDB("config")) > use admin > db.runCommand({netstat:1})
php測試 vi mondb.php <?php $m = new Mongo("192.168.11.41"); //connect to mongs $db = $m->user001; //選擇一個資料庫(user001) $collection = $db->user_001; //選擇一個collection(user_001) $result = $collection->find(); foreach($result as $val){ print_r($val); }
echo "<br><br>";
foreach($result as $val){ echo "使用者ID:".$val["uid"]."<br>"; echo "使用者姓名:".$val["username"]."<br>"; echo "使用者性別:".$val["sex"]."<br>"; echo "使用者年齡:".$val["age"]."<br>"; } // disconnect $m->close(); ?>
http://192.168.11.37/mondb.php 顯示結果: Array ( [_id] => MongoId Object ( ) [uid] => 1 [username] => Falcon.C [sex] => 男 [age] => 25 )
使用者ID:1 使用者姓名:Falcon.C 使用者性別:男 使用者年齡:25