mongodb叢集shard_replica的搭建方法
官方文件
參考官方文件,大致步驟
第一步:建立Config Server例項,配置Config Server例項成Replica Set
第二步:建立Shard Server例項,配置Shard Server例項成Replica Set
第三步:建立Route Server例項,把Config Server例項和Shard Server例項配置進來
第四步:建立資料庫並執行db.printShardingStatus()命令驗證
涉及replSet、shardsvr、configsvr幾個引數
replSet:配置replica set,replica set中的所有主機必須具有相同的replica set名稱。
shardsvr:將此mongod例項配置為分片叢集中的分片。預設埠是27018。
configsvr:宣告此mongod例項作為分片叢集的配置伺服器。預設埠是27019,預設的dbpath目錄是/data/configdb,配置伺服器儲存叢集的後設資料和配置設定。從MongoDB 3.4開始,配置伺服器必須部署為一個replicate set副本集,為了防止這個配置服務是單點服務。如果你的叢集只有一個配置伺服器,一旦這個配置伺服器出現故障則叢集將不可用
涉及Config Server、Shard Server、Route Server幾個例項
1. Config Server: mongod例項,儲存了整個Cluster Metadata,其中包括Chunk資訊。
2. Shard Server: mongod例項,用於儲存實際的資料塊,實際生產環境中一個Shard Server角色可由幾臺機器組個一個Replica Set承擔,防止主機單點故障。
3. Route Server: mongos例項,前端路由,客戶端由此接入,且讓整個叢集看上去像單一資料庫,前端應用可以透明使用。
部署規劃
2臺物理裝置伺服器,ip分別為172.22.138.157、172.22.138.158
兩臺伺服器上分別建立埠是29001的Config Server例項,這兩臺伺服器上的Config Server例項組成Replica Set模式
兩臺伺服器上分別建立埠分別是28001、28002、28003的shard server例項,兩臺伺服器上相同埠的shard server例項組成Replica Set模式
兩臺伺服器上分別建立埠是27001的Route Server例項
部署架構
外部程式-->Route Server例項-->Config Server例項-->shard server例項
Route Server例項不是單點,兩臺伺服器上都有,配置都是一樣,都是指向一樣的Config Server例項
Config Server例項不是單點,是Replica Set模式
shard server例項不是單點,是Replica Set模式
第一步:
建立Config Server例項,配置Config Server例項成Replica Set
1.1、在兩臺伺服器上分別編輯如下檔案(兩個重點引數configsvr、replSet)
cat /mongodb/configsvr29001.conf
port=29001
dbpath=/mongodb/mongoconfig29001
logpath=/mongodb/log/mongoconfig29001.log
configsvr=true
replSet=config29001
fork=true
logappend=true
directoryperdb=true
bind_ip=0.0.0.0
pidfilepath=/mongodb/mongoconfig29001.pid
1.2、兩臺伺服器上分別啟動Config Server例項
mongod -f /mongodb/configsvr29001.conf
1.3、配置兩臺伺服器的Config Server例項成Replica Set
登入任意一臺伺服器執行如下操作即可
mongo --host 172.22.138.157 --port 29001
rs.initiate(
{
_id: "config29001",
configsvr: true,
members: [
{ _id : 0, host : "172.22.138.157:29001" },
{ _id : 1, host : "172.22.138.158:29001" }
]
}
)
第二步
建立Shard Server例項,配置Shard Server例項成Replica Set
2.1、在兩臺伺服器上分別編輯如下三個檔案(兩個重點引數shardsvr、replSet)
cat /mongodb/shardsvr28001.conf
port=28001
dbpath=/mongodb/mongoshard28001
logpath=/mongodb/log/mongoshard28001.log
shardsvr=true
replSet=shard28001
fork=true
logappend=true
directoryperdb=true
verbose=true
bind_ip=0.0.0.0
pidfilepath=/mongodb/mongoshard28001.pid
cat /mongodb/shardsvr28002.conf
port=28002
dbpath=/mongodb/mongoshard28002
logpath=/mongodb/log/mongoshard28002.log
shardsvr=true
replSet=shard28002
fork=true
logappend=true
directoryperdb=true
verbose=true
bind_ip=0.0.0.0
pidfilepath=/mongodb/mongoshard28002.pid
cat /mongodb/shardsvr28003.conf
port=28003
dbpath=/mongodb/mongoshard28003
logpath=/mongodb/log/mongoshard28003.log
shardsvr=true
replSet=shard28003
fork=true
logappend=true
directoryperdb=true
verbose=true
bind_ip=0.0.0.0
pidfilepath=/mongodb/mongoshard28003.pid
2.2、兩臺伺服器上分別啟動Shard Server例項
mongod -f /mongodb/shardsvr28001.conf
mongod -f /mongodb/shardsvr28002.conf
mongod -f /mongodb/shardsvr28003.conf
2.3、配置兩臺伺服器的3個Shard Server例項成Replica Set
登入任意一臺伺服器執行如下操作即可
mongo --host 172.22.138.157 --port 28001
rs.initiate(
{
_id: "shard28001",
members: [
{ _id : 0, host : "172.22.138.157:28001" },
{ _id : 1, host : "172.22.138.158:28001" }
]
}
)
mongo --host 172.22.138.157 --port 28002
rs.initiate(
{
_id: "shard28002",
members: [
{ _id : 0, host : "172.22.138.157:28002" },
{ _id : 1, host : "172.22.138.158:28002" }
]
}
)
mongo --host 172.22.138.157 --port 28003
rs.initiate(
{
_id: "shard28003",
members: [
{ _id : 0, host : "172.22.138.157:28003" },
{ _id : 1, host : "172.22.138.158:28003" }
]
}
)
第三步
建立Route Server例項
3.1、在兩臺伺服器上分別編輯如下檔案(重點引數configdb,把上面第一步的Config Server例項配置進來)
cat /mongodb/Routesvr27001.conf
port=27001
logpath=/mongodb/log/mongoRoute27001.log
configdb=config29001/172.22.138.157:29001,172.22.138.158:29001
fork=true
bind_ip=0.0.0.0
pidfilepath=/mongodb/mongoRoute27001.pid
3.2、兩臺伺服器上分別啟動Config Server例項
mongos -f /mongodb/Routesvr27001.conf
3.3、新增shard分片到叢集,把上面第二步的Shard Server例項配置進來
登入任意一臺伺服器執行如下操作即可
mongo --host 172.22.138.157 --port 27001
sh.addShard( "shard28001/172.22.138.157:28001,172.22.138.158:28001")
sh.addShard( "shard28002/172.22.138.157:28002,172.22.138.158:28002")
sh.addShard( "shard28003/172.22.138.157:28003,172.22.138.158:28003")
第四步
驗證
登入任意一臺mongos例項,建立四個資料庫
mongo --host 172.22.138.157 --port 27001
mongos> use TDB1
mongos> db.createCollection("test01")
mongos> db.test01.insert({hid:1,hname:"w001"})
mongos> use TDB2
mongos> db.createCollection("test02")
mongos> db.test02.insert({hid:11,hname:"x001"})
mongos> use TDB3
mongos> db.createCollection("test03")
mongos> db.test03.insert({hid:111,hname:"y001"})
mongos> use TDB4
mongos> db.createCollection("test04")
mongos> db.test04.insert({hid:1111,hname:"z001"})
連線任意一臺mongos例項,都可以看到這四個資料庫,執行db.printShardingStatus()看到四個資料庫被分到了不同的shard上了,TDB1分到了shard28001上,TDB2\TDB3分到了shard28002上,TDB4分到了shard28003上,登入mongod例項shard叢集分片28001埠只看到TDB1資料庫,登入mongod例項叢集分片28002埠只看到TDB2、TDB3資料庫,登入mongod例項叢集分片28003埠只看到TDB4資料庫,透過mongos,使用者看到所有資料庫,底下的shard server對使用者而言是可以不用瞭解的
mongo --host 172.22.138.158 --port 27001
mongos> show dbs
TDB1 0.000GB
TDB2 0.000GB
TDB3 0.000GB
TDB4 0.000GB
admin 0.000GB
config 0.001GB
mongos> db.printShardingStatus()
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("5d09cd1c38fe676e9fb94a92")
}
shards:
{ "_id" : "shard28001", "host" : "shard28001/172.22.138.157:28001,172.22.138.158:28001", "state" : 1 }
{ "_id" : "shard28002", "host" : "shard28002/172.22.138.157:28002,172.22.138.158:28002", "state" : 1 }
{ "_id" : "shard28003", "host" : "shard28003/172.22.138.157:28003,172.22.138.158:28003", "state" : 1 }
active mongoses:
"3.6.12" : 2
autosplit:
Currently enabled: yes
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
No recent migrations
databases:
{ "_id" : "TDB1", "primary" : "shard28001", "partitioned" : false }
{ "_id" : "TDB2", "primary" : "shard28002", "partitioned" : false }
{ "_id" : "TDB3", "primary" : "shard28002", "partitioned" : false }
{ "_id" : "TDB4", "primary" : "shard28003", "partitioned" : false }
{ "_id" : "config", "primary" : "config", "partitioned" : true }
config.system.sessions
shard key: { "_id" : 1 }
unique: false
balancing: true
chunks:
shard28001 1
{ "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : shard28001 Timestamp(1, 0)
mongo --host 172.22.138.157 --port 28001
shard28001:PRIMARY> show dbs
TDB1 0.000GB
admin 0.000GB
config 0.000GB
local 0.000GB
mongo --host 172.22.138.157 --port 28002
shard28002:PRIMARY> show dbs
TDB2 0.000GB
TDB3 0.000GB
admin 0.000GB
config 0.000GB
local 0.000GB
mongo --host 172.22.138.157 --port 28003
shard28003:PRIMARY> show dbs
TDB4 0.000GB
admin 0.000GB
config 0.000GB
local 0.000GB
第五步
如果想對某個資料庫裡面的表分片儲存,即A表一部分放入shared1,一部分放入shard2,就需要先使用sh.enableSharding("db_name")對這個資料庫啟用分片,資料庫啟用分片後,上面第四步驗證結果"partitioned" : false就變成了"partitioned" : true。如果該表已包含資料,則必須在使用shardCollection()對錶分片之前使用db.collection.createIndex()方法在分片鍵上建立索引。如果表為空,MongoDB將建立索引作為shardCollection()的一部分。
mongo --host 172.22.138.158 --port 27001
mongos> use testdb
mongos> db.createCollection("table1")
mongos> db.printShardingStatus() --此時testdb對應的資料庫"partitioned" : false
mongos> sh.enableSharding("testdb")
mongos> db.printShardingStatus() --此時testdb對應的資料庫"partitioned" : true
對錶testdb.table1按age欄位範圍分片(代號為1),指定雜湊分片鍵對空集合進行分片時最初要建立的塊數為5
mongos> sh.shardCollection("testdb.table1",{age:1},{numInitialChunks:5})
mongos> for (var i=0;i<150000;i++) db.table1.save({name:"u_"+i,age:0+i,sex:i%2,class:"number2",grade:"number3",birthd:"shanghai",motk:"shanghai",controyload:"chian",birthn:3030303030303030303,horbity:"footboll"})
對錶testdb.table2按age欄位範圍分片(代號為1),指定雜湊分片鍵對空集合進行分片時最初要建立的塊數為1
mongos> db.createCollection("table2")
mongos> sh.shardCollection("testdb.table2",{age:1},{numInitialChunks:1})
mongos> for (var i=0;i<100000;i++) db.table2.save({name:"u_"+i,age:0+i,sex:i%2,class:"number2",grade:"number3",birthd:"shanghai",motk:"shanghai",controyload:"chian",birthn:3030303030303030303,horbity:"footboll"})
對錶testdb.table3按age欄位範圍分片(代號為hashed),指定雜湊分片鍵對空集合進行分片時最初要建立的塊數為1
mongos> db.createCollection("table3")
mongos> sh.shardCollection("testdb.table2",{age:"hashed"},{numInitialChunks:1})
mongos> for (var i=0;i<100000;i++) db.table3.save({name:"u_"+i,age:0+i,sex:i%2,class:"number2",grade:"number3",birthd:"shanghai",motk:"shanghai",controyload:"chian",birthn:3030303030303030303,horbity:"footboll"})
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2648154/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 搭建MongoDB分片叢集MongoDB
- MongoDB 分片叢集搭建MongoDB
- Docker 搭建叢集 MongoDBDockerMongoDB
- MongoDB高可用叢集搭建MongoDB
- MongoDB Sharding(二) -- 搭建分片叢集MongoDB
- 在滴滴雲上搭建 MongoDB 叢集 (一):MongoDB
- linux下Mongodb叢集搭建:分片+副本集LinuxMongoDB
- mongodb叢集節點故障的切換方法MongoDB
- .NET Core+MongoDB叢集搭建與實戰MongoDB
- MongoDB叢集同步MongoDB
- MongoDB 4.2分片叢集搭建及與3.4分片叢集搭建時的一些異同MongoDB
- 使用Docker搭建MongoDB 5.0版本副本集叢集DockerMongoDB
- MongoDB叢集搭建(包括隱藏節點,仲裁節點)MongoDB
- 搭建zookeeper叢集(偽叢集)
- zookeeper叢集的搭建
- redis叢集的搭建Redis
- ONOS叢集的搭建
- zookeeper叢集及kafka叢集搭建Kafka
- 搭建kubernetes 叢集的安裝過程和方法
- mongodb 分片叢集設定MongoDB
- MongoDB分片叢集常用操作MongoDB
- Elasticsearch(ES)叢集的搭建Elasticsearch
- Redis系列:搭建Redis叢集(叢集模式)Redis模式
- linux下搭建ZooKeeper叢集(偽叢集)Linux
- MongoDB 搭建複製集MongoDB
- Hadoop叢集搭建Hadoop
- Zookeeper叢集搭建
- redis叢集搭建Redis
- mysql叢集搭建MySql
- zookeeper 叢集搭建
- 搭建 Redis 叢集Redis
- RabbitMQ叢集搭建MQ
- nacos 叢集搭建
- HBASE叢集搭建
- 搭建ELK叢集
- Ambari叢集搭建
- kafka叢集搭建Kafka
- Hadoop搭建叢集Hadoop