集群的模块介绍:从MongoDB官方给的集群架构了解,整个集群主要有4个模块:Config Server、mongs、 shard、replica set:Config Server:用来存放集群的元数据,也就是存放所有分片的的配置数据,mongos第一次启动就需要连接confi ...
创建相关模块存放路径:
创建configeServer目录(172.16.16.120/121/122):
#mkdir -p /db/configS/data & mkdir -p /db/configS/log (存放ConfigServer的数据、日志)
创建shard2目录(172.16.16.125/126/131 ):
#mkdir -p /db/shard2/data & mkdir -p /db/shard2/log (存放shard2的数据、日志)
创建shard3目录(172.16.16.126/131/124 ):
#mkdir -p /db/shard3/data & mkdir -p /db/shard3/log (存放shard3的数据、日志)
模块配置及启动:
configServer(172.16.16.120/121/122)配置及服务启动:
编写 /usr/local/mongodb/conf/configServer.conf,将参数都放在该文件中:启动configServer:
mongos(172.16.16.124/125/126/131)配置及服务启动:
编写mongos.conf,将参数都放在该文件中(4台配置文件都一样):启动mongos:应保证集群中设备的时间都是一样的,否则启动mongos会报错,若不相同,可先搭建一套NTP服务器
shard1分片+副本集配置及服务启动(172.16.16.124/125/126 ):
#vim /usr/local/mongodb/conf/shard1.conf#!/bin/bashsystemLog: destination: file path: "/db/shard1/log/shard1.log" #日志存储位置 logAppend: truestorage: journal: #journal配置 enabled: true dbPath: "/db/shard1/data" #数据文件存储位置 directoryPerDB: true #是否一个库一个文件夹 engine: wiredTiger #数据引擎 wiredTiger: #WT引擎配置 engineConfig: cacheSizeGB: 6 #设置为6G,默认为物理内存的一半 directoryForIndexes: true #是否将索引也按数据库名单独存储 journalCompressor: zlib collectionConfig: #表压缩配置 blockCompressor: zlib indexConfig: #索引配置 prefixCompression: truenet: #端口配置 port: 40001processManagement: #配置启动管理方式 fork: truesharding: #分片配置 clusterRole: shardsvrreplication: replSetName: shard1 #配置副本集名称
启动shard1 mongod:
shard2分片+副本集配置及服务启动(172.16.16.125/126/131 ):
#vim /usr/local/mongodb/conf/shard2.conf#!/bin/bashsystemLog: destination: file path: "/db/shard2/log/shard2.log" #日志存储位置 logAppend: truestorage: journal: #journal配置 enabled: true dbPath: "/db/shard2/data" #数据文件存储位置 directoryPerDB: true #是否一个库一个文件夹 engine: wiredTiger #数据引擎 wiredTiger: #WT引擎配置 engineConfig: cacheSizeGB: 6 #设置为6G,默认为物理内存的一半 directoryForIndexes: true #是否将索引也按数据库名单独存储 journalCompressor: zlib collectionConfig: #表压缩配置 blockCompressor: zlib indexConfig: #索引配置 prefixCompression: truenet: #端口配置 port: 40002processManagement: #配置启动管理方式 fork: truesharding: #分片配置 clusterRole: shardsvrreplication: #oplogSizeMB: replSetName: shard2 #配置副本集名称
shard3分片+副本集配置及服务启动(172.16.16.126/131/124 ):
#vim /usr/local/mongodb/conf/shard3.conf#!/bin/bashsystemLog: destination: file path: "/db/shard3/log/shard3.log" #日志存储位置 logAppend: truestorage: journal: #journal配置 enabled: true dbPath: "/db/shard3/data" #数据文件存储位置 directoryPerDB: true #是否一个库一个文件夹 engine: wiredTiger #数据引擎 wiredTiger: #WT引擎配置 engineConfig: cacheSizeGB: 6 #设置为6G,默认为物理内存的一半 directoryForIndexes: true #是否将索引也按数据库名单独存储 journalCompressor: zlib collectionConfig: #表压缩配置 blockCompressor: zlib indexConfig: #索引配置 prefixCompression: truenet: #端口配置 port: 40003processManagement: #配置启动管理方式 fork: truesharding: #分片配置 clusterRole: shardsvrreplication: #oplogSizeMB: replSetName: shard3 #配置副本集名称
启动shara3 mongod:
shard4分片+副本集配置及服务启动(172.16.16.131/124/125 ):
#vim /usr/local/mongodb/conf/shard4.conf#!/bin/bashsystemLog: destination: file path: "/db/shard4/log/shard4.log" #日志存储位置 logAppend: truestorage: journal: #journal配置 enabled: true dbPath: "/db/shard4/data" #数据文件存储位置 directoryPerDB: true #是否一个库一个文件夹 engine: wiredTiger #数据引擎 wiredTiger: #WT引擎配置 engineConfig: cacheSizeGB: 6 #设置为6G,默认为物理内存的一半 directoryForIndexes: true #是否将索引也按数据库名单独存储 journalCompressor: zlib collectionConfig: #表压缩配置 blockCompressor: zlib indexConfig: #索引配置 prefixCompression: truenet: #端口配置 port: 40004processManagement: #配置启动管理方式 fork: truesharding: #分片配置 clusterRole: shardsvrreplication: #oplogSizeMB: replSetName: shard4 #复制集名
启动shara4 mongod:
shard2的副本集配置(主节点、副本节点、仲裁节点):
bin]$ ./mongo 172.16.16.125:40002MongoDB.aspx' target='_blank'>MongoDB shell version: 3.0.7connecting to: 172.16.16.125:40002/test> use adminswitched to db admin> config = { _id:"shard2", members:[ {_id:0,host:"172.16.16.125:40002"}, {_id:1,host:"172.16.16.126:40002"}, {_id:2,host:"172.16.16.131:40002",arbiterOnly:true}] } #以下为输出{ "_id" : "shard2", "members" : [ { "_id" : 0, "host" : "172.16.16.125:40002" }, { "_id" : 1, "host" : "172.16.16.126:40002" }, { "_id" : 2, "host" : "172.16.16.131:40002", "arbiterOnly" : true } ]}> rs.initiate(config); #初始化配置 { "ok" : 1 }
shard3的副本集配置(主节点、副本节点、仲裁节点):
bin]$ ./mongo 172.16.16.126:40003MongoDB shell version: 3.0.7connecting to: 172.16.16.126:40003/test> use adminswitched to db admin> config = { _id:"shard3", members:[ {_id:0,host:"172.16.16.126:40003"}, {_id:1,host:"172.16.16.131:40003"}, {_id:2,host:"172.16.16.124:40003",arbiterOnly:true}] } #以下为输出{ "_id" : "shard3", "members" : [ { "_id" : 0, "host" : "172.16.16.126:40003" }, { "_id" : 1, "host" : "172.16.16.131:40003" }, { "_id" : 2, "host" : "172.16.16.124:40003", "arbiterOnly" : true } ]}> rs.initiate(config); #初始化配置{ "ok" : 1 }
shard4的副本集配置(主节点、副本节点、仲裁节点):
bin]$ ./mongo 172.16.16.131:40004MongoDB shell version: 3.0.7connecting to: 172.16.16.131:40004/test> use adminswitched to db admin> config = { _id:"shard4", members:[ {_id:0,host:"172.16.16.131:40004"}, {_id:1,host:"172.16.16.124:40004"}, {_id:2,host:"172.16.16.125:40004",arbiterOnly:true}] } #以下为输出{ "_id" : "shard4", "members" : [ { "_id" : 0, "host" : "172.16.16.131:40004" }, { "_id" : 1, "host" : "172.16.16.124:40004" }, { "_id" : 2, "host" : "172.16.16.125:40004", "arbiterOnly" : true } ]}> rs.initiate(config); #初始化配置{ "ok" : 1 }
mongos> db.runCommand( { listshards : 1 } );{ "shards" : [ { "_id" : "shard1", "host" : "shard1/172.16.16.124:40001,172.16.16.125:40001" }, { "_id" : "shard2", "host" : "shard2/172.16.16.125:40002,172.16.16.126:40002" }, { "_id" : "shard3", "host" : "shard3/172.16.16.126:40003,172.16.16.131:40003" }, { "_id" : "shard4", "host" : "shard4/172.16.16.124:40004,172.16.16.131:40004" } ], "ok" : 1}
以上就完成了MongoDB shard+replica模式的集群搭建,接下来做业务测试。可以看出ljaidb库并没有分片,且数据都在shard1上,登录其他shard1上查看:验证shard2、shard3、shard4上都没有ljaidb这个库:
通过java或者python驱动,连接mongo集群测试:
java连接代码:
可以看出,数据有进行分片,但是不够均匀,需要进一步研究分片的配置。
原标题:MongoDBV3.0.7版本(shard+replica)集群的搭建及验证
关键词:MongoDB
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。