设为首页 收藏本站
查看: 1132|回复: 0

[经验分享] mongodb分片

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-31 09:11:43 | 显示全部楼层 |阅读模式
分片简介
分片(shard)是指将数据拆分,将其分散在不同的机器上的过程,有时也用分区(partition)联表示这个概念。将数据分散到不同机器上,不需要功能强大的大型计算机就可以存储更多的数据,处理更大的负载。复制和分片是不同而概念,复制是让多台机器拥有同样的数据副本,每台机器都是其他服务器的镜像,而每一个分片都有其他分片拥有不同的数据子集。
mongos :路由进程, 应用程序接入mongos再查询到具体分片。
configdb:路由表服务,每一台都具有全部chunk的路由信息。
shard:为数据存储分片,每一个分片可以使副本集,这里我使用了三个复制集。
arbiter:如果主服务器崩溃了,仲裁服务器(ARBITER)会将优先级高的成员选为主节点。
每个成员每个两秒就会向其他成员发送一次心跳请求(heartbest request).心跳的请求信息量非常小。
一、拓扑图

wKiom1XjC9ST5tfnAAMvvC-vRDQ849.jpg


二、服务器信息
系统:Centos-6.5-x86-64位,内核版本:2.6.32
mogodb版本:mongodb-linux-x86_64-2.6.7.tgz
三台服务器多个实例:
复制集1 IP:192.168.2.134
1
2
3
4
5
6
端口分配:
mongos1:27111
configdb1:27100
mongo主分片1:27001
mongo备1:27011
arbiter1:27010



复制集2 IP:192.168.2.133
1
2
3
4
5
6
端口分配:
mongos2:27222
configdb2:27200
mongo主分片2:27002
mongo备2:27022
arbiter2:27020



复制集3 IP:192.168.2.132
1
2
3
4
5
6
端口分配:
mongos3:27333
configdb3:27300
mongo主分片3:27003
mongo备3:27033
arbiter3:27030



三、配置
三台服务器都执行:
1
2
3
4
5
tar -zxvf mongodb-linux-x86_64-2.6.7.tgz
mv mongodb-linux-x86_64-2.6.7 /usr/local/
cd /usr/local/mongodb-linux-x86_64-2.6.7/
mkdir conf
mkdir /data/mongodb/{logs,pid}




3.1、 192.168.2.134服务器配置:
mkdir /data/mongodb/{shard1,shard3,configdb1,arbiter2}/data
mongos1:27111

[iyunv@localhost mongodb]# cat /usr/local/mongodb-linux-x86_64-2.6.7/conf/mongos1.conf
1
2
3
4
5
logpath = /data/mongodb/logs/mongos1.log
logappend = true
fork = true
port = 27111
configdb = 192.168.2.134:27100,192.168.2.133:27200,192.168.2.132:27300



configdb1:27100
[iyunv@localhost mongodb]# cat /usr/local/mongodb-linux-x86_64-2.6.7/conf/configdb1.conf
1
2
3
4
5
6
7
8
logpath = /data/mongodb/logs/configdb1.log
logappend = true
pidfilepath = /data/mongodb/pid/config.pid
dbpath = /data/mongodb/configdb1/data
fork = true
port = 27100
oplogSize = 2048
configsvr = true



mongo主分片1:27001  
[iyunv@localhost mongodb]# cat /usr/local/mongodb-linux-x86_64-2.6.7/conf/shard1.conf
1
2
3
4
5
6
7
8
9
10
11
12
logpath = /data/mongodb/logs/shard1.log
logappend = true
pidfilepath = /data/mongodb/pid/shard1.pid
dbpath = /data/mongodb/shard1/data
directoryperdb = true
replSet = replset1
rest = true
oplogSize = 1024
fork = true
shardsvr = true
port = 27001
journal = true



mongo3备:27033  
[iyunv@localhost mongodb]# cat /usr/local/mongodb-linux-x86_64-2.6.7/conf/shard3.conf
1
2
3
4
5
6
7
8
9
10
11
12
logpath = /data/mongodb/logs/shard3.log
logappend = true
pidfilepath = /data/mongodb/pid/shard3.pid
dbpath = /data/mongodb/shard3/data
directoryperdb = true
replSet = replset3
rest = true
oplogSize = 1024
fork = true
shardsvr = true
port = 27033
journal = true



arbiter2:27020

[iyunv@localhost mongodb]# cat /usr/local/mongodb-linux-x86_64-2.6.7/conf/arbiter2.conf
1
2
3
4
5
6
7
8
9
10
11
12
logpath = /data/mongodb/logs/arbiter2.log
logappend = true
pidfilepath = /data/mongodb/pid/arbiter2.pid
dbpath = /data/mongodb/arbiter2/data
directoryperdb = true
replSet = replset2
rest = true
oplogSize = 1024
fork = true
shardsvr = true
port = 27020
journal = true



服务器启动实例:

1
2
3
4
5
/usr/local/mongodb-linux-x86_64-2.6.7/bin/mongod -f /usr/local/mongodb-linux-x86_64-2.6.7/conf/shard1.conf
/usr/local/mongodb-linux-x86_64-2.6.7/bin/mongod -f /usr/local/mongodb-linux-x86_64-2.6.7/conf/arbiter2.conf
/usr/local/mongodb-linux-x86_64-2.6.7/bin/mongod -f /usr/local/mongodb-linux-x86_64-2.6.7/conf/shard3.conf
/usr/local/mongodb-linux-x86_64-2.6.7/bin/mongod -f /usr/local/mongodb-linux-x86_64-2.6.7/conf/configdb1.conf
/usr/local/mongodb-linux-x86_64-2.6.7/bin/mongos -f /usr/local/mongodb-linux-x86_64-2.6.7/conf/mongos1.conf




3.2、 192.168.2.133 服务器配置:
mkdir /data/mongodb/{shard1,shard2,configdb2,arbiter3}/data
mongos2:27222
[iyunv@localhost ~]# cat /usr/local/mongodb-linux-x86_64-2.6.7/conf/mongos2.conf
1
2
3
4
5
6
logpath = /data/mongodb/logs/mongos.log
logappend = true
fork = true
port = 27222
configdb = 192.168.2.134:27100,192.168.2.133:27200,192.168.2.132:27300
configdb2:27200



configdb2:27200
[iyunv@localhost ~]# cat /usr/local/mongodb-linux-x86_64-2.6.7/conf/configdb2.conf
1
2
3
4
5
6
7
8
logpath = /data/mongodb/logs/configdb2.log
logappend = true
pidfilepath = /data/mongodb/pid/config2.pid
dbpath = /data/mongodb/configdb2/data
fork = true
port = 27200
oplogSize = 2048
configsvr = true



mongo主分片2:27002  
[iyunv@localhost ~]# cat /usr/local/mongodb-linux-x86_64-2.6.7/conf/shard2.conf
1
2
3
4
5
6
7
8
9
10
11
12
logpath = /data/mongodb/logs/shard2.log
logappend = true
pidfilepath = /data/mongodb/pid/shard2.pid
dbpath = /data/mongodb/shard2/data
directoryperdb = true
replSet = replset2
rest = true
oplogSize = 1024
fork = true
shardsvr = true
port = 27002
journal = true



mongo备1:27011  
[iyunv@localhost ~]# cat /usr/local/mongodb-linux-x86_64-2.6.7/conf/shard1.conf
1
2
3
4
5
6
7
8
9
10
11
12
logpath = /data/mongodb/logs/shard1.log
logappend = true
pidfilepath = /data/mongodb/pid/shard1.pid
dbpath = /data/mongodb/shard1/data
directoryperdb = true
replSet = replset1
rest = true
oplogSize = 1024
fork = true
shardsvr = true
port = 27011
journal = true



arbiter3:27030
[iyunv@localhost ~]# cat /usr/local/mongodb-linux-x86_64-2.6.7/conf/arbiter3.conf
1
2
3
4
5
6
7
8
9
10
11
12
logpath = /data/mongodb/logs/arbiter3.log
logappend = true
pidfilepath = /data/mongodb/pid/arbiter3.pid
dbpath = /data/mongodb/arbiter3/data
directoryperdb = true
replSet = replset3
rest = true
oplogSize = 1024
fork = true
shardsvr = true
port = 27030
journal = true



服务器启动实例:
1
2
3
4
5
/usr/local/mongodb-linux-x86_64-2.6.7/bin/mongod -f /usr/local/mongodb-linux-x86_64-2.6.7/conf/shard1.conf
/usr/local/mongodb-linux-x86_64-2.6.7/bin/mongod -f /usr/local/mongodb-linux-x86_64-2.6.7/conf/arbiter3.conf
/usr/local/mongodb-linux-x86_64-2.6.7/bin/mongod -f /usr/local/mongodb-linux-x86_64-2.6.7/conf/shard2.conf
/usr/local/mongodb-linux-x86_64-2.6.7/bin/mongod -f /usr/local/mongodb-linux-x86_64-2.6.7/conf/configdb2.conf
/usr/local/mongodb-linux-x86_64-2.6.7/bin/mongos -f /usr/local/mongodb-linux-x86_64-2.6.7/conf/mongos2.conf




3.3、 192.168.2.132 服务器配置:
mkdir /data/mongodb/{shard1,shard2,configdb2,arbiter3}/data

mongos3:27333
[iyunv@bjmdb4 ~]# cat /usr/local/mongodb-linux-x86_64-2.6.7/conf/mongos3.conf
1
2
3
4
5
logpath = /data/mongodb/logs/mongos.log
logappend = true
fork = true
port = 27333
configdb = 192.168.2.134:27100,192.168.2.133:27200,192.168.2.132:27300



configdb3:27300  
[iyunv@bjmdb4 ~]# cat /usr/local/mongodb-linux-x86_64-2.6.7/conf/configdb3.conf
1
2
3
4
5
6
7
8
logpath = /data/mongodb/logs/configdb3.log
logappend = true
pidfilepath = /data/mongodb/pid/config3.pid
dbpath = /data/mongodb/configdb3/data
fork = true
port = 27300
oplogSize = 2048
configsvr = true



mongo主3:27003  
[iyunv@bjmdb4 ~]# cat /usr/local/mongodb-linux-x86_64-2.6.7/conf/shard3.conf
1
2
3
4
5
6
7
8
9
10
11
12
logpath = /data/mongodb/logs/shard3.log
logappend = true
pidfilepath = /data/mongodb/pid/shard1.pid
dbpath = /data/mongodb/shard3/data
directoryperdb = true
replSet = replset3
rest = true
oplogSize = 1024
fork = true
shardsvr = true
port = 27003
journal = true



mongo备2:27022  
[iyunv@bjmdb4 ~]# cat /usr/local/mongodb-linux-x86_64-2.6.7/conf/shard2.conf
1
2
3
4
5
6
7
8
9
10
11
12
logpath = /data/mongodb/logs/shard2.log
logappend = true
pidfilepath = /data/mongodb/pid/shard1.pid
dbpath = /data/mongodb/shard2/data
directoryperdb = true
replSet = replset2
rest = true
oplogSize = 1024
fork = true
shardsvr = true
port = 27022
journal = true



arbiter1:27010
[iyunv@bjmdb4 ~]# cat /usr/local/mongodb-linux-x86_64-2.6.7/conf/arbiter1.conf
1
2
3
4
5
6
7
8
9
10
11
12
logpath = /data/mongodb/logs/arbiter1.log
logappend = true
pidfilepath = /data/mongodb/pid/arbiter1.pid
dbpath = /data/mongodb/arbiter1/data
directoryperdb = true
replSet = replset1
rest = true
oplogSize = 1024
fork = true
shardsvr = true
port = 27010
journal = true



启动实例:
1
2
3
4
5
/usr/local/mongodb-linux-x86_64-2.6.7/bin/mongod -f /usr/local/mongodb-linux-x86_64-2.6.7/conf/arbiter1.conf
/usr/local/mongodb-linux-x86_64-2.6.7/bin/mongod -f /usr/local/mongodb-linux-x86_64-2.6.7/conf/shard2.conf
/usr/local/mongodb-linux-x86_64-2.6.7/bin/mongod -f /usr/local/mongodb-linux-x86_64-2.6.7/conf/shard3.conf
/usr/local/mongodb-linux-x86_64-2.6.7/bin/mongod -f /usr/local/mongodb-linux-x86_64-2.6.7/conf/configdb3.conf
/usr/local/mongodb-linux-x86_64-2.6.7/bin/mongos -f /usr/local/mongodb-linux-x86_64-2.6.7/conf/mongos3.conf




四、配置复制集
4.1、 192.168.2.134服务器配置复制集:
/usr/local/mongodb-linux-x86_64-2.6.7/bin/mongo 192.168.2.134:2700
config = { _id:"replset1", members:[
                     {_id:0,host:"192.168.2.134:27001",priority:10},
                     {_id:1,host:"192.168.2.133:27011",priority:8},
                     {_id:2,host:"192.168.2.132:27010",arbiterOnly:true},

                ]
         }

wKioL1XgUGTibRM_AAKDiekPkAk493.jpg
wKiom1XgTkngvNHBAASDkef0-aM714.jpg
rs.initiate(config);  //更新配置
rs.status()           //查看配置信息
4.2、 192.168.2.133服务器配置复制集:
/usr/local/mongodb-linux-x86_64-2.6.7/bin/mongo 192.168.2.133:27002
config = { _id:"replset2", members:[
                     {_id:0,host:"192.168.2.133:27002",priority:10},
                     {_id:1,host:"192.168.2.132:27022",priority:8},
                     {_id:2,host:"192.168.2.134:27020",arbiterOnly:true},

                ]
         }
wKiom1XgTxfAhJcbAAHLZgHeNm0530.jpg
wKioL1XgUTLQ93T4AAOHNvKkOkI144.jpg
rs.initiate(config);  //更新配置
rs.status()           //查看配置信息

4.3、 192.168.2.132服务器配置复制集:
/usr/local/mongodb-linux-x86_64-2.6.7/bin/mongo 192.168.2.132:27003
config = { _id:"replset3", members:[

                     {_id:0,host:"192.168.2.132:27003",priority:10},
                     {_id:1,host:"192.168.2.134:27033",priority:8},
                     {_id:2,host:"192.168.2.133:27030",arbiterOnly:true},

                ]
         }
wKiom1XgT5jSzNA9AAIExOBhmlM652.jpg
wKioL1XgUbOwcevEAAQ-Vr9g7So373.jpg
rs.initiate(config);  //更新配置
rs.status()           //查看配置信息

五、配置mongos串联路由信息

db.runCommand({ addshard :"replset1/192.168.2.134:27001"});
db.runCommand({ addshard :"replset2/192.168.2.133:27002"});
db.runCommand({ addshard :"replset3/192.168.2.132:27003"});        
[iyunv@localhost ~]# /usr/local/mongodb-linux-x86_64-2.6.7/bin/mongo 192.168.2.134:27111/admin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
MongoDB shell version: 2.6.7
connecting to: 192.168.2.134:27111/admin
mongos>
mongos>
mongos>
mongos>
mongos> show dbs
admin   (empty)
config  0.016GB
mongos> db.runCommand({ addshard :"replset1/192.168.2.134:27001"});
{ "shardAdded" : "replset1", "ok" : 1 }
mongos> db.runCommand({ addshard :"replset2/192.168.2.133:27002"});
{ "shardAdded" : "replset2", "ok" : 1 }
mongos> db.runCommand({ addshard :"replset3/192.168.2.132:27003"});
{ "shardAdded" : "replset3", "ok" : 1 }
mongos> printShardingStatus()    //查看分片信息
--- Sharding Status ---
  sharding version: {
    "_id" : 1,
    "version" : 4,
    "minCompatibleVersion" : 4,
    "currentVersion" : 5,
    "clusterId" : ObjectId("55dfc20932ed635fd872d595")
}
  shards:
    {  "_id" : "replset1",  "host" : "replset1/192.168.2.133:27011,192.168.2.134:27001" }
    {  "_id" : "replset2",  "host" : "replset2/192.168.2.132:27022,192.168.2.133:27002" }
    {  "_id" : "replset3",  "host" : "replset3/192.168.2.132:27003,192.168.2.134:27033" }
  databases:
    {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }

mongos> sh.getBalancerState() //查看均衡器负责数据迁移
true
mongos>



六、创建数据分片
[iyunv@localhost ~]# /usr/local/mongodb-linux-x86_64-2.6.7/bin/mongo 192.168.2.134:27111
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
mongos> use admin                                       //启用分片要切换到admin
switched to db admin
mongos> db.runCommand({"enablesharding": "db_jia"})    //首先对数据库开启分片,是对集合开启分片的先决条件
{ "ok" : 1 }
mongos> db.tab4.ensureIndex({"username" : "hashed"})  //创建索引
{
"raw" : {
"replset3/192.168.2.132:27003,192.168.2.134:27033" : {
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
},
"ok" : 1
}     
mongos> use admin
switched to db admin                               //使用GridFS散列片建(写强求会被均匀分发到分片上)
mongos> db.runCommand({"shardcollection":"db_jia.tab4", "key":{"username" : "hashed"}})
{ "collectionsharded" : "db_jia.tab4", "ok" : 1 }
mongos> for (var i= 1; i <= 90; i++)db.tab4.save({"username" : "user"+i,"crated_at" : new Date()});  //写90条数据
WriteResult({ "nInserted" : 1 })
mongos> db.tab4.find().count()
30



分片还是很均匀的:
6.1、 分片1查看数据:
wKiom1XgWTCzGDIPAAmK9Sqd644653.jpg
分片1备份库:
wKioL1XgW0uzOu1KAAoIc6PlHwg448.jpg
6.2、 分片2查看数据:
wKiom1XgWXahyzC-AAkwqksCcec407.jpg
分片2备份库:
wKioL1XgW5GhgBq8AAn5LBQtqf8029.jpg
6.3、 分片3查看数据:
wKiom1XgWbny9O98AAl_h-amwVI134.jpg
分片3备份库:
wKioL1XgW9SwpmrvAAuWKjYrdA4531.jpg
七、模拟分片1主节点故障:
主节点停掉临时3秒
wKiom1XhHXrj_16SAASfWE4Ut38666.jpg

备份节点:
wKioL1XhH5Xw4huoAAObxVdlEdg734.jpg
仲裁节点:
wKiom1XhHXqgCeS4AAKbpqd6uik374.jpg
仲裁节点log: wKiom1XhHXrDrj_hAAV65Wgj9os586.jpg

总结:因为做了副本集,分片主节点出现故障,仲裁节点会重新选举主节点。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-106629-1-1.html 上篇帖子: mongodb常用操作命令 下篇帖子: MongoDB 自动安装 shell
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表