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

[经验分享] MongoDB之shard_副本集和分片部署

[复制链接]

尚未签到

发表于 2017-12-16 06:54:28 | 显示全部楼层 |阅读模式
  机器角色分配和拓扑环境如下:
DSC0000.png

DSC0001.png

  -------------------配置副本集s1-------------------------------
  1.创建目录
  在s1h1上创建如下目录
[iyunv@node3 db]# mkdir -p /db/s1/conf

[iyunv@node3 db]# mkdir -p /db/s1/data

[iyunv@node3 db]# mkdir -p /db/s1/log

  在在s1h2上创建如下目录
[iyunv@node4 db]# mkdir -p /db/s1/conf

[iyunv@node4 db]# mkdir -p /db/s1/data

[iyunv@node4 db]# mkdir -p /db/s1/log

  2.创建配置文件
  在s1h1和s1h2上创建s1.cnf,文件保存在conf目录下
  port = 27017
  fork = true
  dbpath = /db/s1/data
  logpath = /db/s1/log/logs
  logappend = true
  shardsvr = true
  replSet = s1
  3.安装mongodb
  在在s1h1和s1h2上做同样的操作
[iyunv@node3 soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz

[iyunv@node3 soft]# mv mongodb-linux-x86_64-2.6.5 /db/s1/mongodb

  4.启动各节点
  在每个节点上做同样的操作
[iyunv@node3 bin]# ./mongod -f /db/s1/conf/s1.cnf

[iyunv@node4 bin]# ./mongod -f /db/s1/conf/s1.cnf

  5.初始化副本集
  登陆副本集中的其中一台机器,执行如下操,我这里登陆是的s1h1
[iyunv@node3 bin]# ./mongo 192.168.56.103:27017

  > use admin
  >config={_id:"s1", members:[{_id:0,host:"192.168.56.103:27017"},{_id:1,host:"192.168.56.104:27017"}]}
  >rs.initiate(config);
  退出重新登陆可以看到该机器为主节点
[iyunv@node3 bin]# ./mongo 192.168.56.103:27017

  MongoDB shell version: 2.6.5
  connecting to: 192.168.56.103:27017/test
  s1:PRIMARY>
  登陆另一台机器s1h2可以看到,该机器为该副本集的从节点
[iyunv@node4 bin]# ./mongo 192.168.56.104:27017

  MongoDB shell version: 2.6.5
  connecting to: 192.168.56.104:27017/test
  s1:SECONDARY>
  到这里副本集s1配置完成
  -------------------配置副本集s2-------------------------------
  1.创建目录
  在s2h1上创建如下目录
[iyunv@node3 db]# mkdir -p /db/s2/conf

[iyunv@node3 db]# mkdir -p /db/s2/data

[iyunv@node3 db]# mkdir -p /db/s2/log

  在在s2h2上创建如下目录
[iyunv@node4 db]# mkdir -p /db/s2/conf

[iyunv@node4 db]# mkdir -p /db/s2/data

[iyunv@node4 db]# mkdir -p /db/s2/log

  2.创建配置文件
  在s2h1和s2h2上创建s2.cnf,文件保存在conf目录下
  port = 27018
  fork = true
  dbpath = /db/s2/data
  logpath = /db/s2/log/logs
  logappend = true
  shardsvr = true
  replSet = s2
  3.安装mongodb
  在在s2h1和s2h2上做同样的操作
[iyunv@node3 soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz

[iyunv@node3 soft]# mv mongodb-linux-x86_64-2.6.5 /db/s2/mongodb

  4.启动各节点
  在每个节点上做同样的操作
[iyunv@node3 bin]# ./mongod -f /db/s2/conf/s2.cnf

[iyunv@node4 bin]# ./mongod -f /db/s2/conf/s2.cnf

  5.初始化副本集
  登陆副本集中的其中一台机器,执行如下操,我这里登陆是的s2h1
[iyunv@node3 bin]# ./mongo 192.168.56.103:27018

  > use admin
  >config={_id:"s2", members:[{_id:0,host:"192.168.56.103:27018"},{_id:1,host:"192.168.56.104:27018"}]}
  >rs.initiate(config);
  登陆s2h1可以看到,该节点为主节点
[iyunv@node3 bin]# ./mongo 192.168.56.103:27018

  MongoDB shell version: 2.6.5
  connecting to: 192.168.56.103:27018/test
  s2:PRIMARY>
  登陆s2h2可以看到,该节点为副节点
[iyunv@node4 bin]# ./mongo 192.168.56.104:27018

  MongoDB shell version: 2.6.5
  connecting to: 192.168.56.104:27018/test
  s2:SECONDARY>
  到这里副本集s2配置完成
  -------------------部署配置服务器01-------------------------------
  1.创建目录
  mkdir -p /db/config_server01/data
  mkdir -p /db/config_server01/log
  mkdir -p /db/config_server01/conf
  2.安装mongodb
[iyunv@node1 soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz

[iyunv@node1 soft]# mv mongodb-linux-x86_64-2.6.5 /db/config_server01/mongodb

  3.创建配置文件
  配置参数文件为config_server.cnf,内容如下:
  port = 27017
  fork = true
  dbpath = /db/config_server01/data
  logpath = /db/config_server01/log/logs
  logappend = true
  configsvr = true
  directoryperdb = true
  4.启动
  #./mongod -f /db/config_server01/conf/config_server.cnf
  -------------------部署配置服务器02-------------------------------
  1.创建目录
  mkdir -p /db/config_server02/data
  mkdir -p /db/config_server02/log
  mkdir -p /db/config_server02/conf
  2.安装mongodb
[iyunv@node1 soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz

[iyunv@node1 soft]# mv mongodb-linux-x86_64-2.6.5 /db/config_server02/mongodb

  3.创建配置文件
  配置参数文件为config_server.cnf,内容如下:
  port = 27017
  fork = true
  dbpath = /db/config_server02/data
  logpath = /db/config_server02/log/logs
  logappend = true
  configsvr = true
  directoryperdb = true
  4.启动
  #./mongod -f /db/config_server02/conf/config_server.cnf
  -------------------部署配置服务器03-------------------------------
  1.创建目录
  mkdir -p /db/config_server03/data
  mkdir -p /db/config_server03/log
  mkdir -p /db/config_server03/conf
  2.安装mongodb
[iyunv@node1 soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz

[iyunv@node1 soft]# mv mongodb-linux-x86_64-2.6.5 /db/config_server03/mongodb

  3.创建配置文件
  配置参数文件为config_server.cnf,内容如下:
  port = 27017
  fork = true
  dbpath = /db/config_server03/data
  logpath = /db/config_server03/log/logs
  logappend = true
  configsvr = true
  directoryperdb = true
  4.启动
  #./mongod -f /db/config_server03/conf/config_server.cnf
  -------------------部署路由服务器01-------------------------------
  1.创建目录
  mkdir -p /db/route_server01/data
  mkdir -p /db/route_server01/log
  mkdir -p /db/route_server01/conf
  2.安装mongodb
[iyunv@node2 soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz

[iyunv@node2 soft]# mv mongodb-linux-x86_64-2.6.5 /db/route_server01/mongodb

  3.创建配置文件
  配置参数文件为route_server.cnf,内容如下:
  port = 27017
  configdb=192.168.56.101:27017,192.168.56.101:27018,192.168.56.101:27019
  logpath = /db/route_server01/log/logs
  fork = true
  4.启动
[iyunv@node2 bin]# ./mongos -f /db/route_server01/conf/route_server.cnf

  5.添加分片服务器
  ./mongo
  mongos>use admin
  mongos>db.runCommand({"addshard":"s1/192.168.56.103:27017,192.168.56.104:27017",allowLocal:true})
  mongos>db.runCommand({"addshard":"s2/192.168.56.103:27018,192.168.56.104:27018",allowLocal:true})
  6.查看分片情况
  mongos> db.runCommand({listshards:1});db.runCommand({listshards:1});
  {
  "shards" : [
  {
  "_id" : "s1",
  "host" : "s1/192.168.56.103:27017,192.168.56.104:27017"
  },
  {
  "_id" : "s2",
  "host" : "s2/192.168.56.103:27018,192.168.56.104:27018"
  }
  ],
  "ok" : 1
  }
  步骤5和步骤6只需要在第一台路由服务器上执行即可.
  -------------------部署路由服务器02-------------------------------
  1.创建目录
  mkdir -p /db/route_server02/data
  mkdir -p /db/route_server02/log
  mkdir -p /db/route_server02/conf
  2.安装mongodb
[iyunv@node2 soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz

[iyunv@node2 soft]# mv mongodb-linux-x86_64-2.6.5 /db/route_server02/mongodb

  3.创建配置文件
  配置参数文件为route_server.cnf,内容如下:
  port = 27018
  configdb=192.168.56.101:27017,192.168.56.101:27018,192.168.56.101:27019
  logpath = /db/route_server02/log/logs
  fork = true
  4.启动
[iyunv@node2 bin]# ./mongos -f /db/route_server02/conf/route_server.cnf

  -------------------部署路由服务器03-------------------------------
  1.创建目录
  mkdir -p /db/route_server03/data
  mkdir -p /db/route_server03/log
  mkdir -p /db/route_server03/conf
  2.安装mongodb
[iyunv@node2 soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz

[iyunv@node2 soft]# mv mongodb-linux-x86_64-2.6.5 /db/route_server03/mongodb

  3.创建配置文件
  配置参数文件为route_server.cnf,内容如下:
  port = 27019
  configdb=192.168.56.101:27017,192.168.56.101:27018,192.168.56.101:27019
  logpath = /db/route_server03/log/logs
  fork = true
  4.启动
[iyunv@node2 bin]# ./mongos -f /db/route_server03/conf/route_server.cnf

  ----------测试--------------------------
  1.在路由服务器上执行
  数据库hxl启用分片功能
  mongos>db.runCommand({"enablesharding":"hxl"});
  2.为集合person设置片键,这里使用id做hash分片
  mongos>use admin
  mongos>db.runCommand({"shardcollection":"hxl.person","key":{"_id":"hashed"}})
  { "collectionsharded" : "hxl.person", "ok" : 1 }
  3.写入数据
  mongos>use hxl
  mongos>for (var i=0;i<100000;i++){db.person.insert({"name":"hxl"+i,"age":i})}
  mongos> db.person.count();
  4.查看数据分布情况
  mongos> db.person.stats()
  {
  "sharded" : true,
  "systemFlags" : 1,
  "userFlags" : 1,
  "ns" : "hxl.person",
  "count" : 100000,
  "numExtents" : 12,
  "size" : 11200000,
  "storageSize" : 22364160,
  "totalIndexSize" : 7636384,
  "indexSizes" : {
  "_id_" : 3254048,
  "_id_hashed" : 4382336
  },
  "avgObjSize" : 112,
  "nindexes" : 2,
  "nchunks" : 4,
  "shards" : {
  "s1" : {
  "ns" : "hxl.person",
  "count" : 49981,
  "size" : 5597872,
  "avgObjSize" : 112,
  "storageSize" : 11182080,
  "numExtents" : 6,
  "nindexes" : 2,
  "lastExtentSize" : 8388608,
  "paddingFactor" : 1,
  "systemFlags" : 1,
  "userFlags" : 1,
  "totalIndexSize" : 3826368,
  "indexSizes" : {
  "_id_" : 1627024,
  "_id_hashed" : 2199344
  },
  "ok" : 1
  },
  "s2" : {
  "ns" : "hxl.person",
  "count" : 50019,
  "size" : 5602128,
  "avgObjSize" : 112,
  "storageSize" : 11182080,
  "numExtents" : 6,
  "nindexes" : 2,
  "lastExtentSize" : 8388608,
  "paddingFactor" : 1,
  "systemFlags" : 1,
  "userFlags" : 1,
  "totalIndexSize" : 3810016,
  "indexSizes" : {
  "_id_" : 1627024,
  "_id_hashed" : 2182992
  },
  "ok" : 1
  }
  },
  "ok" : 1
  }
  mongos>
  可以看到刚才写入的10万条记录已经进行了分片,其中s1分配了49981,s2分配了50019.
  集群启动顺序:
  1.启动副本集s1
  192.168.56.103:27017
  192.168.56.104:27017
[iyunv@node3 bin]# ./mongod -f /db/s1/conf/s1.cnf

[iyunv@node4 bin]# ./mongod -f /db/s1/conf/s1.cnf

  2.启动副本集s2
  192.168.56.103:27018
  192.168.56.104:27018
[iyunv@node3 bin]# ./mongod -f /db/s2/conf/s2.cnf

[iyunv@node4 bin]# ./mongod -f /db/s2/conf/s2.cnf

  3.启动配置服务器
  192.168.56.101
  启动
  #./mongod -f /db/config_server/conf/config_server.cnf
  4.启动路由服务器
  192.168.56.102
  启动
[iyunv@node2 bin]# ./mongos -f /db/route_server/conf/route_server.cnf

  问题
  1.从副本集默认是不可读取的,需要设置进行可读取.
  s1:SECONDARY> show tables
  2016-03-21T16:21:57.258+0800 error: { "$err" : "not master and slaveOk=false", "code" : 13435 } at src/mongo/shell/query.js:131
  s1:SECONDARY> db.getMongo().setSlaveOk();
  2.遇到配置服务器不同步的情况下,需要将之前的配置服务器的config文件拷贝到其他配置服务器的相应路径
  2016-03-29T16:36:09.927+0800 [mongosMain] ERROR: could not verify that config servers are in sync :: caused by :: config servers 192
  .168.56.101:27017 and 192.168.56.101:27018 differ: { chunks: "458d90243d2642fcdadcbd6ea0dea87a", collections: "7afff57cb1d2cdca4eaed
  f6c462c96cd", databases: "8659f3bdedc73744e099a248f94854c0", shards: "6be1adb78a41e5ab733bd10119b0ce1d", version: "bf167dc1df1dac1f
  3.配置服务器必须是1个或是3个,或基数个,否则路由服务器无法启动.

运维网声明 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-424574-1-1.html 上篇帖子: MongoDB中的数据类型 下篇帖子: 玩转mongodb(九):通过log4jmongo来实现分布式系统的日志统一管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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