mongodb分區配置

來源:互聯網
上載者:User

標籤:mongodb 分區部署


#本次配置時間為 2014-11-06 軟體版本為:mongodb-linux-x86_64-2.4.3.tgz   

linux :centos 5.9 64bit

##############################################################

本次部署分區的方式,只為測試環境:                          #

              10.8.10.234    10.8.10.235    10.8.10.236     #

shard1 分區       master        slaver       arbiterOnly    #

shard2 分區       master        slaver       arbiterOnly    #

shard3 分區       master        slaver       arbiterOnly    #

                                                            #                                                            

###############################################################





#每個伺服器配置:


mkdir  -p /data/mongodb/config/data

mkdir  -p /data/mongodb/config/log


mkdir  -p /data/mongodb/mongos/log


mkdir  -p /data/mongodb/shard1/data

mkdir  -p /data/mongodb/shard1/log


mkdir  -p /data/mongodb/shard2/data

mkdir  -p /data/mongodb/shard2/log


mkdir  -p /data/mongodb/shard3/data

mkdir  -p /data/mongodb/shard3/log


tar -xvzf mongodb-linux-x86_64-2.4.3.tgz

mv mongodb-linux-x86_64-2.4.3  /data/mongodb/mongodb


#每個伺服器佈建服務:


 /data/mongodb/mongodb/bin/mongod --configsvr --dbpath /data/mongodb/config/data --port 21000 --logpath /data/mongodb/config/log/config.log --fork



#每台伺服器 啟動分區服務:

/data/mongodb/mongodb/bin/mongod --shardsvr --replSet shard1 --port 22001 --dbpath /data/mongodb/shard1/data --logpath /data/mongodb/shard1/log/shard1.log --fork --nojournal --oplogSize 10



/data/mongodb/mongodb/bin/mongod --shardsvr --replSet shard2 --port 22002 --dbpath /data/mongodb/shard2/data --logpath /data/mongodb/shard2/log/shard2.log --fork --nojournal --oplogSize 10



/data/mongodb/mongodb/bin/mongod --shardsvr --replSet shard3 --port 22003 --dbpath /data/mongodb/shard3/data --logpath /data/mongodb/shard3/log/shard3.log --fork --nojournal --oplogSize 10


# 1台或者多台伺服器啟動mongos路由,應用程式串連該路由連接埠。

#mongos 需要等到3台伺服器的設定檔都啟動之後 才能啟動,否則報錯。

/data/mongodb/mongodb/bin/mongos --configdb 10.8.10.234:21000,10.8.10.235:21000,10.8.10.236:21000 --port 20000 --logpath /data/mongodb/mongos/log/mongos.log --fork



#################################

#登入任意伺服器執行:


mongo 127.0.0.1:22001 

use admin


設定分區1 


>config = { _id:"shard1", members:[

  {_id:0,host:"10.8.10.234:22001",priority:1},

  {_id:1,host:"10.8.10.235:22001",priority:1},

  {_id:2,host:"10.8.10.236:22001",arbiterOnly:true}

  ]

  }


>rs.initiate(config);


# ,priority:N 是設定master 優先順序 可以不配置,建議把分區的master放置在不同的伺服器,實現讀寫壓力分流

# arbiterOnly:true 需要配置。省略後,變成1 master + 2個slaver 與方案不符


############################


mongo 127.0.0.1:22002 

use admin


設定分區2 

>config = { _id:"shard2", members:[

  {_id:0,host:"10.8.10.234:22002",priority:1},

  {_id:1,host:"10.8.10.235:22002",priority:1},

  {_id:2,host:"10.8.10.236:22002",arbiterOnly:true}

  ]

  }


>rs.initiate(config);


# ,priority:N 是設定master 優先順序 可以不配置。建議把分區的master放置在不同的伺服器,實現讀寫壓力分流

# arbiterOnly:true 需要配置 。省略後,變成1master + 2個slaver 與方案不符


#############################


mongo 127.0.0.1:22003 

use admin

設定分區3


 

>config = { _id:"shard3", members:[

  {_id:0,host:"10.8.10.234:22003",priority:1},

  {_id:1,host:"10.8.10.235:22003",priority:1},

  {_id:2,host:"10.8.10.236:22003",arbiterOnly:true}

  ]

  }



>rs.initiate(config);


# ,priority:N 是設定master 優先順序 可以不配置。建議把分區的master放置在不同的伺服器,實現讀寫壓力分流

# arbiterOnly:true 需要配置。省略後,變成1master + 2個slaver 與方案不符


#########################


串連mongs:  bin/mongo 127.0.0.1:20000

#使用admin資料庫 user admin

串聯路由伺服器與分配複本集1


db.runCommand( { addshard : "shard1/10.8.10.234:22001,10.8.10.235:22001,10.8.10.236:22001"});


串聯路由伺服器與分配複本集2

db.runCommand( { addshard : "shard2/10.8.10.234:22002,10.8.10.235:22002,10.8.10.236:22002"});


串聯路由伺服器與分配複本集3

db.runCommand( { addshard : "shard3/10.8.10.234:22003,10.8.10.235:22003,10.8.10.236:22003"});



#查看分區伺服器的配置

 db.runCommand( { listshards : 1 } );


 備忘:每個分區複本集的仲裁節點結果不列出來

##############################


###手動選定master備忘:


在配置分區的時候 添加優先順序可以手動選擇master


分區配置後之後,使用如下命令,在分區的主節點登入,可以將members[1] 提升為Master。

rs.status();

rs.conf();

cfg=rs.conf();

cfg.members[0].priority=1

cfg.members[1].priority=2

#cfg.members[2] 仲裁機不用設定

rs.reconfig(cfg);



建立資料測試:

  #指定testdb分區生效

  db.runCommand( { enablesharding :"testdb"});

  #指定資料庫裡需要分區的集合和片鍵

  db.runCommand( { shardcollection : "testdb.table1",key : {id: 1} } )

  我們設定testdb的 table1 表需要分區,根據 id 自動分區到 shard1 ,shard2,shard3 上面去。要這樣設定是因為不是所有mongodb 的資料庫和表 都需要分區!


bin/mongo 127.0.0.1:20000

  #使用testdb use testdb;

    #插入測試資料

  for (var i = 1; i <= 100000; i++)  db.table1.save({id:i,"test1":"testval1"});


  #查看分區情況如下,部分無關資訊省掉了

  db.table1.stats();

 看到資料分到3個分區,各自分區數量為: shard1 “count” : 42183,shard2 “count”: 38937,shard3 “count” : 18880。已經成功了!不過分的好像不是很均勻,所以這個分區還是很有講究的,後續再深入討論。



為了充分利用3台伺服器資源,緩解磁碟Io ,以上方案可以如下變通:

##############################################################

在生產環境中,可以如下部署:                                #

              10.8.10.234    10.8.10.235    10.8.10.236     #

shard1 分區       master        slaver       arbiterOnly    #

shard2 分區      arbiterOnly    master        slaver        #

shard3 分區       slaver      arbiterOnly     master        #

                                                            #                                                            

###############################################################


本文出自 “笨鳥先飛” 部落格,請務必保留此出處http://2574526.blog.51cto.com/2564526/1573855

mongodb分區配置

聯繫我們

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