mongodb replica set + shard 安裝

概覽 - 機器

三臺mongo數據節點機器(默認端口27107,這裏一臺機器存了多份,故新起端口):mongodb

10.13.2.51:10001/10002/10003shell

10.13.2.52:10001/10002/10003數據庫

10.13.2.151:10001/10002/10003架構

一臺mongos機器:app

10.13.2.112:27107spa

三臺config機器:code

10.13.2.91:27109orm

10.13.2.92:27109部署

10.13.2.102:27109it


架構:

數據分散在3臺機器上,既有3個shard,而每一個shard又有複製集(簡單理解,主備)的配置,便是下面這樣

shard1/10.13.2.151:10001,10.13.2.51:10001,10.13.2.52:10001

shard2/10.13.2.151:10002,10.13.2.51:10002,10.13.2.52:10002

shard3/10.13.2.151:10003,10.13.2.51:10003,10.13.2.52:10003


前提工做:

useradd mongodb # 建議用mongodb用戶
echo never > /sys/kernel/mm/transparent_hugepage/enabled  #mongodb建議爲never
echo never > /sys/kernel/mm/transparent_hugepage/defrag   #mongodb建議爲never
關閉防火牆

 

建立第一個replica set

1. 三臺數據節點 分別執行

1. mkdir log db db/shard1 db/shard2 db/shard3 # 建立必要的文件夾
2. bin/mongod --dbpath /home/data/mongodb/db/shard1 --port 10001 --replSet shard1 --logpath log/mongodb1.log --logappend --fork # 後臺啓動mongodb服務

2.鏈接到mongo配置replica set

1. bin/mongo 10.13.2.151:10001
2. config = {_id:"shard1", members: [  
    {_id: 0, host:"10.13.2.151:10001"},  
    {_id: 1, host:"10.13.2.51:10001"},
    {_id: 2, host:"10.13.2.52:10001"}  
    ]  
}; 
3. rs.initiate(config)


config機器部署

1. 三臺config機器上分別執行

1. mkdir log configdb
2. bin/mongod --configsvr --dbpath /home/data/mongodb/configdb --logpath log/mongodb.log --logappend --fork


mongos機器部署

1. mongos機器上執行

1. mkdir log
2. bin/mongos --configdb 10.13.2.91:27019,10.13.2.92:27019,10.13.2.102:27019 --logpath log/mongodb.log --logappend --fork


往集羣添加第一個shard

1. 鏈接mongos,加入shard1

1. bin/mongo 10.13.2.112:27017/admin
2. sh.addShard( "shard1/10.13.2.151:10001,10.13.2.51:10001,10.13.2.52:10001" )


添加第二個shard

首先建立shard2,同上「建立第一個replica set」

1. 三臺數據節點 分別執行

1. bin/mongod --dbpath /home/data/mongodb/db/shard2 --port 10002 --replSet shard2 --logpath log/mongodb2.log --logappend --fork # 後臺啓動mongodb服務

2.鏈接到mongo配置replica set

1. bin/mongo 10.13.2.151:10002
2. config = {_id:"shard2", members: [  
    {_id: 0, host:"10.13.2.151:10002"},  
    {_id: 1, host:"10.13.2.51:10002"},
    {_id: 2, host:"10.13.2.52:10002"}  
    ]  
}; 
3. rs.initiate(config)

建立完後添加shard2

1. bin/mongo 10.13.2.112:27017/admin
2. sh.addShard( "shard2/10.13.2.151:10002,10.13.2.51:10002,10.13.2.52:10002" )


添加第三個shard

首先建立shard3,同上「建立第一個replica set」

1. 三臺數據節點 分別執行

1. bin/mongod --dbpath /home/data/mongodb/db/shard3 --port 10003 --replSet shard3 --logpath log/mongodb3.log --logappend --fork # 後臺啓動mongodb服務

2.鏈接到mongo配置replica set

1. bin/mongo 10.13.2.151:10003
2. config = {_id:"shard3", members: [  
    {_id: 0, host:"10.13.2.151:10003"},  
    {_id: 1, host:"10.13.2.51:10003"},
    {_id: 2, host:"10.13.2.52:10003"}  
    ]  
}; 
3. rs.initiate(config)

建立完後添加shard3

1. bin/mongo 10.13.2.112:27017/admin
2. sh.addShard( "shard3/10.13.2.151:10003,10.13.2.51:10003,10.13.2.52:10003" )


以上配置完了,但還須要開啓數據庫和表的分片

下面以test爲例

1. 鏈接mongos

bin/mongo 10.13.2.112:27017/admin

2.  開啓數據庫分片

sh.enableSharding( "test" )

3. 建立片鍵 - (此處片鍵很重要,關於數據如何分片,通常都是取自己_id做爲片鍵,業務相關根據業務本身組合片鍵)

1. use test
2. db.test_collection.createIndex( { number : 1 } ) # 這裏以test_collection表裏的number爲片鍵

4. 開啓數據庫下面的表分片

1. use test
2. sh.shardCollection( "test.test_collection", { "number" : 1 } )

5. 查看分片狀態,數據平衡的狀況

1. use test
2. db.stats()
3. db.printShardingStatus()


over!

相關文章
相關標籤/搜索