您好,登錄后才能下訂單哦!
接上文,我們已經搭建成功了,下面是我們查看日志等詳細解讀
我們可以通過執行“db.printCollectionStats()”命令查看到操作日志的一些基本信息,如大小,日志啟動時間等,查看primary 的oplog.rs表的元信息,代碼如下:
PRIMARY> db.printCollectionStats()
oplog.rs
{
}
---
system.replset
{
}
---
PRIMARY>
復制集搭建之后,需要做的第一件事就是要查看復制集的同步狀態,因為如果復制集數據不同步,mongodb的復制集是不會起到任何效果的,通過執行“db.printSlaveReplicationInf
PRIMARY> db.printSlaveReplicationInf
source:
source:
PRIMARY>
字段說明:
1, source :從庫的IP及端口
2,syncedTo: 目前的同步情況,以及最后一次同步時間等信息。
主從配置信息
PRIMARY> db
local
PRIMARY> show collections
oplog.rs
system.replset
PRIMARY> db.system.replset.find()
{ "_id" : "rs1", "version" : 1, "members" : [
{
{
PRIMARY>
在本例中,字段ID存儲復制集的名字,本例中的值是rs1,字段“members”存儲復制集成員的IP及端口信息。
管理Replica Sets
1,主從切換
端口
28010
28011
28012
在本例中,端口28010對應的是主庫,現在要將主庫放到28012的端口上,下面逐步引導大家完成配置
步驟1:除了現有的主實例(端口28010)和目標主實例(端口28012)以外,其他的實例群全部設置為“冰凍”(freeze)狀態,即(非主狀態);
本實例中將端口28011“冰凍”,代碼如下
PRIMARY> exit
bye
[root@dota ~]# /usr/local/mongodb/bin/mongo --port 28011
MongoDB shell version: 2.0.4
connecting to: 127.0.0.1:28011/test
SECONDARY> rs.freeze(30)
{ "ok" : 1 }
SECONDARY>
通過執行“rs.freeze(30)”命令,將端口在28011上的實例“冰凍”,其中30的單位是秒,說明30秒內這個實例不會參與primary的內部選舉工作,即30內此實例不會變成primary角色,那么就充分利用三十秒的時間完成切換工作。
步驟2,將當前主庫的實例降級,
[root@dota ~]# /usr/local/mongodb/bin/mongo --port 28010
MongoDB shell version: 2.0.4
connecting to: 127.0.0.1:28010/test
PRIMARY> rs.stepDown()
Fri Jul 25 11:25:20 DBClientCursor::init call() failed
Fri Jul 25 11:25:20 query failed : admin.$cmd { replSetStepDown: 60.0 } to: 127.0.0.1:28010
Fri Jul 25 11:25:20 Error: error doing query: failed shell/collection.js:151
Fri Jul 25 11:25:20 trying reconnect to 127.0.0.1:28010
Fri Jul 25 11:25:20 reconnect 127.0.0.1:28010 ok
步驟3,查看操作之后的狀態
通過rs.status()查看操作后的狀態
SECONDARY> rs.status()
{
}
SECONDARY>
讀寫分離
步驟一:先向主庫插入一條測試數據,代碼如下
------我們前面做了主從切換,28010不是 主,28012才是主,搞清楚實驗環境
[root@dota ~]# /usr/local/mongodb/bin/mongo --port 28012
MongoDB shell version: 2.0.4
connecting to: 127.0.0.1:28012/test
PRIMARY> db
test
PRIMARY> db.c1.insert({age:30})
PRIMARY> db.c1.find()
{ "_id" : ObjectId("53d1ed7cb017538f84368f95
步驟二:在從庫中執行查詢操作,代碼如下
------切換到從庫
[root@dota ~]# /usr/local/mongodb/bin/mongo --port 28011
connecting to: 127.0.0.1:28011/test
SECONDARY> show dbs
admin
local
test
SECONDARY> db
test
SECONDARY> show collections
Fri Jul 25 13:40:36 uncaught exception: error: { "$err" : "not master and slaveok=false", "code" : 13435 }
步驟三,使從庫可以讀,以分擔主庫的壓力,代碼如下
SECONDARY> db.getMongo().setSlaveOk()
not master and slaveok=false
SECONDARY> show dbs
admin
local
test
SECONDARY> show collections
c1
system.indexes
SECONDARY> db.c1.find()
{ "_id" : ObjectId("53d1ed7cb017538f84368f95
SECONDARY>
故障轉移
將主庫的端口28012的mongodb進程殺掉,在看看復制集的狀態
步驟一:殺掉28012端口的mongodb進程,代碼如下
[root@dota ~]# ps aux | grep mongod
root
root
root
root
root
[root@dota ~]# kill -9 27967
[root@dota ~]#
步驟2,查看復制集狀態,代碼如下:
[root@dota ~]# /usr/local/mongodb/bin/mongo --port 28011
MongoDB shell version: 2.0.4
connecting to: 127.0.0.1:28011/test
SECONDARY> rs.status()
{
}
SECONDARY>
上面們可以看到,通過執行rs.status命令查看復制集狀態,28012端口mongodb出現異常,狀態信息是not reaschable/healthy,說明他已經是一個無效的復制集成員,而系統經過自動選舉之后,選舉28010端口作為主庫,28011端口任然為從庫,則有的故障處理機制,能將系統的穩定性和連續性大大提高,解決了藏劍的單點故障問題。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。