mongodb的安裝及主從複製mysql
1、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/mongodb.log
6.驗證
端口27017和28017是否打開
netstat -nultp
mongo命令進入mongo shell
2、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 #當發現從服務器的數據不是最新時,向主服務器請求同步數據
3、測試主從可用性
在兩主機上啓動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
local4.201171875GB
> use xin
switched to db xin
> db.test.save({title:"just test"})
> db.test.find()
{ "_id" : ObjectId("502d3643c5664ca66103a7cf
"), "title" : "just test" }
> show dbs
local4.201171875GB
xin0.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
local0.203125GB
xin0.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.printSlaveReplicationInf
o()
source: 10.48.255.244:27017
syncedTo: Thu Aug 16 2012 18:34:37 GMT+0000 (UTC)
= 20 secs ago (0.01hrs)
ok,mongodb的主從複製搞定了!