Mongo集群部署(Replica Sets+Sharding)


一、環境

MongoDB Sharding Cluster 包含三種角色:

Shard Server: mongod 實例,用于存儲實際的數據塊,數據層

Config Server: mongod 實例,存儲了整個 Cluster Metadata,其中包括 chunk 信息,配置層

Route Server: mongos 實例,前端路由,客戶端由此接入,且讓整個集群看上去像單一進程  

 數據庫,路由層。

 

 

10.14.2.201

10.14.2.202

10.14.2.203

10.14.2.204

Shard1

Shard2

Shard3

Shard1

Shard2

Shard1

Shard2

Shard3

Shard3

Shard3

Shard1

Shard2

 

1.節點:

S1: 10.14.2.201, 10.14.2.202, 10.14.2.203, 10.14.2.204 (arbiter)
S2: 10.14.2.201, 10.14.2.202, 10.14.2.203 (arbiter), 10.14.2.204S3: 10.14.2.201, 10.14.2.202(arbiter), 10.14.2.203, 10.14.2.204

 

主機

端口信息

10.14.2.201

mongod shard1:27017

mongod shard2:27018

mongod shard3:27019

mongod config:30000

mongs:40000

10.14.2.202

mongod shard1:27017

mongod shard2:27018

mongod shard3:27019

mongod config:30000

mongs:40000

10.14.2.203

mongod shard1:27017

mongod shard2:27018

mongod shard3:27019

mongod config:30000

mongs:40000

10.14.2.204

mongod shard1:27017

mongod shard2:27018

mongod shard3:27019

mongod config:30000

mongs:40000

 


二、安裝部署

在所有機器上運行

1、下載mongodb程序

    mongodb-linux-x86_64-2.4.4.tgz

2、解壓mongodb-linux-x86_64-2.4.4.tgz/export/ 目錄下

  tar -xvf mongodb-linux-x86_64-2.4.4.tgz  -C  /usr/local/

3、建立軟連接

   cd /usr/local/

   ln -s mongodb-linux-x86_64-2.4.4  mongodb

 

4、配置環境變量  vim /etc/profile  添加 

#mongodb

export PATH=/usr/local/mongodb/bin:$PATH

source /etc/profile

 

5、創建目錄

mkdir -p /export/mongodb/data/shard1

mkdir -p /export/mongodb/data/shard2

mkdir -p /export/mongodb/data/shard3

mkdir -p /export/mongodb/data/config

mkdir -p /export/mongodb/logs/shard1

mkdir -p /export/mongodb/logs/shard2

mkdir -p /export/mongodb/logs/shard3

mkdir -p /export/mongodb/logs/config

mkdir -p /export/mongodb/logs/mongos

 

6、在10.14.2.201(任意一台都可以)生成keyfile文件

openssl rand -base64 753 > /export/mongodb/keyfile

 

7、把keyfile文件傳輸到其他機器上

scp /export/mongodb/keyfile 10.14.2.202:/export/mongodb/

scp /export/mongodb/keyfile 10.14.2.203:/export/mongodb/

scp /export/mongodb/keyfile 10.14.2.204:/export/mongodb/

 

8、在每台機器上執行修改keyfile權限

chmod 600 /export/mongodb/keyfile

 

配置Replica Sets,Config Server

 

9、在每台機器上執行

/usr/local/mongodb/bin/mongod --fork --shardsvr  --port 27017 --dbpath /export/mongodb/data/shard1/ --logpath /export/mongodb/logs/shard1/log.log --logappend --replSet s1 --auth --rest  --keyFile    /export/mongodb/keyfile

/usr/local/mongodb/bin/mongod --fork --shardsvr  --port 27018 --dbpath /export/mongodb/data/shard2/ --logpath /export/mongodb/logs/shard2/log.log --logappend --replSet s2 --auth  --rest   --keyFile   /export/mongodb/keyfile

/usr/local/mongodb/bin/mongod --fork --shardsvr  --port 27019 --dbpath /export/mongodb/data/shard3/ --logpath /export/mongodb/logs/shard3/log.log --logappend --replSet s3 --auth  --rest   --keyFile    /export/mongodb/keyfile

/usr/local/mongodb/bin/mongod --fork --configsvr --port 30000 --dbpath /export/mongodb/data/config/ --logpath /export/mongodb/logs/config/log.log --logappend --auth --rest   --keyFile    /export/mongodb/keyfile

 

 10、10.14.2.201上執行

 

1)查看mongod的進程是否啓動

ps aux | grep mongodb | grep -v grep

 
2)初始化replica sets

/usr/local/mongodb/bin/mongo --port 27017

  config = {_id: 's1', members: [
        {_id: 0, host: '10.14.2.201:27017'},
        {_id: 1, host: '10.14.2.202:27017'},

        {_id: 2, host: '10.14.2.203:27017'},
        {_id: 3, host: '10.14.2.204:27017', arbiterOnly: true}
    ]}

    rs.initiate(config)
    rs.status()

11、10.14.2.202上執行

 

1)查看mongod的進程是否啓動

ps aux | grep mongodb | grep -v grep

 

2)初始化replica sets

/usr/local/mongodb/bin/mongo --port  27018

  config = {_id: 's2', members: [
        {_id: 0, host: '10.14.2.201:27018'},
        {_id: 1, host: '10.14.2.202:27018'},

        {_id: 2, host: '10.14.2.203:27018', arbiterOnly: true },
        {_id: 3, host: '10.14.2.204:27018' }
    ]}
   rs.initiate(config)
   rs.status()

 

12、10.14.2.203上執行 

1)查看mongod的進程是否啓動

ps aux | grep mongodb | grep -v grep

 

2)初始化replica sets

/usr/local/mongodb/bin/mongo --port 27019

   config = {_id: 's3', members: [
        {_id: 0, host: '10.14.2.201:27019'},
        {_id: 1, host: '10.14.2.202:27019', arbiterOnly: true },

        {_id: 2, host: '10.14.2.203:27019' },
        {_id: 3, host: '10.14.2.204:27019' }
    ]}
   rs.initiate(config)
    rs.status()

 

 

配置Mongos(在每一台機子上建立路由)

13、在每台機器上執行

/usr/local/mongodb/bin/mongos --fork --port 40000 --logpath  /export/mongodb/logs/mongos/log.log  --configdb 10.14.2.201:30000,10.14.2.202:30000,10.14.2.203:30000   --keyFile    /export/mongodb/keyfile

 

添加分片

1連接任意一台,其他無需這樣操作:

/usr/local/mongodb/bin/mongo --port 40000

use admin

db.runCommand({addshard:'s1/10.14.2.201:27017,10.14.2.202:27017,10.14.2.203:27017'})

db.runCommand({addshard:'s2/10.14.2.201:27018,10.14.2.202:27018,10.14.2.203:27018' })

db.runCommand({addshard:'s3/10.14.2.201:27019,10.14.2.203:27019,10.14.2.203:27019' })

 

db.runCommand({ listshards:1 })

通過執行以下命令,可以讓數據庫跨shard,如果不執行這步,數據庫只會存放在一個shard,一旦激活數據庫分片,數據庫中不同的collection將被存放在不同的shard上,但一個collection仍舊存放在同一個shard上,要使單個collection也分片,還需單獨對collection作些操作

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

要使單個collection也分片存儲,需要給collection指定一個分片key,通過以下命令操作

db.runCommand( { shardcollection : "test.c1",key : {id: 1},unique : true } )

 

創建測試數據

use test

 for(var i=1;i<=200003;i++)  db.c1.save({id:i,value1:"1234567890",value2:"1234567890",value3:"1234567890",value4:"1234567890"});


> db.c1.stats()  \\查看數據已經分到了s1s2s3

{

      "sharded" : true,

      "ns" : "test.c1",

      "count" : 200003,

      "numExtents" : 14,

      "size" : 25600384,

      "storageSize" : 40599552,

      "totalIndexSize" : 12182240,

      "indexSizes" : {

            "_id_" : 6540800,

            "id_1" : 5641440

      },

      "avgObjSize" : 128,

      "nindexes" : 2,

      "nchunks" : 4,

      "shards" : {

            "s1" : {

                  "ns" : "test.c1",

                  "count" : 194287,

                  "size" : 24868736,

                  "avgObjSize" : 128,

                  "storageSize" : 37797888,

                  "numExtents" : 8,

                  "nindexes" : 2,

                  "lastExtentSize" : 15290368,

                  "paddingFactor" : 1,

                  "systemFlags" : 1,

                  "userFlags" : 0,

                  "totalIndexSize" : 11781616,

                  "indexSizes" : {

                       "_id_" : 6328224,

                       "id_1" : 5453392

                  },

                  "ok" : 1

            },

            "s2" : {

                  "ns" : "test.c1",

                  "count" : 0,

                  "size" : 0,

                  "storageSize" : 8192,

                  "numExtents" : 1,

                  "nindexes" : 2,

                  "lastExtentSize" : 8192,

                  "paddingFactor" : 1,

                  "systemFlags" : 1,

                  "userFlags" : 0,

                  "totalIndexSize" : 16352,

                  "indexSizes" : {

                       "_id_" : 8176,

                       "id_1" : 8176

                  },

                  "ok" : 1

            },

            "s3" : {

                  "ns" : "test.c1",

                  "count" : 5716,

                  "size" : 731648,

                  "avgObjSize" : 128,

                  "storageSize" : 2793472,

                  "numExtents" : 5,

                  "nindexes" : 2,

                  "lastExtentSize" : 2097152,

                  "paddingFactor" : 1,

                  "systemFlags" : 1,

                  "userFlags" : 0,

                  "totalIndexSize" : 384272,

                  "indexSizes" : {

                       "_id_" : 204400,

                       "id_1" : 179872

                  },

                  "ok" : 1

            }

      },

      "ok" : 1

}

 

 

更多相關文章
  • 參考資料 reference:  http://mongodb.blog.51cto.com/1071559/740131  http://docs.mongodb.org/manual/tutorial/deploy-shard-cluster/#sharding-setup-shard-coll ...
  • MongoDB管理與開發精要紅丸出品21.4.3 管理維護Replica Sets之增減節點
    21.4.3增減節點MongoDB Replica Sets不僅提供高可用性的解決方案,它也同時提供負載均衡的解決方案,增減Replica Sets節點在實際應用中非常普遍,例如當應用的讀壓力暴增時,3台節點的環境已不能滿足需求,那麽就需要增加一些節點將壓力平均分配一下:當應用的壓力小時,可以減少一 ...
  • 原文地址:http://blog.nosqlfan.com/html/1750.htmlMongoDB 的replication機制除了最普通的Master/Slave模式之外,更強大的就是其支持自動故障轉移的Replica Sets模式了.相對于其問題多多的auto-sharding機制,Repl ...
  • MongoDB管理與開發精要紅丸出品21.4.1 管理維護Replica Sets之讀寫分離
    21.4管理維護Replica Sets21.4.1讀寫分離有一些第三方的工具,提供了一些可以讓數據庫進行讀寫分離的工具.我們現在是否有一個疑問,從庫要是能進行查詢就更好了,這樣可以分擔主庫的大量的查詢請求. 1.  先向主庫中插入一條測試數據[[email protected] bin]# ./mong ...
  • 這周一直在學習怎麽配置mongodb replica sets,技術這玩意兒全靠自學.在這之前買了mongodb 市面上唯一的書籍<mongodb 權威指南>,中文,作爲入門還行.最初按照這本書配置replica sets ,發現很坑爹,按照書上寫的去配置絕對配置不出來,心裏和嘴上都在罵 ...
  • MongoDB管理與開發精要紅丸出品21.4.2 管理維護Replica Sets之故障轉移
    21.4.2故障轉移複制集比傳統的Master-Slave有改進的地方就是他可以進行故障的自動轉移,如果我們停掉複制集中的一個成員,那麽剩余成員會再自動選舉出一個成員,做爲主庫,例如:我們將28010這個主庫停掉,然後再看一下複制集的狀態 1.殺掉28010端口的MongoDB[[email protected] ...
  • 搭建Mongo Cluster( Sharding + replica set )===========================================================原理: sharding是可以淩駕也replica set之上的, 由下面的命令支持sh.addSh ...
  • mongo副本集配置部署副本集:    1主2從2仲裁mongo安裝包:http://www.mongodb.org/downloads機器:    采用5台機器,host0,host1,host2,host3,host4角色分布:    1主:host0:8111    2從:host1:8111 ...
一周排行