分片集搭建

---何旭东

目录

分片集搭建...................................................................................................................... 1

生态系统.......................................................................................................................... 2

环境介绍.......................................................................................................................... 2

需求.......................................................................................................................... 2

实际拓扑................................................................................................................... 2

机器端口................................................................................................................... 2

机器功能................................................................................................................... 3

机器IP...................................................................................................................... 3

基础环境................................................................................................................... 4

配置文件.......................................................................................................................... 4

机器一...................................................................................................................... 4

机器二...................................................................................................................... 6

机器三...................................................................................................................... 8

启动................................................................................................................................. 9

第一台..................................................................................................................... 10

第二台..................................................................................................................... 10

第三台..................................................................................................................... 10

启动路由........................................................................................................................ 10

第一台初始化分片及结果......................................................................................... 10

第二台初始化分片及结果......................................................................................... 12

第三台机器添加分片................................................................................................ 13

切分数据.......................................................................................................... 13

结果查看........................................................................................................................ 13

第一个片................................................................................................................. 14

第二个片................................................................................................................. 16

优化............................................................................................................................... 18

常用命令行..................................................................................................................... 18

http://shanqiangwu.blog.51cto.com/8067564/1653968

感谢

感谢大家的帮助及引到,碰到问题不要用百度。找资料去些运维网站

官网网站

2015年7月17日

生态系统

数据服务节点(mongod)

路由节点(mongos)

配置节点(mongod)--config server

投票节点/表决节点(mongod) --arbiter server

环境介绍

需求

三台机器

数据节点,sharding 2片

每个sharding为Replic Set方式,冗余度3(主、从、延迟从)

mongos(路由节点),数量3

config server(配置服务器节点),数量3

arbiter server(表决节点),数量6

实际拓扑

机器端口

机器

数据节点

配置节点

表决节点

路由节点

第一台

shard11:28017

shard21:28018

config1:20000

arbiter1:28031

arbiter2:28032

mongos1: 28885

第二台

shard12:28017

Shard22:28018

config2:20000

arbiter1:28031

arbiter2:28032

mongos2:28885

第三台

shard13:28017

Shard23:28018

config3:20000

arbiter1:28031

arbiter2:28032

mongos3: 28885

机器功能

机器

端口

功能

192.168.200.185

28017

'shard1'   PRIMARY

主机:mongohost1

28018

‘shard2’   SECONDARY

20000

配置节点

28031

'shard1'   ARBITER

28032

‘shard2’   ARBITER

28885

路由节点

41000

启动路由  生成此端口

192.168.200.186

28017

'shard1'   SECONDARY

主机:mongohost2

28018

‘shard2’   PRIMARY

20000

配置节点

28031

'shard1'   ARBITER

28032

‘shard2’   ARBITER

28885

路由节点

41000

启动路由  生成此端口

192.168.200.187

28017

'shard1'   SECONDARY

主机:mongohost3

28018

‘shard2’   SECONDARY

20000

配置节点

28031

'shard1'   ARBITER

28032

‘shard2’   ARBITER

28885

路由节点

41000

启动路由  生成此端口

机器IP

机器

IP地址

主机名

第一台

192.168.200.185

mongohost1

第二台

192.168.200.185

mongohost2

第三台

192.168.200.187

mongohost3

基础环境

iptables 关闭

selinux 关闭

hosts 地址表添加

配置文件

机器一

mkdir /usr/local/mongodb/shard11

mkdir /usr/local/mongodb/shard21

mkdir /usr/local/mongodb/arbiter1

mkdir /usr/local/mongodb/arbiter2/

mkdir /usr/local/mongodb/config/

mkdir /usr/local/mongodb/logs/

cat > /etc/shard11.conf <<EOF

shardsvr=true

port=28017

dbpath = /usr/local/mongodb/shard11/

logpath = /usr/local/mongodb/logs/shard11.log

logappend=true

fork=true

nojournal=true

rest=true

replSet=shard1

oplogSize=2048

EOF

cat > /etc/shard21.conf <<EOF

shardsvr=true

port=28018

dbpath = /usr/local/mongodb/shard21/

logpath =/usr/local/mongodb/logs/shard21.log

logappend=true

fork=true

nojournal=true

rest=true

replSet=shard2

oplogSize=2048

EOF

cat > /etc/config1.conf <<EOF

configsvr=true

port=20000

dbpath = /usr/local/mongodb/config/

logpath =/usr/local/mongodb/logs/config1.log

logappend=true

fork=true

nojournal=true

EOF

cat > /etc/arbiter1.conf <<EOF

shardsvr=true

replSet=shard1

port=28031

dbpath = /usr/local/mongodb/arbiter1/

logpath =/usr/local/mongodb/logs/arbiter1.log

oplogSize=100

logappend=true

fork=true

nojournal=true

rest=true

EOF

cat > /etc/arbiter2.conf <<EOF

shardsvr=true

replSet=shard2

port=28032

dbpath = /usr/local/mongodb/arbiter2/

logpath =/usr/local/mongodb/logs/arbiter2.log

oplogSize=100

logappend=true

fork=true

nojournal=true

rest=true

EOF

cat > /etc/mongos1.conf <<EOF

configdb=mongohost1:20000,mongohost2:20000,mongohost3:20000

chunkSize=100

port=28885

logpath =/usr/local/mongodb/logs/mongos1.log

logappend=true

fork=true

EOF

机器二

mkdir /usr/local/mongodb/shard12

mkdir /usr/local/mongodb/shard22

mkdir /usr/local/mongodb/arbiter1/

mkdir /usr/local/mongodb/arbiter2/

mkdir /usr/local/mongodb/cofig/

mkdir /usr/local/mongodb/logs/

cat > /etc/shard12.conf <<EOF

shardsvr=true

port=28017

dbpath = /usr/local/mongodb/shard12/

logpath = /usr/local/mongodb/logs/shard12.log

logappend=true

fork=true

nojournal=true

rest=true

replSet=shard1

oplogSize=2048

EOF

cat > /etc/shard22.conf <<EOF

shardsvr=true

port=28018

dbpath = /usr/local/mongodb/shard22/

logpath = /usr/local/mongodb/logs/shard22.log

logappend=true

fork=true

nojournal=true

rest=true

replSet=shard2

oplogSize=2048

EOF

cat > /etc/config2.conf <<EOF

configsvr=true

port=20000

dbpath = /usr/local/mongodb/config/

logpath = /usr/local/mongodb/logs/config2.log

logappend=true

fork=true

nojournal=true

EOF

cat > /etc/arbiter1.conf <<EOF

shardsvr=true

replSet=shard1

port=28031

dbpath = /usr/local/mongodb/arbiter1/

logpath =/usr/local/mongodb/logs/arbiter1.log

oplogSize=100

logappend=true

fork=true

nojournal=true

rest=true

EOF

cat > /etc/arbiter2.conf <<EOF

shardsvr=true

replSet=shard2

port=28032

dbpath = /usr/local/mongodb/arbiter2/

logpath =/usr/local/mongodb/logs/arbiter2.log

oplogSize=100

logappend=true

fork=true

nojournal=true

rest=true

EOF

cat > /etc/mongos2.conf <<EOF

configdb=mongohost1:20000,mongohost2:20000,mongohost3:20000

chunkSize=100

port=28885

logpath = /usr/local/mongodb/logs/mongos2.log

logappend=true

fork=true

EOF

机器三

mkdir /usr/local/mongodb/shard13

mkdir /usr/local/mongodb/shard23

mkdir /usr/local/mongodb/arbiter1/

mkdir /usr/local/mongodb/arbiter2/

mkdir /usr/local/mongodb/cofig/

mkdir /usr/local/mongodb/logs/

cat > /etc/shard13.conf <<EOF

shardsvr=true

port=28017

dbpath = /usr/local/mongodb/shard13/

logpath = /usr/local/mongodb/logs/shard13.log

logappend=true

fork=true

nojournal=true

rest=true

replSet=shard1

oplogSize=2048

EOF

cat > /etc/shard23.conf <<EOF

shardsvr=true

port=28018

dbpath = /usr/local/mongodb/shard23/

logpath = /usr/local/mongodb/logs/shard23.log

logappend=true

fork=true

nojournal=true

rest=true

replSet=shard2

oplogSize=2048

EOF

cat > /etc/config3.conf <<EOF

configsvr=true

port=20000

dbpath = /usr/local/mongodb/config/

logpath = /usr/local/mongodb/logs/config3.log

logappend=true

fork=true

nojournal=true

EOF

cat > /etc/arbiter1.conf <<EOF

shardsvr=true

replSet=shard1

port=28031

dbpath = /usr/local/mongodb/arbiter1/

logpath =/usr/local/mongodb/logs/arbiter1.log

oplogSize=100

logappend=true

fork=true

nojournal=true

rest=true

EOF

cat > /etc/arbiter2.conf <<EOF

shardsvr=true

replSet=shard2

port=28032

dbpath = /usr/local/mongodb/arbiter2/

logpath =/usr/local/mongodb/logs/arbiter2.log

oplogSize=100

logappend=true

fork=true

nojournal=true

rest=true

EOF

cat > /etc/mongos3.conf <<EOF

configdb=mongohost1:20000,mongohost2:20000,mongohost3:20000

chunkSize=100

port=28885

logpath = /usr/local/mongodb/logs/mongos3.log

logappend=true

fork=true

EOF

启动

第一台

mongod -f /etc/shard11.conf

mongod -f /etc/shard21.conf

mongod -f /etc/arbiter1.conf

mongod -f /etc/arbiter2.conf

mongod -f /etc/config1.conf

mongos -f /etc/mongos1.conf

第二台

mongod -f /etc/shard12.conf

mongod -f /etc/shard22.conf

mongod -f /etc/arbiter1.conf

mongod -f /etc/arbiter2.conf

mongod -f /etc/config2.conf

mongos -f /etc/mongos2.conf

第三台

mongod -f /etc/shard13.conf

mongod -f /etc/shard23.conf

mongod -f /etc/arbiter1.conf

mongod -f /etc/arbiter2.conf

mongod -f /etc/config3.conf

mongos -f /etc/mongos3.conf

启动路由

mongos --configdb mongohost3:20000,mongohost2:20000,mongohost1:20000--port 41000 --chunkSize 100 --logpath /usr/local/mongodb/logs/mongos.log--logappend --fork

第一台初始化分片及结果

mongo mongohost1:28017/admin

> config = {_id:'shard1', members:[{_id: 0, host: 'mongohost1:28017'},{_id: 1, host: 'mongohost2:28017'},{"_id" : 2,"host":"mongohost3:28017",slaveDelay :7200 ,priority:0},{_id: 3, host: 'mongohost1:28031', arbiterOnly : true},{_id:4, host: 'mongohost2:28031', arbiterOnly : true},{_id: 5, host:'mongohost3:28031', arbiterOnly : true}]};

{

"_id" : "shard1",

"members" : [

{

"_id" : 0,

"host" :"mongohost1:28017"

},

{

"_id" : 1,

"host" :"mongohost2:28017"

},

{

"_id" : 2,

"host" :"mongohost3:28017",

"slaveDelay": 7200,

"priority" :0

},

{

"_id" : 3,

"host" :"mongohost1:28031",

"arbiterOnly": true

},

{

"_id" : 4,

"host" :"mongohost2:28031",

"arbiterOnly": true

},

{

"_id" : 5,

"host" :"mongohost3:28031",

"arbiterOnly": true

}

]

}

> rs.initiate(config);

{

"info" : "Config now saved locally.  Should come online in about a minute.",

"ok" : 1

}

>

第二台初始化分片及结果

mongo mongohost2:28018/admin

> config = {_id:'shard2', members:[{_id: 0, host: 'mongohost2:28018'},{_id: 1, host: 'mongohost1:28018'},{"_id" : 2,"host":"mongohost3:28018",slaveDelay :7200 ,priority:0},{_id: 3, host: 'mongohost1:28032', arbiterOnly : true},{_id:4, host: 'mongohost2:28032', arbiterOnly : true},{_id: 5, host:'mongohost3:28032', arbiterOnly : true}]};

{

"_id" : "shard2",

"members" : [

{

"_id" : 0,

"host" :"mongohost2:28018"

},

{

"_id" : 1,

"host" :"mongohost1:28018"

},

{

"_id" : 2,

"host" :"mongohost3:28018",

"slaveDelay": 7200,

"priority" :0

},

{

"_id" : 3,

"host" :"mongohost1:28032",

"arbiterOnly": true

},

{

"_id" : 4,

"host" :"mongohost2:28032",

"arbiterOnly": true

},

{

"_id" : 5,

"host" :"mongohost3:28032",

"arbiterOnly": true

}

]

}

> rs.initiate(config);

{

"info" : "Config now saved locally.  Should come online in about a minute.",

"ok" : 1

}

>

第三台机器添加分片

[root@mongodb logs]# mongomongohost3:28885/admin

MongoDB shell version: 2.6.10

connecting to: mongohost3:28885/admin

mongos>db.runCommand({"addshard" :"shard1/mongohost1:28017,mongohost2:28017"})

{ "shardAdded" :"shard1", "ok" : 1 }

mongos> db.runCommand({"addshard": "shard2/mongohost2:28018,mongohost1:28018"})

{ "shardAdded" :"shard2", "ok" : 1 }

mongos>

切分数据

db.runCommand({ "enablesharding" : "im_offline_msg"})

db.runCommand({ shardcollection : "step.step",key : {_id: 1} } )

db.runCommand( { "enablesharding": "xx"})  开启库的分片功能

db.runCommand( { shardcollection :"xx",key : {_id: 1} } )开启表的分片功能,key表示shard key

结果查看

mongos> db.printShardingStatus();

--- Sharding Status ---

sharding version: {

"_id" : 1,

"version" : 4,

"minCompatibleVersion" : 4,

"currentVersion" : 5,

"clusterId" : ObjectId("55ac8d1e55715e4e18194a14")

}

shards:

{  "_id" :"shard1",  "host" :"shard1/mongohost1:28017,mongohost2:28017" }

{  "_id" :"shard2",  "host" :"shard2/mongohost1:28018,mongohost2:28018" }

databases:

{  "_id" :"admin", "partitioned" : false, "primary" : "config" }

{  "_id" :"im_offline_msg", "partitioned" : true, "primary" : "shard1" }

{  "_id" :"step", "partitioned" : false, "primary" : "shard1" }

mongos>

第一个片

shard1:PRIMARY> rs.status()

{

"set" : "shard1",

"date" : ISODate("2015-07-17T11:11:12Z"),

"myState" : 1,

"members" : [

{

"_id" : 0,

"name" :"mongohost1:28017",

"health" : 1,

"state" : 1,

"stateStr" :"PRIMARY",

"uptime" :4498,

"optime" :Timestamp(1437129067, 2418),

"optimeDate": ISODate("2015-07-17T10:31:07Z"),

"electionTime" : Timestamp(1437127220, 1),

"electionDate" : ISODate("2015-07-17T10:00:20Z"),

"self" : true

},

{

"_id" : 1,

"name" :"mongohost2:28017",

"health" : 1,

"state" : 2,

"stateStr" :"SECONDARY",

"uptime" :4262,

"optime" :Timestamp(1437129067, 2418),

"optimeDate": ISODate("2015-07-17T10:31:07Z"),

"lastHeartbeat" : ISODate("2015-07-17T11:11:11Z"),

"lastHeartbeatRecv" :ISODate("2015-07-17T11:11:10Z"),

"pingMs" : 0,

"syncingTo" :"mongohost1:28017"

},

{

"_id" : 2,

"name" :"mongohost3:28017",

"health" : 1,

"state" : 2,

"stateStr" :"SECONDARY",

"uptime" : 4262,

"optime" :Timestamp(1437127210, 1),

"optimeDate": ISODate("2015-07-17T10:00:10Z"),

"lastHeartbeat" : ISODate("2015-07-17T11:11:11Z"),

"lastHeartbeatRecv" :ISODate("2015-07-17T11:11:11Z"),

"pingMs" : 0,

"syncingTo" :"mongohost1:28017"

},

{

"_id" : 3,

"name" :"mongohost1:28031",

"health" : 1,

"state" : 7,

"stateStr" :"ARBITER",

"uptime" :4262,

"lastHeartbeat" : ISODate("2015-07-17T11:11:12Z"),

"lastHeartbeatRecv" :ISODate("2015-07-17T11:11:12Z"),

"pingMs" : 0

},

{

"_id" : 4,

"name" :"mongohost2:28031",

"health" : 1,

"state" : 7,

"stateStr" :"ARBITER",

"uptime" :4262,

"lastHeartbeat" : ISODate("2015-07-17T11:11:11Z"),

"lastHeartbeatRecv" :ISODate("2015-07-17T11:11:11Z"),

"pingMs" : 0

},

{

"_id" : 5,

"name" :"mongohost3:28031",

"health" :1,

"state" : 7,

"stateStr" :"ARBITER",

"uptime" :4260,

"lastHeartbeat" : ISODate("2015-07-17T11:11:11Z"),

"lastHeartbeatRecv" :ISODate("2015-07-17T11:11:11Z"),

"pingMs" : 0

}

],

"ok" : 1

}

shard1:PRIMARY>

第二个片

shard2:SECONDARY> rs.status()

{

"set" : "shard2",

"date" : ISODate("2015-07-17T11:09:51Z"),

"myState" : 2,

"syncingTo" : "mongohost2:28018",

"members" : [

{

"_id" : 0,

"name" :"mongohost2:28018",

"health" : 1,

"state" : 1,

"stateStr" :"PRIMARY",

"uptime" :4074,

"optime" :Timestamp(1437127314, 1),

"optimeDate": ISODate("2015-07-17T10:01:54Z"),

"lastHeartbeat" : ISODate("2015-07-17T11:09:51Z"),

"lastHeartbeatRecv" :ISODate("2015-07-17T11:09:50Z"),

"pingMs" : 0,

"electionTime" : Timestamp(1437127325, 1),

"electionDate" : ISODate("2015-07-17T10:02:05Z")

},

{

"_id" : 1,

"name" :"mongohost1:28018",

"health" : 1,

"state" : 2,

"stateStr" :"SECONDARY",

"uptime" :14970,

"optime" :Timestamp(1437127314, 1),

"optimeDate" :ISODate("2015-07-17T10:01:54Z"),

"self" : true

},

{

"_id" : 2,

"name" :"mongohost3:28018",

"health" : 1,

"state" : 2,

"stateStr" :"SECONDARY",

"uptime" :4074,

"optime" :Timestamp(1437127314, 1),

"optimeDate": ISODate("2015-07-17T10:01:54Z"),

"lastHeartbeat" : ISODate("2015-07-17T11:09:51Z"),

"lastHeartbeatRecv" :ISODate("2015-07-17T11:09:50Z"),

"pingMs" : 0,

"syncingTo" :"mongohost2:28018"

},

{

"_id" : 3,

"name" :"mongohost1:28032",

"health" : 1,

"state" : 7,

"stateStr" :"ARBITER",

"uptime" :4076,

"lastHeartbeat" : ISODate("2015-07-17T11:09:50Z"),

"lastHeartbeatRecv" :ISODate("2015-07-17T11:09:51Z"),

"pingMs" : 0

},

{

"_id" : 4,

"name" :"mongohost2:28032",

"health" : 1,

"state" : 7,

"stateStr" :"ARBITER",

"uptime" :4074,

"lastHeartbeat" : ISODate("2015-07-17T11:09:51Z"),

"lastHeartbeatRecv" :ISODate("2015-07-17T11:09:51Z"),

"pingMs" : 0

},

{

"_id" : 5,

"name" :"mongohost3:28032",

"health" : 1,

"state" : 7,

"stateStr" :"ARBITER",

"uptime" :4074,

"lastHeartbeat" :ISODate("2015-07-17T11:09:51Z"),

"lastHeartbeatRecv" :ISODate("2015-07-17T11:09:51Z"),

"pingMs" : 0

}

],

"ok" : 1

}

shard2:SECONDARY>

优化

优化内存策略

echo 0 > /proc/sys/vm/zone_reclaim_mode
vi /proc/sys/vm/zone_reclaim_mode
sysctl -w vm.zone_reclaim_mode=0

常用命令行

mongod :MonoDB 服务端

mongo :MongoDB 客户端

mongoimport: 数据库导入工具

mongoexport : 数据导出工具

mongodump : 数据库备份工具

mongorestore: 数据库恢复工具

mongofiles : GridFS管理工具,可实现对二进制文件的存取

mongostat : 性能分析工具,类似与vmstat

mongotop :性能分析工具,查看mongodb实例读写时间花费

mongoperf :性能分析工具 ,磁盘性能检查工具

mongos : MongoDB集群工具

转载于:https://blog.51cto.com/hexudong/1677040

Mongodb -(3) replica set+sharding相关推荐

  1. Mongodb的Replica Sets + Sharding架构

    MongoDB的Sharding机制解决了海量存储和动态扩容的问题,但离生产环境的高可靠,高可用还有距离,Sharding在单点出现故障时就无能为力了.但是MongoDB的副本集却可以很轻松的处理单点 ...

  2. Mongodb安装搭建Replica Set+Sharding集群

    2019独角兽企业重金招聘Python工程师标准>>> Mongodb安装搭建Replica Set+Sharding集群 一.简介 Replica Set:复制在为数据提供了冗余同 ...

  3. MongoDB 维护Replica Set

    在每个MongoDB(版本 3.2.9) Instance中,都有一个本地数据库(local),用于存储 Replication 进程的信息和本地数据.local 数据库的特性是:位于local数据库 ...

  4. 【Mongodb】如何创建mongodb的replica set

    Replica sets 在主从复制上做的扩展,增加了故障自动切换和自动修复成员节点.下面从技术上介绍如何搭建mongodb的replica set (个人觉得,搭建mongodb本身没有多少干货,重 ...

  5. 公司的实战Replica Sets+Sharding方案

    公司的实战Replica Sets+Sharding方案 公司mongo集群分片实战 准备九台服务器, 分片1: 172.16.0.124:11731 主 172.16.0.127.11731 备 1 ...

  6. Mongo之架构部署(Replica Sets+Sharding)

    一.环境 要构建一个 MongoDB Sharding Cluster,需要三种角色: •Shard Server: mongod 实例,用于存储实际的数据块. •Config Server: mon ...

  7. 【Mongodb】 Replica set的主从切换测试

    Replica set 为我们提供了自动故障切换功能,这个机制是由mongodb自己来操作的,它根据从库的优先级或者数据新鲜度(也就是最新的从主库同步数据的那个节点)来选择primary,而当以前的p ...

  8. 【Mongodb】 Replica set的自动故障切换

    Replica set 为我们提供了自动故障切换功能,这个机制是由mongodb自己来操作的,它根据从库的优先级或者数据新鲜度(也就是最新的从主库同步数据的那个节点)来选择primary,而当以前的p ...

  9. MongoDB Replica Set 选举过程

    Replica Set 选举过程 心跳检测 假设我们有三个节点的replica sets:X,Y和Z节点.在replica sets结构中,这三个节点每2秒会各自向其它两个节点发送一个心跳检测请求.比 ...

最新文章

  1. memcached和redis的区别和应用场景
  2. 【java】兴唐第十五节课
  3. matlab sperman相关,相关系数
  4. 一个需要原创精神的年代
  5. 计算机网络【wireshark抓包分析】
  6. python3多线程queue_Python多线程(3)——Queue模块
  7. Linux/unix不同shell环境下数值运算的处理
  8. MFC小笔记:滑动条与编辑框
  9. docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群
  10. python3廖雪峰云-python3基础教程廖雪峰云_Python GUI库大汇总
  11. make install到指定安装目录
  12. 可发弹幕php,JavaScript直播评论发弹幕切图功能点集合效果代码
  13. 有关威纶通weinview触摸屏HMI 定时器的那些事
  14. Android信鸽推送全解
  15. phpMyAdmin下载、安装和使用入门教程
  16. Shiro源码分析(三)——获取Subject
  17. Scratch软件界面介绍
  18. CAD图纸如何转换成Word文档呢?
  19. HDU 6441 Find Integer 【费马大定理】
  20. 诺兰回归,方舟渡劫——短信登录京东青龙

热门文章

  1. c语言设计四路彩灯显示系统,四路彩灯控制器设计方案.doc
  2. ie8不兼容java项目_常见IE8兼容性问题及解决
  3. 辅助驾驶等级_双AMR电机位置传感器,助力自动驾驶安全出行
  4. 10万码农五年的C语言笔记!你现在知道别人为什么这么优秀了吗?
  5. log4j之log4j2.xml使用
  6. ajax实现上传文件
  7. (二)双线性插值python实现
  8. c语言数组两个值交换,如可交换两个数组中的元素?
  9. python布局管理_Python基础=== Tkinter Grid布局管理器详解
  10. RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one.