mongodb分區部署

來源:互聯網
上載者:User

1、mongodb分區科普 (各種羅嗦) 

Replica Set(複本集):

複本集使其組內的每個成員(member)在不同的mongod執行個體中具有相同的資料備份,這樣可以將來自應用伺服器的請求訪問(request visit)得以均勻的分布在Replica Set的每一個成員所在的mongod執行個體上,用以減緩單台mongod伺服器在請求負載上的壓力。在一定時限內Replica Set能完成其組內成員資料的最終一致,這種備份機制是自動且對使用者透明的。

Mongodb使用緩衝來大量命中讀請求來達到提高輸送量的目的,這樣使得在某些極端的情況下(比如單機房部署環境下機房斷電)仍不能保證資料完整可靠的儲存下來。會丟失最近幾十秒內最新寫入的資料。

   

Sharding(切分規則):

在單mongod執行個體中的資料負載過大時,可以考慮將執行個體中的資料按一定的規則將資料部署到不同mongod執行個體中。同樣在此切分規則之下,對資料的訪問請求也將按此規則分發到不同的mongod執行個體中,解決單機資料量過大時查詢效能下降的問題。

當然,系統要求資料庫在切分規則下也有較高的可用性,保證資料在經過切分後也會有多份拷貝放置在不同的伺服器中。使得相同資料的mongod執行個體形成分區組(shards group),既Replica Set。這樣使得mongodb叢集允許不多的伺服器故障後仍然保有完整的資料。

   

Config Server(設定管理員):

Config Server儲存分區叢集的的中繼資料,其中包括在每個mongod執行個體的基本資料和塊資訊。每個設定管理員所有塊的中繼資料的副本。通過兩次提交來確保在設定管理員資訊與塊資料的一致性。

   

Routing Processor(mongos路由進程)

mongos 可以被看作是一個資料和請求分發的中心,使單一的mongod執行個體組成互相關聯的叢集。當接收用戶端請求, mongos根據Config Server路由到相應的mongod執行個體(可能是一組mongod),處理並返回結果。mongos 進程沒有持久狀態,在mongos啟動時和設定管理員建立串連並擷取狀態,當設定管理員發生任何變化時,會將之傳播到每個mongos 進程。

   

(領導讓寫個方案,就照著別人的畫了個圖,純屬剽竊,如有雷同,不會是巧合! )

   

2、啟動三台機器的mongod執行個體

根據Replica Set、Sharding策略部署mongod。將兩個sharding組部署到三台伺服器上,每個sharding組有三個replica set成員。

   

#Server1:
mkdir -p /data2/mongodb/shard11
mkdir -p /data2/mongodb/shard21
/mongodb/bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath /data2/mongodb/shard11 --oplogSize 100 --logpath /data2/mongodb/shard11.log --logappend --fork --rest
/mongodb/bin/mongod --shardsvr --replSet shard2 --port 27018 --dbpath /data2/mongodb/shard21 --oplogSize 100 --logpath /data2/mongodb/shard21.log --logappend --fork –rest

   

#Server2:
mkdir -p /data2/mongodb/shard12/
mkdir -p /data2/mongodb/shard22/
/mongodb/bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath /data2/mongodb/shard12 --oplogSize 100 --logpath /data2/mongodb/shard12.log --logappend --fork --rest
/mongodb/bin/mongod --shardsvr --replSet shard2 --port 27018 --dbpath /data2/mongodb/shard22 --oplogSize 100 --logpath /data2/mongodb/shard22.log --logappend --fork –rest

   

#Server3:
mkdir -p /data2/mongodb/shard13/
mkdir -p /data2/mongodb/shard23/
/mongodb/bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath /data2/mongodb/shard13 --oplogSize 100 --logpath /data2/mongodb/shard13.log --logappend --fork --rest
/mongodb/bin/mongod --shardsvr --replSet shard2 --port 27018 --dbpath /data2/mongodb/shard23 --oplogSize 100 --logpath /data2/mongodb/shard23.log --logappend --fork –rest

   

3、初始化Replica Set

通過命令列初始化兩組Replica Set,通過mongo串連到一個mongod

/mongodb/bin/mongo 172.17.0.121:27017

config = {_id: ‘shard1′, members: [
                          {_id: 0, host: '172.17.0.121:27017'},
                          {_id: 1, host: '172.17.0.122:27017'},
                          {_id: 2, host: '172.17.0.123:27017'}]};

rs.initiate(config);

/mongodb/bin/mongo 172.17.0.121:27018

config = {_id: ‘shard2′, members: [
                          {_id: 0, host: '172.17.0.121:27018'},
                          {_id: 1, host: '172.17.0.122:27018'},
                          {_id: 2, host: '172.17.0.123:27018'}]};

rs.initiate(config);

   

4、啟動並配置三台Config Server

#Server1、2、3:
mkdir -p /data2/mongodb/config/
/mongodb/bin/mongod --configsvr --dbpath /data2/mongodb/config/ --port 20000 --logpath /data2/mongodb/config1.log --logappend –fork

        

5、部署並配置三台Routing Server

指定所有的config sever地址參數,chunkSize是分割資料時每塊(Chunk)的單位大小

#Server1、2、3:

/mongodb/bin/mongos --configdb 172.17.0.121:20000, 172.17.0.122:20000, 172.17.0.123:20000 --port 30000 --chunkSize 100 --logpath /data2/mongodb/mongos.log --logappend –fork

   

6、命令列添加分區

串連到mongs伺服器,並切換到admin

/mongodb/bin/mongo 172.17.0.121:30000/admin

db.runCommand( {

    addshard : “shard1/172.17.0.121:27017, 172.17.0.122:27017, 172.17.0.123:27017”,

    name:”shard1”,

    maxsize:20480,

    allowLocal:true } );

db.runCommand( {

    addshard : “shard2/172.17.0.121:27018, 172.17.0.122:27018, 172.17.0.123:27018”,

    name:”shard2”,

    maxsize:20480

    allowLocal:true} );

db.runCommand( { listshards : 1 } );

如果列出(sharding)了以上二個你加的shards,表示shards已經配置成功

    

7、啟用資料庫的分區

DB分區, 使DB下所有Collection實現資料的橫向切分

db.runCommand( { enablesharding : “test” } );

查看Sharding狀態

use admin;

db.printShardingStatus();

Collection分區,  使單個Collection實現資料的橫向切分

要使單個Collection分區儲存,需要給Collection指定一個分區key。

a. 分區的collection系統會自動建立一個索引(也可使用者提前建立好)

b. 分區的collection只能有一個在分區key上的唯一索引,其它唯一索引不被允許

db.runCommand( { shardcollection : “test.c1″,key : {id: 1} };

可以通過db.c1.stats()來查看分區狀態。

   

final、生產環境建議使用設定檔來啟動mongod

例: /mongodb/bin/mongod --config /data2/mongodb/shard1/shard1.properties --rest

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.