天天看點

Centos6.5搭建mongodb分片

<a href="http://s3.51cto.com/wyfs02/M00/83/AC/wKiom1d6HOfBBGeLAADc-QiO8To656.png"></a>

<a href="https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.7.tgz">https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.7.tgz</a>

是我使用的版本

1、準備3個執行個體:

10.0.0.13

10.0.0.18

10.0.0.19

2、規劃5個元件對應的端口号,由于一個機器需要同時部署 mongos、config server 、shard1、shard2、shard3,是以需要用端口進行區分。

這個端口可以自由定義,在本文 mongos為 3717, config server 為 3710, shard1為 3711 , shard2為3712, shard3為3713

3、在每一台伺服器分别啟動配置伺服器。

/opt/mongodb-cluster/bin/mongod --configsvr --dbpath /opt/mongodb-cluster/config/data --port 3710 --logpath /opt/mongodb-cluster/config/var/config.log --fork

4、在每一台伺服器分别啟動mongos伺服器。

/opt/mongodb-cluster/bin/mongos  --configdb 10.0.0.13:3710,10.0.0.18:3710,10.0.0.19:3710  --port 3717 --logpath  /opt/mongodb-cluster/mongos/var/mongos.log --fork

5、配置各個分片的副本集。

#在每個機器裡分别設定分片1伺服器及副本集shard1

/opt/mongodb-cluster/bin/mongod --shardsvr --replSet shard1 --port 3711 --dbpath /opt/mongodb-cluster/shard1/data  --logpath /opt/mongodb-cluster/shard1/var/shard1.log --fork

#在每個機器裡分别設定分片2伺服器及副本集shard2

/opt/mongodb-cluster/bin/mongod --shardsvr --replSet shard2 --port 3712 --dbpath /opt/mongodb-cluster/shard2/data  --logpath /opt/mongodb-cluster/shard2/var/shard2.log --fork

#在每個機器裡分别設定分片3伺服器及副本集shard3

/opt/mongodb-cluster/bin/mongod --shardsvr --replSet shard3 --port 3713 --dbpath /opt/mongodb-cluster/shard3/data  --logpath /opt/mongodb-cluster/shard3/var/shard3.log --fork

#設定第一個分片副本集

/opt/mongodb-cluster/bin/mongo  127.0.0.1:3711

#使用admin資料庫

use admin

#定義副本集配置

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

                     {_id:0,host:"10.0.0.13:3711"},

                     {_id:1,host:"10.0.0.18:3711"},

                     {_id:2,host:"10.0.0.19:3711",arbiterOnly:true }

                ]

         }

#初始化副本集配置

rs.initiate(config);

#設定第二個分片副本集

/opt/mongodb-cluster/bin/mongo  127.0.0.1:3712

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

                     {_id:0,host:"10.0.0.13:3712",arbiterOnly:true },

                     {_id:1,host:"10.0.0.18:3712"},

                     {_id:2,host:"10.0.0.19:3712"}

#設定第三個分片副本集

/opt/mongodb-cluster/bin/mongo    127.0.0.1:3713

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

                     {_id:0,host:"10.0.0.13:3713"},

                     {_id:1,host:"10.0.0.18:3713",arbiterOnly:true },

                     {_id:2,host:"10.0.0.19:3713"}

6、目前搭建了mongodb配置伺服器、路由伺服器,各個分片伺服器,不過應用程式連接配接到 mongos 路由伺服器并不能使用分片機制,還需要在程式裡設定分片配置,讓分片生效。

#連接配接到mongos

/opt/mongodb-cluster/bin/mongo  127.0.0.1:3717

user  admin

#串聯路由伺服器與配置設定副本集1

db.runCommand( { addshard : "shard1/10.0.0.13:3711,10.0.0.18:3711,10.0.0.19:3711"});

如裡shard是單台伺服器,用 db.runCommand( { addshard : “[: ]” } )這樣的指令加入,如果shard是副本集,用db.runCommand( { addshard : “replicaSetName/[:port][,serverhostname2[:port],…]” });這樣的格式表示 。

#串聯路由伺服器與配置設定副本集2

db.runCommand( { addshard : "shard2/10.0.0.13:3712,10.0.0.18:3712,10.0.0.19:3712"});

#串聯路由伺服器與配置設定副本集3

db.runCommand( { addshard : "shard3/10.0.0.13:3713,10.0.0.18:3713,10.0.0.19:3713"});

#檢視分片伺服器的配置

db.runCommand( { listshards : 1 } );

7、目前配置服務、路由服務、分片服務、副本集服務都已經串聯起來了,但我們的目的是希望插入資料,資料能夠自動分片,就差那麼一點點,一點點。。。連接配接在mongos上,準備讓指定的資料庫、指定的集合分片生效。

#指定testdb分片生效

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

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

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

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

8、測試分片配置結果。

#連接配接mongos伺服器

#使用testdb

use  testdb;

#插入測試資料

for (var i = 1; i &lt;= 100000; i++)

db.table1.save({id:i,"test1":"testval1"});

#檢視分片情況如下,部分無關資訊省掉了

db.table1.stats();

下面是我自己為了友善,寫的啟動管理腳本,附在後面。

[root@tsm-pro1 sbin]# ll 

total 28 

drwxr-xr-x 2 root   root   4096 Jul  4 15:35 bak 

-rwxrwxr-x 1 mongod mongod 3945 May 20 18:51 config 

-rwxrwxr-x 1 mongod mongod 3945 May 20 18:51 mongos 

-rwxrwxr-x 1 mongod mongod 1181 May 20 19:04 node_mongo 

-rwxrwxr-x 1 mongod mongod 3945 May 20 18:51 shard1 

-rwxrwxr-x 1 mongod mongod 3945 May 20 18:51 shard2 

-rwxrwxr-x 1 mongod mongod 3945 May 20 18:51 shard3 

[root@tsm-pro1 sbin]# pwd 

/opt/mongodb-cluster/sbin 

[root@tsm-pro1 sbin]#

本文轉自 ygqygq2 51CTO部落格,原文連結:http://blog.51cto.com/ygqygq2/1795657,如需轉載請自行聯系原作者