mongodb的安裝及主從複製

   mongodb的安裝及主從複製

一、mongodb安裝
1.下載mongodblinux版本(注意32位和64位的區別)
wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-2.0.7.tgz
 
2.解壓
tar xvf mongodb-linux-x86_64-2.0.7.tgz
mkdir /usr/local/mongodb
mv mongodb-linux-x86_64-2.0.7/* /usr/local/mongodb
 
3.創建數據庫文件目錄
如果有單獨的分區,把mongodb數據庫文件目錄掛載到單獨分區更好
mkdir -p /mongo/data
創建mongodb日誌文件
mkdir /var/log/mongodb
touch /var/log/mongodb/mongodb.log
 
4.創建mongo命令的軟連
mongo bin目錄下的腳本文件可以直接用了
ln -s /usr/local/mongodb/bin/* /usr/sbin
 
mongodb的bin下各工具的用途:
mongod:數據庫服務端,類似mysqld,每個實例啓動一個進程,可以fork爲Daemon運行
mongo:客戶端命令行工具,類似sqlplus/mysql,其實也是一個js解釋器,支持js語法
mongodump/mongorestore:將數據導入爲bson格式的文件/將bson文件恢復爲數據庫,類似xtracbackup
mongoexport/mongoimport:將collection導出爲json/csv格式數據/將數據導入數據庫,類似mysqldump/mysqlimport
bsondump:將bson格式的文件轉儲爲json格式的數據
mongos:分片路由,如果使用了sharding功能,則應用程序連接的是mongos而不是mongod
mongofiles:GridFS管理工具
mongostat:實時監控工具
 
5啓動mongodb (兩種方法)
方法一:直接命令行啓動
mongod –-port 27017 --fork --logpath=/var/log/mongodb/mongodb.log --logappend --dbpath=/mongo/db
 
方法二:(配置文件啓動:推薦)
mkdir /usr/local/mongodb/conf
cd /usr/local/mongodb/conf
vim mongod.conf
  port=27017 #端口號
  fork=true #以守護進程的方式運行,創建服務器進程
  logpath=/var/log/mongodb/mongodb.log #日誌輸出文件路徑
  logappend=true #日誌輸出方式
  dbpath=/mongo/db #數據庫路徑
  shardsvr=true #設置是否分片
  maxConns=600 #數據庫的最大連接數
 
啓動: mongod -f /usr/local/mongodb/conf/mongod.conf
 
6.驗證
端口27017和28017是否打開
netstat -nultp
 
mongo命令進入mongo shell
 
二、mongodb主從複製配置
主從複製是mongodb最常用的複製方式,這種方式很靈活.可用於備份,故障恢復,讀擴展等.
最基本的設置方式就是建立一個主節點和一個或多個從節點,每個從節點要知道主節點的地址.
這裏我們用一主一從實現mongodb的複製
1.主機
mongodb-master  10.48.255.244   master
mongodb-slave   10.48.255.243   slave
 
2.把以上安裝過程應用於mongodb這兩個主機,配置文件稍加改動
在mongodb-master上,配置文件增加
master=true
oplogSize=2048 #類似於mysql的日誌滾動,單位m
 
在mongodb-slave上,配置文件增加:
slave=true
source=10.48.100.1:27017   #指定主mongodb server
slavedelay=10               #延遲複製,單位爲秒
autoresync=true             #當發現從服務器的數據不是最新時,向主服務器請求同步數據
 
三、測試主從可用性
在兩主機上啓動mongodb: mongod -f /usr/local/mongodb/conf/mongod.conf
1.看日誌信息
主上日誌:
# tail /var/log/mongodb/mongodb.log 
Thu Aug 16 17:59:44 [initandlisten] connection accepted from 10.48.255.243:38034 #1
Thu Aug 16 17:59:57 [conn1] end connection 10.48.255.243:38034
Thu Aug 16 18:00:08 [initandlisten] connection accepted from 10.48.255.243:38035 #2
Thu Aug 16 18:00:43 [clientcursormon] mem (MB) res:30 virt:8749 mapped:4302
 
從上日誌
# tail /var/log/mongodb/mongodb.log 
Thu Aug 16 18:00:28 [replslave] repl: from host:10.48.255.244:27017
Thu Aug 16 18:00:28 [replslave] repl:   applied 1 operations
Thu Aug 16 18:00:28 [replslave] repl:   syncedTo: Aug 16 18:00:17 502d3531:1
Thu Aug 16 18:00:28 [replslave] waiting until: 1345140038 to continue
Thu Aug 16 18:00:28 [replslave] repl: sleep 10 sec before next pass
Thu Aug 16 18:00:38 [replslave] repl: from host:10.48.255.244:27017
Thu Aug 16 18:00:38 [replslave] repl:   applied 1 operations
Thu Aug 16 18:00:38 [replslave] repl:   syncedTo: Aug 16 18:00:27 502d353b:1
Thu Aug 16 18:00:38 [replslave] waiting until: 1345140048 to continue
Thu Aug 16 18:00:38 [replslave] repl: sleep 10 sec before next pass
 
由上述信息知道主從可以建立通信了
 
2.下面我們在主上創建數據庫,並插入集合文檔,看其是否同步
在主服務器上:
# mongo
MongoDB shell version: 2.0.7
connecting to: test
> show dbs
local 4.201171875GB
> use xin
switched to db xin
> db.test.save({title:"just test"})
> db.test.find()
{ "_id" : ObjectId("502d3643c5664ca66103a7cf"), "title" : "just test" }
> show dbs
local 4.201171875GB
xin 0.203125GB
注:xin是數據庫名,test是集合名,{title:"just test"}是文檔
mongodb中使用use即可創建一個數據庫當然也可以切換數據庫,和mysql有很大區別吧
 
讓我們來看看日誌吧
主 server上的日誌:
Thu Aug 16 18:04:51 [FileAllocator] creating directory /mongo/db/_tmp
Thu Aug 16 18:04:51 [FileAllocator] done allocating datafile /mongo/db/xin.ns, size: 16MB,  took 0.001 secs
Thu Aug 16 18:04:53 [FileAllocator] allocating new datafile /mongo/db/xin.0, filling with zeroes...
Thu Aug 16 18:04:53 [FileAllocator] done allocating datafile /mongo/db/xin.0, size: 64MB,  took 0.034 secs
Thu Aug 16 18:04:53 [FileAllocator] allocating new datafile /mongo/db/xin.1, filling with zeroes...
Thu Aug 16 18:04:53 [FileAllocator] done allocating datafile /mongo/db/xin.1, size: 128MB,  took 0.04 secs
Thu Aug 16 18:04:53 [conn3] build index xin.test { _id: 1 }
Thu Aug 16 18:04:53 [conn3] build index done 0 records 0.012 secs
Thu Aug 16 18:04:53 [conn3] insert xin.test 2892ms
Thu Aug 16 18:05:07 [initandlisten] connection accepted from 10.48.255.243:60173 #4
Thu Aug 16 18:05:08 [conn4] end connection 10.48.255.243:60173
 
從 server上的日誌:
Thu Aug 16 18:05:04 [replslave] repl: from host:10.48.255.244:27017
Thu Aug 16 18:05:04 [replslave] resync: dropping database xin
Thu Aug 16 18:05:04 [replslave] removeJournalFiles
Thu Aug 16 18:05:04 [replslave] resync: cloning database xin to get an initial copy
Thu Aug 16 18:05:04 [FileAllocator] allocating new datafile /mongo/db/xin.ns, filling with zeroes...
Thu Aug 16 18:05:04 [FileAllocator] creating directory /mongo/db/_tmp
Thu Aug 16 18:05:04 [FileAllocator] done allocating datafile /mongo/db/xin.ns, size: 16MB,  took 0 secs
Thu Aug 16 18:05:04 [FileAllocator] allocating new datafile /mongo/db/xin.0, filling with zeroes...
Thu Aug 16 18:05:04 [FileAllocator] done allocating datafile /mongo/db/xin.0, size: 64MB,  took 0 secs
Thu Aug 16 18:05:04 [FileAllocator] allocating new datafile /mongo/db/xin.1, filling with zeroes...
Thu Aug 16 18:05:04 [FileAllocator] done allocating datafile /mongo/db/xin.1, size: 128MB,  took 0.001 secs
Thu Aug 16 18:05:04 [replslave] build index xin.test { _id: 1 }
Thu Aug 16 18:05:04 [replslave] build index done 1 records 0 secs
Thu Aug 16 18:05:04 [replslave] resync: done with initial clone for db: xin
Thu Aug 16 18:05:04 [replslave] repl:   applied 1 operations
 
由上述日誌可以看出xin數據庫已經同步到從 server上了
 
3.我們進入從 server 的mongodb shell,確認一下
# mongo
MongoDB shell version: 2.0.7
connecting to: test
> show dbs
local 0.203125GB
xin 0.203125GB
>
> use xin
switched to db xin
> db.test.find()
{ "_id" : ObjectId("502d3643c5664ca66103a7cf"), "title" : "just test" }
 
 
我們創建的數據庫數據並不多,爲什麼會有0.2G呢,這是因爲mongodb預分配數據庫的空間,這使下次向數據庫中插入數據更快了
 
4.在 從server 上查看Collection(集合)狀態
> db.printCollectionStats()
system.indexes
{
"ns" : "xin.system.indexes",
"count" : 1,
"size" : 64,
"avgObjSize" : 64,
"storageSize" : 4096,
"numExtents" : 1,
"nindexes" : 0,
"lastExtentSize" : 4096,
"paddingFactor" : 1,
"flags" : 0,
"totalIndexSize" : 0,
"indexSizes" : {
},
"ok" : 1
}
---
test
{
"ns" : "xin.test",
"count" : 1,
"size" : 44,
"avgObjSize" : 44,
"storageSize" : 8192,
"numExtents" : 1,
"nindexes" : 1,
"lastExtentSize" : 8192,
"paddingFactor" : 1,
"flags" : 1,
"totalIndexSize" : 8176,
"indexSizes" : {
"_id_" : 8176
},
"ok" : 1
}
---
 
在 從server 上查看主從複製的狀態
> db.printReplicationInfo()
this is a slave, printing slave replication info.
source:   10.48.255.244:27017
syncedTo: Thu Aug 16 2012 18:33:27 GMT+0000 (UTC)
= 18 secs ago (0.01hrs)
> db.printSlaveReplicationInfo()
source:   10.48.255.244:27017
syncedTo: Thu Aug 16 2012 18:34:37 GMT+0000 (UTC)
= 20 secs ago (0.01hrs)
 
 
ok,mongodb的主從複製搞定了!
 
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章