MongoDB (1)---復制集與sharding安裝配置


MongoDB的官方文檔相當不錯,而且還有中文手冊,雖然有些還沒有被翻譯完整:)建議大家多閱讀在線手冊,省掉一些網上信息不准確產生的痛苦,呵呵

一,安裝:

    在各種操作系統上的安裝非常簡單,從網上下載相應操作系統上的MongoDB的Binaries然后直接就可以運行,這里不會浪費筆墨,請參考官方中文安裝文檔http://cn.docs.mongodb.org/manual/tutorial/install-mongodb-on-linux/

   FQA:

    1.注意各操作系統的OS Architecture也就是是多少位的操作系統。要下載對應的MongoDB程序運行文件。Widows上可以用 wmic os get osarchitecture命令查看

二,復制集(Replica Sest):

    a.安裝配置:

    創建測試環境下的三個MongoDB的存貯數據的目錄:

    mkdir -p /var/database/mongodb/rs0-0 /var/database/mongodb/rs0-1 /var/database/mongodb/rs0-2

    起動三個數據庫服務Instances(約定為一個復制集合)   

    mongod --port 27017 --dbpath /var/database/mongodb/rs0-0 --replSet rs0
    mongod --port 27018 --dbpath /var/databasemongodb/rs0-1 --replSet rs0
    mongod --port 27019 --dbpath /var/database/mongodb/rs0-2 --replSet rs0

    用Mongodb的管理客戶端,並聯接到在27017端口的Mongodb服務,啟動后進行復制集操作:

    mongo --port 27017  

    >rsconf = {
           _id: "rs0",
           members: [
                      { _id: 0,
                       host: "<hostname>:27017"
                      }
                    ]
         }

     >rs.initiate( rsconf )

    >rs.add("<hostname>:27018")
    >rs.add("<hostname>:27019")

當然也可以直接用configuration方式創建:

   >config={_id: 'setA', members:[{_id: 0,host:'127.0.0.1:10000'},{_id:1,host:'127.0.0.1:10001'},{_id:2,host:'       127.0.0.1:10002'}]}

  >rs.initiate( rsconf )

    配置完成后,驗證查看一下當前復制集的狀態:

   >rs.status()

   如果你在代碼中使用,在創建MongoDB的對象時,把這三個MongoDB全部做為實例化參數即可,MongoDB的driver會自動判斷哪個為Primiary 節點,哪幾個為Slave 節點,Driver缺省情況下,會讓connection讀寫同一個節點(一般為Primary),同時也可以設置這個復制集的讀寫分離,或者設置復制集的讀寫嚴格一致性:)。這里提供Java的代碼例子:

   MongoClient mongoClient = new MongoClient(Arrays.asList(
   new ServerAddress("localhost", 27017),
   new ServerAddress("localhost", 27018),
   new ServerAddress("localhost", 27019)));

  或者:

   Mongo mongo = new Mongo(Arrays.asList(
   new ServerAddress("localhost", 27017),
   new ServerAddress("localhost", 27018),
   new ServerAddress("localhost", 27019)));

 建議大家使用第一種MongoClient類,因為Mongo類將來會被MongoClient所替代。

    b.FAQ:

    復制集合中的節點選舉策略

    復制集中的集點屬性。

   對讀寫分離(Tag定向/非定向),寫關注(Write concern)即讀寫一致性

     

    c.工作機制:

    MongoDB的客戶端識別這個集群的主節點(Primary Node)然后進行讀寫到主節點上,如果想分離讀寫,可以進行設置,進行讀寫分離,但寫一直是寫到PrimaryNode上,在寫到的主節點同時,其它Slave節點通過oplog復制主節點數據,當然,也可以設置Chained Replica 模式,一個slave從主節點復節數據,另一個slave節點從這個slave節點再復制數據,一般建議一個replica set上不少於3台節點,因為如果一台失敗,另一台就要作為恢復的數據源,影響正常數據訪問,所以至少有三台。

三,分片(Sharding)

   a.安裝配置:

   1.首先創建復制集,但每一台數據庫要以sharding srever 方式啟動。如下:

    $mongod  --shardsvr --port 27017 --dbpath /srv/mongodb/rs0-0 --replSet rs0
    $mongod --shardsvr --port 27018 --dbpath /srv/mongodb/rs0-1 --replSet rs0
    $mongod --shardsvr --port 27019 --dbpath /srv/mongodb/rs0-2 --replSet rs0

    $mongo --port 27017  

    >rsconf = {            _id: "rs0",            members: [ {_id: 0, host: "<hostname>:27017"                       }                     ]          }

     >rs.initiate( rsconf )

    >rs.add("<hostname>:27018")     >rs.add("<hostname>:27019")

    2.再創建同個類似的復制集

     $mongod  --shardsvr --port 37017 --dbpath /srv/mongodb/rs1-0 --replSet rs1     $mongod --shardsvr --port 37018 --dbpath /srv/mongodb/rs1-1 --replSet rs1     $mongod --shardsvr --port   37019 --dbpath /srv/mongodb/rs1-2 --replSet rs1

    $mongo --port 27017 

    >rsconf = {            _id: "rs1",            members: [ {_id: 0, host: "<hostname>:37017"                       }                     ]          }

     >rs.initiate( rsconf )

    >rs.add("<hostname>:37018")     >rs.add("<hostname>:37019")

   3.啟動三個配置服務節點Configsvr

從命令行分別執行如下命令,配置三個Configsvr

 mongod.exe --configsvr  --dbpath d:/data/configsvr/r0 --port 40000 --shardsvr

 mongod.exe --configsvr  --dbpath d:/data/configsvr/r0 --port 40001 --shardsvr

 mongod.exe --configsvr  --dbpath d:/data/configsvr/r0 --port 40002 --shardsvr

 4.啟動兩個路由節點mongos

 mongos.exe --configdb 127.0.0.1:40000,127.0.0.1:40001,127.0.0.1:40002 --port 50000

mongos.exe --configdb  127.0.0.1:40000,127.0.0.1:40001,127.0.0.1:40002 --port 60000

5.配置分片

call mongo.exe 127.0.0.1:50000
MongoDB shell version: 1.8.0
connecting to: 127.0.0.1:50000

> use admin
switched to db admin
> db.runCommand({addshard:"rs0/127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019",name:"ShardSetA"})
{ "shardAdded" : "ShardSetA", "ok" : 1 }
> db.runCommand({addshard:"rs1/127.0.0.1:37017,127.0.0.1:37018,127.0.0.1:37019",name:"ShardSetB"})
{ "shardAdded" : "ShardSetB", "ok" : 1 }

集群到此已配置完成。

你可以通過客戶端使用這個集群了這里只列出Java客戶端代碼:

 MongoClient mongoClient = new MongoClient(Arrays.asList(
   new ServerAddress("localhost", 50000),
   new ServerAddress("localhost", 60000)));

這里你會發現用的是兩個mongos路由服務器的端口

在用這個集群之前,你要對你打算Sharding的數據庫進行enable一下。

用客戶端連接Mongos

Mongo --port 50000

>sh.enableSharding("database name")

或者

>db.runCommand( { enableSharding: <database> } )

這樣即可。

如果你想對一個大的collection進行sharding可以執行如下命令

sh.shardCollection("people.addresses", { "state": 1, "_id": 1 } )

一切OK可以使用了,不過我拷貝的倉促,有的地方如果有漏copy的地方,大家不要罵我,可以在線問我,也可以加我QQ一齊探討。

   b.FAQ:

   c.工作機制:

   工作機制,客戶端代碼,通過mongodb的driver連接mongos(一個connection(一般是源於driver提供的一個連接池)選一個mongos服務)mongos只是一個路由服務器,相當於訪問代理

  當一個操作到達mongos時,mongos會根據config server上的信息,把操作轉發給對應的mongod服務器,為了提高效率,mongos配置完成后,mongo configservers上的信息已緩存在mongs

 服務器上,所以你此時關掉mongo config server也暫時影響不大,除非集群進行了balance 操作,或者有新的trunck變化。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM