MongoDB (1)—複製集與sharding安裝配置

來源:互聯網
上載者:User

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變化。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.