MongoDB 副本集搭建

haoge0205 發表於2019-10-09

搭建mongodb副本集

[[email protected] mongodb]#  cd /u02


[[email protected] u02]# mkdir -p mongodb/data_2777


[[email protected] u02]# mkdir -p mongodb/data_3777


[[email protected] u02]# mkdir -p mongodb/data_4777


[[email protected] mongodb]# tar mongodb-linux-x86_64-3.2.6.tgz


[[email protected] mongodb]# mv mongodb-linux-x86_64-3.2.6 mongodb


[[email protected] mongodb]# mkdir -p 2777 3777 4777


[[email protected] 2777]# mkdir {conf,log,keys,pid} 


[[email protected] 3777]# mkdir {conf,log,keys,pid} 


[[email protected] 4777]# mkdir {conf,log,keys,pid} 


[[email protected] conf]#  vi mongodb_2777.conf

systemLog:

  destination: file

  logAppend: true

  path: /u02/mongodb/mongodb/2777/log/shard1.log

storage:

  dbPath: /u02/mongodb/data_2777

  journal:

    enabled: true

  directoryPerDB: true

  engine: wiredTiger

  wiredTiger:

    engineConfig:

      cacheSizeGB: 10   # the maximum of half of physical RAM or 1 gigabyte

      directoryForIndexes: true    # mongod stores indexes and collections in separate subdirectories under the data (i.e. storage.dbPath) directory

    collectionConfig:

      blockCompressor: snappy # The default type of compression to use to compress collection data

processManagement:

  fork: true  # fork and run in background

  pidFilePath: /u02/mongodb/mongodb/2777/pid/mongodb_2777.pid  # location of pidfile

net:

  bindIp: 0.0.0.0

  port: 2777

operationProfiling:

  slowOpThresholdMs: 500

  mode: slowOp

replication:

  replSetName: shard1    #副本集的名稱,副本集以此名稱來識別是否屬於同一個叢集中

  oplogSizeMB: 512

#auditLog:

#    destination: file

#    format: JSON

#    path: /u02/mongodb/mongodb/2777/log/audit_log/audit.json

#    



啟動mongodb

/u02/mongodb/mongodb/bin/mongod -f /u02/mongodb/mongodb/2777/conf/mongodb_2777.conf

/u02/mongodb/mongodb/bin/mongod -f /u02/mongodb/mongodb/3777/conf/mongodb_3777.conf

/u02/mongodb/mongodb/bin/mongod -f /u02/mongodb/mongodb/4777/conf/mongodb_4777.conf


登入2777埠mongodb

[[email protected] conf]# /u02/mongodb/mongodb/bin/mongo --port 2777

MongoDB shell version: 3.2.6

connecting to: 127.0.0.1:2777/test

Server has startup warnings: 

2019-10-08T19:47:35.621+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.

2019-10-08T19:47:35.621+0800 I CONTROL  [initandlisten] 

2019-10-08T19:47:35.622+0800 I CONTROL  [initandlisten] 

2019-10-08T19:47:35.622+0800 I CONTROL  [initandlisten] ** WARNING: You are running on a NUMA machine.

2019-10-08T19:47:35.622+0800 I CONTROL  [initandlisten] **          We suggest launching mongod like this to avoid performance problems:

2019-10-08T19:47:35.622+0800 I CONTROL  [initandlisten] **              numactl --interleave=all mongod [other options]

2019-10-08T19:47:35.622+0800 I CONTROL  [initandlisten] 

2019-10-08T19:47:35.622+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.

2019-10-08T19:47:35.622+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'

2019-10-08T19:47:35.622+0800 I CONTROL  [initandlisten] 

2019-10-08T19:47:35.622+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.

2019-10-08T19:47:35.622+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'

2019-10-08T19:47:35.622+0800 I CONTROL  [initandlisten] 

shard1:PRIMARY> 


shard1:PRIMARY>conf = {_id:"shard1",members:[{_id:0,host:"127.0.0.1:2777"}]};


shard1:PRIMARY>rs.initiate(conf) ;


會顯示出你的當前資料庫服務例項已經加到副本集中,並且是master

shard1:PRIMARY> db.isMaster()

{

        "hosts" : [

                "127.0.0.1:2777",

                "127.0.0.1:3777",

                "127.0.0.1:4777"

        ],

        "setName" : "shard1",

        "setVersion" : 3,

        "ismaster" : true,

        "secondary" : false,

        "primary" : "127.0.0.1:2777",

        "me" : "127.0.0.1:2777",

        "electionId" : ObjectId("7fffffff0000000000000001"),

        "maxBsonObjectSize" : 16777216,

        "maxMessageSizeBytes" : 48000000,

        "maxWriteBatchSize" : 1000,

        "localTime" : ISODate("2019-10-08T12:12:35.869Z"),

        "maxWireVersion" : 4,

        "minWireVersion" : 0,

        "ok" : 1

}



接著新增剛剛那2個服務例項到副本集中

shard1:PRIMARY>rs.add("127.0.0.1:3777");


shard1:PRIMARY>rs.add("127.0.0.1:4777");


檢視副本集:

shard1:PRIMARY> rs.status()

{

        "set" : "shard1",

        "date" : ISODate("2019-10-08T12:14:04.786Z"),

        "myState" : 1,

        "term" : NumberLong(1),

        "heartbeatIntervalMillis" : NumberLong(2000),

        "members" : [

                {

                        "_id" : 0,

                        "name" : "127.0.0.1:2777",

                        "health" : 1,

                        "state" : 1,

                        "stateStr" : "PRIMARY",

                        "uptime" : 1589,

                        "optime" : {

                                "ts" : Timestamp(1570536146, 1),

                                "t" : NumberLong(1)

                        },

                        "optimeDate" : ISODate("2019-10-08T12:02:26Z"),

                        "electionTime" : Timestamp(1570536062, 2),

                        "electionDate" : ISODate("2019-10-08T12:01:02Z"),

                        "configVersion" : 3,

                        "self" : true

                },

                {

                        "_id" : 1,

                        "name" : "127.0.0.1:3777",

                        "health" : 1,

                        "state" : 2,

                        "stateStr" : "SECONDARY",

                        "uptime" : 706,

                        "optime" : {

                                "ts" : Timestamp(1570536146, 1),

                                "t" : NumberLong(1)

                        },

                        "optimeDate" : ISODate("2019-10-08T12:02:26Z"),

                        "lastHeartbeat" : ISODate("2019-10-08T12:14:04.654Z"),

                        "lastHeartbeatRecv" : ISODate("2019-10-08T12:14:03.533Z"),

                        "pingMs" : NumberLong(0),

                        "syncingTo" : "127.0.0.1:2777",

                        "configVersion" : 3

                },

                {

                        "_id" : 2,

                        "name" : "127.0.0.1:4777",

                        "health" : 1,

                        "state" : 2,

                        "stateStr" : "SECONDARY",

                        "uptime" : 698,

                        "optime" : {

                                "ts" : Timestamp(1570536146, 1),

                                "t" : NumberLong(1)

                        },

                        "optimeDate" : ISODate("2019-10-08T12:02:26Z"),

                        "lastHeartbeat" : ISODate("2019-10-08T12:14:04.654Z"),

                        "lastHeartbeatRecv" : ISODate("2019-10-08T12:14:03.414Z"),

                        "pingMs" : NumberLong(0),

                        "configVersion" : 3

                }

        ],

        "ok" : 1

}


rs.status()

"health" : 1, #代表機器正常 

"stateStr" : "PRIMARY",  #代表是主節點,可讀寫,其中有以下幾下狀態  

1. STARTUP:剛加入到複製集中,配置還未載入  

2. STARTUP2:配置已載入完,初始化;  

3. RECOVERING:正在恢復,不適用讀  

4. ARBITER: 仲裁者  

5. DOWN:節點不可到達  

6. UNKNOWN:未獲取其他節點狀態而不知是什麼狀態,一般發生在只有兩個成員的架構 

7. REMOVED:移除複製集  

8. ROLLBACK:資料回滾,在回滾結束時,轉移到RECOVERING或SECONDARY狀態  

9. FATAL:出錯。檢視日誌grep “replSet FATAL”找出錯原因,重新做同步  

10. PRIMARY:主節點  

11. SECONDARY:備份節點  



建立資料庫:

shard1:PRIMARY> use yoon


檢視當前資料庫:

shard1:PRIMARY> db

yoon


插入資料:

shard1:PRIMARY> db.movie.insert({"name":"hank"});

WriteResult({ "nInserted" : 1 })


檢視當前庫下的表:

shard1:PRIMARY> show collections

movie


檢視錶中資料:

shard1:PRIMARY> db.movie.find()

{ "_id" : ObjectId("5d9c7ee9d7a8df8fd023d6ed"), "name" : "hank" }



登入3777埠檢視錶movie:

[[email protected] conf]# /u02/mongodb/mongodb/bin/mongo --port 3777

注意:新建的slave是不能讀和寫的,當在從伺服器上讀時會出現errmsg:not master and slaveOk=flase code:13435 錯誤,需要執行:rs.slaveOk()來開啟讀功能


shard1:SECONDARY> rs.slaveOk()


shard1:SECONDARY> show dbs

local  0.000GB

yoon   0.000GB

shard1:SECONDARY> use yoon

switched to db yoon

shard1:SECONDARY> show collections

movie

shard1:SECONDARY> db.movie.find()

{ "_id" : ObjectId("5d9c7ee9d7a8df8fd023d6ed"), "name" : "hank" }



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28939273/viewspace-2659159/,如需轉載,請註明出處,否則將追究法律責任。


相關文章

MongoDB

快速掌握mongoDB(一)——mongoDB安裝部署和常用shell命令

1.mongoDB簡介  mongoDB 是由C++語言編寫的,是一種分散式的面向文件儲存的開源nosql資料庫。nosql是Not Only SQL的縮寫,是對不同於傳統的關係型資料庫的資料庫管理系
資料庫|Python|MongoDB

python資料庫-mongoDB的高階查詢操作(55)

一、MongoDB索引  為什麼使用索引?  假設有一本書,你想看第六章第六節講的是什麼,你會怎麼做,一般人肯定去看目錄,找到這一節對應的頁數,然後翻到這一頁。這就是目錄索引,幫助讀者快速找到想要的章
MongoDB

快速掌握mongoDB(二)——聚合管道和MapReduce

上一節簡單介紹了一下mongoDB的增刪改查操作,這一節將介紹其聚合操作。我們在使用mysql、sqlserver時經常會用到一些聚合函式,如sum/avg/max/min/count等,mongoD
C#|MongoDB

快速掌握mongoDB(四)—— C#驅動MongoDB用法演示

前邊我們已經使用mongo shell進行增刪查改和聚合操作,這一篇簡單介紹如何使用C#驅動MongoDB。C#驅動MongoDB的本質是將C#的操作程式碼轉換為mongo shell,驅動的API也
C#|MongoDB

快速掌握mongoDB(五)——通過mongofiles和C#驅動操作GridFS

1 GridFS簡介  當前Bson能儲存的最大尺寸是16M,我們想把大於16M的檔案存入mongoDB中怎麼辦呢?mongoDB提供的GridFS就是專門做這個的。使用GridFS儲存大檔案時,檔案
MongoDB

MongoDB 啟動時關於 NUMA 警告 的分析----(To avoid performance problems)

1. 需求描述觀察MongoDB的啟動Log,會看到一個關於  NUMA 的警告 和 優化建議2018-07-17T17:00:04.516+0800 I CONTROL [initandliste
MongoDB

快速掌握mongoDB(六)——讀寫分離的副本集實現和Sharing介紹

1 mongoDB副本集1 副本集簡介  前邊我們介紹都是單機MongoDB的使用,在實際開發中很少會用單機MongoDB,因為使用單機會有資料丟失的風險,同時單臺伺服器無法做到高可用性(即當伺服器當
MongoDB

mongodb快速入門

mongodb介紹MongoDB是一個高效能,開源,無模式的文件型資料庫,是當前NoSql資料庫中比較熱門的一種。它在許多場景下可用於替代傳統的關係型資料庫或鍵/值儲存方式。Mongo使用C++開發。
MongoDB

restapi(3)- MongoDBEngine : MongoDB Scala程式設計工具庫

最近剛好有同事在學習MongoDB,我們討論過MongoDB應該置於伺服器端然後通過web-service為客戶端提供資料的上傳下載服務。我們可以用上節討論的respapi框架來實現針對MongoDB
MongoDB

上手mongodb

上手MongoDBMongoDB 是一個跨平臺的,面向文件的資料庫,如果你瞭解spring-data-jpa的使用, 那麼恭喜你,你已經可以使用mongodb做開發了使用這種型別的資料庫還是挺方便的,
MongoDB

mongodb副本集用一致性快照方法新增從節點步驟

環境描述主節點 192.168.0.1:27002兩個從節點192.168.0.2:27002192.168.0.3:27002目標:用一致性快照方式新增第三個從節點192.168.0.3步驟簡述:1
MongoDB

實現 MongoDB 外來鍵關聯

【摘要】        Mongodb 作為分散式檔案儲存的資料庫,想實現多表關聯 JOIN 查詢並非易事。但通過集算器 SPL 語言,在 Mongodb 中多個表的外來鍵關聯查詢,完全可以做到像關聯