生产MongoDB 分片与集群方案

数据库 其他数据库 MongoDB
Mongo DB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐。Mongo DB很好的实现了面向对象的思想(OO思想),在Mongo DB中 每一条记录都是一个Document对象。本文介绍了一则生产环境下MongoDB实现分片与集群方案的操作实例。

【编者的话】

Mongo DB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐。Mongo DB很好的实现了面向对象的思想(OO思想),在Mongo DB中 每一条记录都是一个Document对象。本文介绍了一则生产环境下MongoDB实现分片与集群方案的操作实例。

一、 mongodb分片与集群拓扑图

生产mongodb 分片与集群 方案

 

二、分片与集群的部署

1.Mongodb的安装

分别在以上3台服务器安装好mongodb

安装方法见安装脚本。

2.Mongod 创建单个分片的副本集

10.68.4.209

①建立数据文件夹和日志文件夹

mdkir /data/{master,slave,arbiter}

mkdir /data/log/mongodb/{master,slave,arbiter} -p

②建立配置文件

  1. #master.conf 
  2.  
  3. dbpath=/data/master 
  4.  
  5. logpath=/data/log/mongodb/master/mongodb.log 
  6.  
  7. pidfilepath=/var/run/mongo_master.pid 
  8.  
  9. #directoryperdb=true 
  10.  
  11. logappend=true 
  12.  
  13. replSet=policydb 
  14.  
  15. port=10002 
  16.  
  17. oplogSize=10000 
  18.  
  19. fork=true 
  20.  
  21. noprealloc=true 
  22.  
  23. profile=1 
  24.  
  25. slowms=200 
  26.  
  27. #slave.conf 
  28.  
  29. dbpath=/data/slave 
  30.  
  31. logpath=/data/log/mongodb/slave/mongodb.log 
  32.  
  33. pidfilepath=/var/run/mongo_slave.pid 
  34.  
  35. #directoryperdb=true 
  36.  
  37. logappend=true 
  38.  
  39. replSet=policydb 
  40.  
  41. port=10001 
  42.  
  43. oplogSize=10000 
  44.  
  45. fork=true 
  46.  
  47. noprealloc=true 
  48.  
  49. profile=1 
  50.  
  51. slowms=200 
  52.  
  53. #arbiter.conf 
  54.  
  55. dbpath=/data/arbiter 
  56.  
  57. logpath=/data/log/mongodb/arbiter/mongodb.log 
  58.  
  59. pidfilepath=/var/run/mongo_arbiter.pid 
  60.  
  61. #directoryperdb=true 
  62.  
  63. logappend=true 
  64.  
  65. replSet=policydb 
  66.  
  67. port=10000 
  68.  
  69. oplogSize=10000 
  70.  
  71. fork=true 
  72.  
  73. noprealloc=true 
  74.  
  75. profile=1 
  76.  
  77. slowms=200 

③启动mongodb

/etc/init.d/mongodb_master start

/etc/init.d/mongodb_slave start

/etc/init.d/mongodb_arbiter start

④配置主、备、仲裁节点

主节点:

  1. # /usr/local/mongodb/bin/mongo 10.68.4.209:10002 
  2.  
  3. MongoDB shell version: 2.4.9 
  4.  
  5. connecting to: 10.68.4.209:10002/test 
  6.  
  7. > use admin 
  8.  
  9. switched to db admin 
  10.  
  11. >config={ _id:"policydb", members:[ {_id:0,host:'10.68.4.209:10002',priority:2}, {_id:1,host:'10.68.4.209:10001',priority:1}, 
  12.  
  13. ... {_id:2,host:'10.68.4.209:10000',arbiterOnly:true}] }; 
  14.  
  15.  
  16. "_id" : "policydb"
  17.  
  18. "members" : [ 
  19.  
  20.  
  21. "_id" : 0
  22.  
  23. "host" : "10.68.4.209:10002"
  24.  
  25. "priority" : 2 
  26.  
  27. }, 
  28.  
  29.  
  30. "_id" : 1
  31.  
  32. "host" : "10.68.4.209:10001"
  33.  
  34. "priority" : 1 
  35.  
  36. }, 
  37.  
  38.  
  39. "_id" : 2
  40.  
  41. "host" : "10.68.4.209:10000"
  42.  
  43. "arbiterOnly" : true 
  44.  
  45.  
  46.  
  47.  
  48. rs.initiate(config) #初始化 
  49.  
  50. rs.status() #查看集群状态 

10.68.4.29

①建立数据文件夹和日志文件夹

mdkir /data/{master,slave,arbiter}

mkdir /data/log/mongodb/{master,slave,arbiter} -p

②建立配置文件

  1. #master.conf 
  2.  
  3. dbpath=/data/master 
  4.  
  5. logpath=/data/log/mongodb/master/mongodb.log 
  6.  
  7. pidfilepath=/var/run/mongo_master.pid 
  8.  
  9. #directoryperdb=true 
  10.  
  11. logappend=true 
  12.  
  13. replSet=policydb2 
  14.  
  15. port=10002 
  16.  
  17. oplogSize=10000 
  18.  
  19. fork=true 
  20.  
  21. noprealloc=true 
  22.  
  23. profile=1 
  24.  
  25. slowms=200 
  26.  
  27. #slave.conf 
  28.  
  29. dbpath=/data/slave 
  30.  
  31. logpath=/data/log/mongodb/slave/mongodb.log 
  32.  
  33. pidfilepath=/var/run/mongo_slave.pid 
  34.  
  35. #directoryperdb=true 
  36.  
  37. logappend=true 
  38.  
  39. replSet=policydb2 
  40.  
  41. port=10001 
  42.  
  43. oplogSize=10000 
  44.  
  45. fork=true 
  46.  
  47. noprealloc=true 
  48.  
  49. profile=1 
  50.  
  51. slowms=200 
  52.  
  53. #arbiter.conf 
  54.  
  55. dbpath=/data/arbiter 
  56.  
  57. logpath=/data/log/mongodb/arbiter/mongodb.log 
  58.  
  59. pidfilepath=/var/run/mongo_arbiter.pid 
  60.  
  61. #directoryperdb=true 
  62.  
  63. logappend=true 
  64.  
  65. replSet=policydb2 
  66.  
  67. port=10000 
  68.  
  69. oplogSize=10000 
  70.  
  71. fork=true 
  72.  
  73. noprealloc=true 
  74.  
  75. profile=1 
  76.  
  77. slowms=200 
  78.  
  79. ③启动mongodb 
  80.  
  81. /etc/init.d/mongodb_master start 
  82.  
  83. /etc/init.d/mongodb_slave start 
  84.  
  85. /etc/init.d/mongodb_arbiter start 

④配置主、备、仲裁节点

主节点:

  1. # /usr/local/mongodb/bin/mongo 10.68.4.209:10002 
  2.  
  3. MongoDB shell version: 2.4.9 
  4.  
  5. connecting to: 10.68.4.209:10002/test 
  6.  
  7. > use admin 
  8.  
  9. switched to db admin 
  10.  
  11. > config={ _id:"policydb2", members:[ {_id:0,host:'10.68.4.29:10002',priority:2}, {_id:1,host:'10.68.4.29:10001',priority:1}, 
  12.  
  13. ... {_id:2,host:'10.68.4.209:10000',arbiterOnly:true}] }; 
  14.  
  15.  
  16. "_id" : "policydb"
  17.  
  18. "members" : [ 
  19.  
  20.  
  21. "_id" : 0
  22.  
  23. "host" : "10.68.4.29:10002"
  24.  
  25. "priority" : 2 
  26.  
  27. }, 
  28.  
  29.  
  30. "_id" : 1
  31.  
  32. "host" : "10.68.4.29:10001"
  33.  
  34. "priority" : 1 
  35.  
  36. }, 
  37.  
  38.  
  39. "_id" : 2
  40.  
  41. "host" : "10.68.4.29:10000"
  42.  
  43. "arbiterOnly" : true 
  44.  
  45.  
  46.  
  47.  
  48. rs.initiate(config) #初始化 
  49.  
  50. rs.status() #查看集群状态 

10.68.4.30

①建立数据文件夹和日志文件夹

mdkir /data/{master,slave,arbiter}

mkdir /data/log/mongodb/{master,slave,arbiter} -p

②建立配置文件

  1. #master.conf 
  2.  
  3. dbpath=/data/master 
  4.  
  5. logpath=/data/log/mongodb/master/mongodb.log 
  6.  
  7. pidfilepath=/var/run/mongo_master.pid 
  8.  
  9. #directoryperdb=true 
  10.  
  11. logappend=true 
  12.  
  13. replSet=policydb3 
  14.  
  15. port=10002 
  16.  
  17. oplogSize=10000 
  18.  
  19. fork=true 
  20.  
  21. noprealloc=true 
  22.  
  23. profile=1 
  24.  
  25. slowms=200 
  26.  
  27. #slave.conf 
  28.  
  29. dbpath=/data/slave 
  30.  
  31. logpath=/data/log/mongodb/slave/mongodb.log 
  32.  
  33. pidfilepath=/var/run/mongo_slave.pid 
  34.  
  35. #directoryperdb=true 
  36.  
  37. logappend=true 
  38.  
  39. replSet=policydb3 
  40.  
  41. port=10001 
  42.  
  43. oplogSize=10000 
  44.  
  45. fork=true 
  46.  
  47. noprealloc=true 
  48.  
  49. profile=1 
  50.  
  51. slowms=200 
  52.  
  53. #arbiter.conf 
  54.  
  55. dbpath=/data/arbiter 
  56.  
  57. logpath=/data/log/mongodb/arbiter/mongodb.log 
  58.  
  59. pidfilepath=/var/run/mongo_arbiter.pid 
  60.  
  61. #directoryperdb=true 
  62.  
  63. logappend=true 
  64.  
  65. replSet=policydb3 
  66.  
  67. port=10000 
  68.  
  69. oplogSize=10000 
  70.  
  71. fork=true 
  72.  
  73. noprealloc=true 
  74.  
  75. profile=1 
  76.  
  77. slowms=200 

③启动mongodb

/etc/init.d/mongodb_master start

/etc/init.d/mongodb_slave start

/etc/init.d/mongodb_arbiter start

④配置主、备、仲裁节点

主节点:

  1. # /usr/local/mongodb/bin/mongo 10.68.4.209:10002 
  2.  
  3. MongoDB shell version: 2.4.9 
  4.  
  5. connecting to: 10.68.4.209:10002/test 
  6.  
  7. > use admin 
  8.  
  9. switched to db admin 
  10.  
  11. > config={ _id:"policydb3", members:[ {_id:0,host:'10.68.4.30:10002',priority:2}, {_id:1,host:'10.68.4.30:10001',priority:1}, 
  12.  
  13. ... {_id:2,host:'10.68.4.30:10000',arbiterOnly:true}] }; 
  14.  
  15.  
  16. "_id" : "policydb"
  17.  
  18. "members" : [ 
  19.  
  20.  
  21. "_id" : 0
  22.  
  23. "host" : "10.68.4.30:10002"
  24.  
  25. "priority" : 2 
  26.  
  27. }, 
  28.  
  29.  
  30. "_id" : 1
  31.  
  32. "host" : "10.68.4.30:10001"
  33.  
  34. "priority" : 1 
  35.  
  36. }, 
  37.  
  38.  
  39. "_id" : 2
  40.  
  41. "host" : "10.68.4.30:10000"
  42.  
  43. "arbiterOnly" : true 
  44.  
  45.  
  46.  
  47.  
  48. rs.initiate(config) #初始化 
  49.  
  50. rs.status() #查看集群状态 

#p#

2.Mongod 创建单个分片的配置服务器

① 创建配置目录

10.68.4.209 mkdir /data/config

10.68.4.29 mkdir /data/config

10.68.4.30 mkdir /data/config

②准备配置服务器的配置文件

3个服务器的配置服务器的配置文件一致

  1. #config.conf 
  2.  
  3. dbpath=/data/config 
  4.  
  5. logpath=/data/log/mongodb/config/mongodb.log 
  6.  
  7. pidfilepath=/var/run/mongo_config.pid 
  8.  
  9. directoryperdb=true 
  10.  
  11. logappend=true 
  12.  
  13. port=10003 
  14.  
  15. fork=true 
  16.  
  17. configsvr=true 

③启动配置服务器

/etc/init.d/mongodb_config start

3.Mongod 创建并配置mongos和开启分片模式

① 创建日志目录

Mkdir -p /data/log/mongodb/mongos/

② 准备mongos的配置文件

  1. #mongos.conf 
  2.  
  3. logpath=/data/log/mongodb/mongos/mongodb.log 
  4.  
  5. pidfilepath=/var/run/mongo_mongos.pid 
  6.  
  7. logappend=true 
  8.  
  9. port=10004 
  10.  
  11. fork=true 
  12.  
  13. configdb=10.68.4.209:10003,10.68.4.29:10003,10.68.4.30:1000 

③ 启动mongos

/etc/init.d/mongodb_mongos start

④ 配置分片

  1. sh.addShard("policydb/10.68.4.209:10002"
  2.  
  3. sh.addShard("policydb2/10.68.4.29:10002"
  4.  
  5. sh.addShard("policydb3/10.68.4.30:10002"
  6.  
  7. sh.enableSharding("policydb"
  8.  
  9. db.runCommand({"shardcollection":"policydb.fullPolicyTextInfo_history""key":{"key":1}}) 
  10.  
  11. db.printShardingStatus() #查看分片状态 
  12.  
  13. sh.status({verbose:true}) 
  14.  
  15. sh.status() 

3.快速创建副本集和配置服务脚本

上图

1.图1

 

生产MongoDB 分片与集群方案

2.图2 config.conf配置文件

 

生产MongoDB 分片与集群方案

3.图3

 

生产MongoDB 分片与集群方案

附mongodb一键安装脚本:

http://pan.baidu.com/s/1c0zvP7M

附mongodb副本集和配置服务器一键配置脚本:

http://pan.baidu.com/s/1GuQ0A

博文出处:http://my.oschina.net/pwd/blog/411439

责任编辑:Ophira 来源: oschina博客
相关推荐

2023-02-14 08:01:32

2017-04-01 17:30:36

MongoDB分片实现

2022-02-08 14:35:36

分片集群数据库mongo

2013-11-25 10:45:04

MongoDB

2013-11-28 09:48:55

MongoDBSharding分片

2019-02-19 10:12:41

Redis分片数据

2022-09-15 08:31:11

主从复制模式Docker

2022-02-11 08:41:19

WindowsRedis集群

2019-09-03 15:45:31

Redis分片集群

2017-04-26 08:51:36

MongoDB集群实战

2023-09-01 10:20:05

数据库解密

2011-07-28 13:24:03

MongoDBAuto-shardi

2020-12-09 08:59:59

MongoDB复合索事故

2023-10-09 07:31:25

2011-07-26 16:53:29

MongoDB数据库自动分片技术

2018-01-29 12:39:56

数据库MongoDB集群

2022-06-27 07:33:19

微服务Loki

2019-10-11 10:52:42

Web架构MongoDB

2023-11-14 10:06:46

数据库性能

2023-11-21 09:38:09

点赞
收藏

51CTO技术栈公众号