91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Replica sets架構復制集(2)詳解

發布時間:2020-07-17 11:14:48 來源:網絡 閱讀:606 作者:286090326 欄目:MongoDB數據庫

接上文,我們已經搭建成功了,下面是我們查看日志等詳細解讀

我們可以通過執行“db.printCollectionStats()”命令查看到操作日志的一些基本信息,如大小,日志啟動時間等,查看primary 的oplog.rs表的元信息,代碼如下:

PRIMARY> db.printCollectionStats()
oplog.rs
{
 "ns" : "local.oplog.rs",
 "count" : 1,
 "size" : 80,
 "avgObjSize" : 80,
 "storageSize" : 990003200,
 "numExtents" : 1,
 "nindexes" : 0,
 "lastExtentSize" : 990003200,
 "paddingFactor" : 1,
 "flags" : 0,
 "totalIndexSize" : 0,
 "indexSizes" : {
  
 },
 "capped" : 1,
 "max" : 2147483647,
 "ok" : 1
}
---
system.replset
{
 "ns" : "local.system.replset",
 "count" : 1,
 "size" : 176,
 "avgObjSize" : 176,
 "storageSize" : 12288,
 "numExtents" : 1,
 "nindexes" : 0,
 "lastExtentSize" : 12288,
 "paddingFactor" : 1,
 "flags" : 0,
 "totalIndexSize" : 0,
 "indexSizes" : {
  
 },
 "ok" : 1
}
---
PRIMARY>

復制集搭建之后,需要做的第一件事就是要查看復制集的同步狀態,因為如果復制集數據不同步,mongodb的復制集是不會起到任何效果的,通過執行“db.printSlaveReplicationInfo()”命令,查看所有slave延時情況,例如:28011,28012端口上的slave的同步狀態。代碼如下:

PRIMARY> db.printSlaveReplicationInfo()
source:   localhost:28011
  syncedTo: Fri Jul 25 2014 10:03:17 GMT+0800 (CST)
   = 3437 secs ago (0.95hrs)
source:   localhost:28012
  syncedTo: Fri Jul 25 2014 10:03:17 GMT+0800 (CST)
   = 3437 secs ago (0.95hrs)
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" : [

 {  "_id" : 0,  "host" : "localhost:28010" },  

{  "_id" : 1,  "host" : "localhost:28011" },  

{  "_id" : 2,  "host" : "localhost:28012" } ]

 }
PRIMARY>

在本例中,字段ID存儲復制集的名字,本例中的值是rs1,字段“members”存儲復制集成員的IP及端口信息。

 

管理Replica Sets

1,主從切換

                                                mongodb復制集測試環境

 

端口                                                當前成員角色                                   目標成員角色

28010                                                  主                                                         

28011                                                   從                                                        

28012                                                   從                                                        

在本例中,端口28010對應的是主庫,現在要將主庫放到28012的端口上,下面逐步引導大家完成配置

步驟1:除了現有的主實例(端口28010)和目標主實例(端口28012)以外,其他的實例群全部設置為“冰凍”(freeze)狀態,即(非主狀態);

本實例中將端口28011“冰凍”,代碼如下

PRIMARY> exit                                  --------------退出,切換到我們的27011
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,將當前主庫的實例降級,

 將端口在28010的主庫實例降級,代碼如下:

[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()
{
 "set" : "rs1",
 "date" : ISODate("2014-07-25T03:29:03Z"),
 "myState" : 2,
 "syncingTo" : "localhost:28012",
 "members" : [
  {
   "_id" : 0,
   "name" : "localhost:28010",
   "health" : 1,
   "state" : 2,
   "stateStr" : "SECONDARY",                                 -------此處降級實現
   "optime" : {
    "t" : 1406253797000,
    "i" : 1
   },
   "optimeDate" : ISODate("2014-07-25T02:03:17Z"),
   "self" : true
  },
  {
   "_id" : 1,
   "name" : "localhost:28011",
   "health" : 1,
   "state" : 2,
   "stateStr" : "SECONDARY",
   "uptime" : 219,
   "optime" : {
    "t" : 1406253797000,
    "i" : 1
   },
   "optimeDate" : ISODate("2014-07-25T02:03:17Z"),
   "lastHeartbeat" : ISODate("2014-07-25T03:29:02Z"),
   "pingMs" : 0
  },
  {
   "_id" : 2,
   "name" : "localhost:28012",
   "health" : 1,
   "state" : 1,
   "stateStr" : "PRIMARY",                                            -----看看,這貨升級了
   "uptime" : 219,
   "optime" : {
    "t" : 1406253797000,
    "i" : 1
   },
   "optimeDate" : ISODate("2014-07-25T02:03:17Z"),
   "lastHeartbeat" : ISODate("2014-07-25T03:29:02Z"),
   "pingMs" : 0
  }
 ],
 "ok" : 1
}
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"), "age" : 30 }

 

步驟二:在從庫中執行查詢操作,代碼如下

------切換到從庫

[root@dota ~]# /usr/local/mongodb/bin/mongo --port 28011   MongoDB shell version: 2.0.4
connecting to: 127.0.0.1:28011/test
SECONDARY> show dbs
admin (empty)
local 1.203125GB
test 0.203125GB
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 (empty)
local 1.203125GB
test 0.203125GB
SECONDARY> show collections
c1
system.indexes
SECONDARY> db.c1.find()
{ "_id" : ObjectId("53d1ed7cb017538f84368f95"), "age" : 30 }
SECONDARY>

 

 

故障轉移

將主庫的端口28012的mongodb進程殺掉,在看看復制集的狀態

步驟一:殺掉28012端口的mongodb進程,代碼如下

[root@dota ~]# ps aux | grep mongod
root      1523  0.4  4.8 1791408 49420 ?       Sl   Jul20  29:36 /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs/mongo.logs --logappend --fork
root      2737  0.0  0.0 103248   800 pts/0    S+   14:15   0:00 grep mongod
root     27933  1.5  4.2 3455684 42988 ?       Sl   09:50   4:01 /usr/local/mongodb/bin/mongod --replSet rs1 --keyFile /data/key/r0 --fork --port 28010 --dbpath /data/data/r0 --logpath=/data/log/r0.log --logappend
root     27950  0.3  3.6 3441068 36752 ?       Sl   09:52   0:55 /usr/local/mongodb/bin/mongod --replSet rs1 --keyFile /data/key/r1 --fork --port 28011 --dbpath /data/data/r1 --logpath=/data/log/r1.log --logappend
root     27967  3.0  3.7 3453368 38072 ?       Sl   09:53   7:54 /usr/local/mongodb/bin/mongod --replSet rs1 --keyFile /data/key/r2 --fork --port 28012 --dbpath /data/data/r2 --logpath=/data/log/r2.log --logappend
[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()
{
 "set" : "rs1",
 "date" : ISODate("2014-07-25T06:19:24Z"),
 "myState" : 2,
 "syncingTo" : "localhost:28010",
 "members" : [
  {
   "_id" : 0,
   "name" : "localhost:28010",
   "health" : 1,
   "state" : 1,
   "stateStr" : "PRIMARY",
   "uptime" : 15356,
   "optime" : {
    "t" : 1406266748000,
    "i" : 1
   },
   "optimeDate" : ISODate("2014-07-25T05:39:08Z"),
   "lastHeartbeat" : ISODate("2014-07-25T06:19:23Z"),
   "pingMs" : 0
  },
  {
   "_id" : 1,
   "name" : "localhost:28011",
   "health" : 1,
   "state" : 2,
   "stateStr" : "SECONDARY",
   "optime" : {
    "t" : 1406266748000,
    "i" : 1
   },
   "optimeDate" : ISODate("2014-07-25T05:39:08Z"),
   "self" : true
  },
  {
   "_id" : 2,
   "name" : "localhost:28012",
   "health" : 0,
   "state" : 8,
   "stateStr" : "(not reachable/healthy)",
   "uptime" : 0,
   "optime" : {
    "t" : 1406266748000,
    "i" : 1
   },
   "optimeDate" : ISODate("2014-07-25T05:39:08Z"),
   "lastHeartbeat" : ISODate("2014-07-25T06:17:17Z"),
   "pingMs" : 0,
   "errmsg" : "socket exception"
  }
 ],
 "ok" : 1
}
SECONDARY>

上面們可以看到,通過執行rs.status命令查看復制集狀態,28012端口mongodb出現異常,狀態信息是not reaschable/healthy,說明他已經是一個無效的復制集成員,而系統經過自動選舉之后,選舉28010端口作為主庫,28011端口任然為從庫,則有的故障處理機制,能將系統的穩定性和連續性大大提高,解決了藏劍的單點故障問題。

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亳州市| 云林县| 东宁县| 丰原市| 松滋市| 高青县| 婺源县| 扶余县| 商水县| 孝义市| 仲巴县| 渑池县| 左云县| 商丘市| 涞源县| 洪江市| 滦南县| 长沙市| 武隆县| 潮安县| 双流县| 南川市| 霍城县| 怀柔区| 凤凰县| 郧西县| 安仁县| 平罗县| 黄平县| 宝兴县| 平舆县| 夏邑县| 苏尼特右旗| 板桥市| 犍为县| 济南市| 海林市| 惠来县| 阳原县| 祁门县| 错那县|