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

[经验分享] MongoDB分布式集群搭建(分片加副本集)

[复制链接]

尚未签到

发表于 2017-12-15 17:26:31 | 显示全部楼层 |阅读模式
# 环境准备

服务器
DSC0000.png


# 环境搭建

文件配置和目录添加
  新建目录的操作要在三台机器中进行,为配置服务器新建数据目录和日志目录
  

mkdir -p $MONGODB_HOME/config/data  
mkdir -p $MONGODB_HOME/config/log
  

  为分片服务器新建数据目录和日志目录
  

mkdir -p $MONGODB_HOME/shared1/data  
mkdir -p $MONGODB_HOME/shared1/log
  
mkdir -p $MONGODB_HOME/shared2/data
  
mkdir -p $MONGODB_HOME/shared2/log
  
mkdir -p $MONGODB_HOME/shared3/data
  
mkdir -p $MONGODB_HOME/shared3/log
  

  为路由服务器新建数据目录和日志目录(路由服务器只用到日志目录)
  

mkdir -p $MONGODB_HOME/mongos/log  

  

配置服务器搭建
  在三台机器上做相同的配置
  #vim $MONGODB_HOME/conf/config.cfg
  

## 配置文件内容  
pidfilepath=/root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/config/log/configsrv.pid
  
dbpath=/root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/config/data
  
logpath=/root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/config/log/congigsrv.log
  
logappend = true
  
bind_ip = 0.0.0.0
  
port = 21000
  
fork = true
  

  
#declare this is a config db of a cluster;
  
configsvr = true
  

  
#副本集名称
  
replSet=configs
  

  
#设置最大连接数
  
maxConns=20000
  

  启动三台机器上的mongo实例,
  
mongod -f $MONGODB_HOME/conf/config.cfg
  登录任意一台config服务器,进行初始化
  

#mongo --port 21000  

  
config = {
  "_id": "configs",
  "members": [
  {
  "_id": 0,
  "host": "192.168.102.3:21000"
  },
  {
  "_id": 1,
  "host": "192.168.102.4:21000"
  },
  {
  "_id": 2,
  "host": "192.168.102.5:21000"
  }
  ]
  
}
  

分片服务器搭建
  每个分片服务都是有3台机器上的复制集组成,所以以下每个分片服务的配置要在三台机器上进行相同的操作

第一个分片服务器的搭建
  新建配置文件
  #vim $MONGODB_HOME/conf/shared1.cfg
  

#配置文件内容  

  
pidfilepath = /root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/shared1/log/shared1.pid
  
dbpath = /root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/shared1/data
  
logpath = /root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/shared1/log/shared1.log
  
logappend = true
  

  
bind_ip = 0.0.0.0
  
port = 27001
  
fork = true
  

  
#打开web监控
  
httpinterface=true
  
rest=true
  

  
#副本集名称
  
replSet=shared1
  

  
#declare this is a shard db of a cluster;
  
shardsvr = true
  

  
#设置最大连接数
  
maxConns=20000
  

  然后启动每个机器上的分片服务,
  
mongod -f $MONGODB_HOME/conf/shared1.cfg
  登录任意分片服务器,进行初始化
  

#mongo --port 27001  
config={
  "_id": "shared1",
  "members": [
  {
  "_id": 0,
  "host": "192.168.102.3:27001"
  },
  {
  "_id": 1,
  "host": "192.168.102.4:27001"
  },
  {
  "_id": 2,
  "host": "192.168.102.5:27001",
  "arbiterOnly": true
  }
  ]
  
}
  

  

第二个分片服务器的搭建
  新建配置文件
  

#vim $MONGODB_HOME/conf/shared2.cfg  
pidfilepath = /root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/shared2/log/shared2.pid
  
dbpath = /root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/shared2/data
  
logpath = /root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/shared2/log/shared2.log
  
logappend = true
  

  
bind_ip = 0.0.0.0
  
port = 27002
  
fork = true
  

  
#打开web监控
  
httpinterface=true
  
rest=true
  

  
#副本集名称
  
replSet=shared2
  

  
#declare this is a shard db of a cluster;
  
shardsvr = true
  

  
#设置最大连接数
  
maxConns=20000
  

  然后启动每个机器上的分片服务,
  
mongod -f $MONGODB_HOME/conf/shared2.cfg
  登录任意分片服务器,进行初始化
  

#mongo --port 27002  
config={
  "_id": "shared2",
  "members": [
  {
  "_id": 0,
  "host": "192.168.102.3:27002"
  },
  {
  "_id": 1,
  "host": "192.168.102.4:27002",
  "arbiterOnly": true
  },
  {
  "_id": 2,
  "host": "192.168.102.5:27002"
  }
  ]
  
}
  

  

  

第三个分片服务器的搭建
  新建配置文件
  

#vim $MONGODB_HOME/conf/shared3.cfg  
pidfilepath = /root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/shared3/log/shared3.pid
  
dbpath = /root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/shared3/data
  
logpath = /root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/shared3/log/shared3.log
  
logappend = true
  

  
bind_ip = 0.0.0.0
  
port = 27003
  
fork = true
  

  
#打开web监控
  
httpinterface=true
  
rest=true
  

  
#副本集名称
  
replSet=shared3
  

  
#declare this is a shard db of a cluster;
  
shardsvr = true
  

  
#设置最大连接数
  
maxConns=20000
  

  然后启动每个机器上的分片服务,
  
mongod -f $MONGODB_HOME/conf/shared3.cfg
  登录任意分片服务器,进行初始化
  

#mongo --port 27003  
config={
  "_id": "shared3",
  "members": [
  {
  "_id": 0,
  "host": "192.168.102.3:27003"
  },
  {
  "_id": 1,
  "host": "192.168.102.4:27003",
  "arbiterOnly": true
  },
  {
  "_id": 2,
  "host": "192.168.102.5:27003"
  }
  ]
  
}
  

  

  

路由服务器搭建
  路由服务器同样也是要在三台机器上做相同的配置和操作
  

pidfilepath = /root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/mongos/log/mongos.pid  
logpath = /root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/mongos/log/mongos.log
  
logappend = true
  

  
bind_ip = 0.0.0.0
  
port = 20000
  
fork = true
  

  
#监听的配置服务器,只能有1个或者3个 configs为配置服务器的副本集名字
  
configdb = configs/192.168.102.3:21000,192.168.102.4:21000,192.168.102.5:21000
  

  
#设置最大连接数
  
maxConns=20000
  

  

登录mongos服务,在程序里面进行设置让分片生效
  

#mongo --port 20000  
use admin
  
sh.addShard("shared1/192.168.102.3:27001,192.168.102.4:27001,192.168.102.5:27001")
  
sh.addShard("shared2/192.168.102.3:27002,192.168.102.4:27002,192.168.102.5:27002")
  
sh.addShard("shared3/192.168.102.3:27003,192.168.102.4:27003,192.168.102.5:27003")
  

  

指定相应的数据库与表的分片生效
  

#指定testdb分片生效  
db.runCommand( { enablesharding :"testdb"});
  
#指定数据库里需要分片的集合和片键
  
db.runCommand( { shardcollection : "testdb.table1",key : {id: 1} } )
  

  

# 分片测试
  登录mongos进行数据的插入。具体过程如下:
  

mongo  192.168.102.3:20000  
#使用testdb
  
use  testdb;
  
#插入测试数据
  
for (var i = 1; i <= 100000; i++)
  
db.table1.save({id:i,"test1":"testval1"});
  
#查看分片情况如下,部分无关信息省掉了
  
db.table1.stats();
  

  
{
  "sharded" : true,
  "ns" : "testdb.table1",
  "count" : 100000,
  "numExtents" : 13,
  "size" : 5600000,
  "storageSize" : 22372352,
  "totalIndexSize" : 6213760,
  "indexSizes" : {
  "_id_" : 3335808,
  "id_1" : 2877952
  },
  "avgObjSize" : 56,
  "nindexes" : 2,
  "nchunks" : 3,
  "shards" : {
  "shard1" : {
  "ns" : "testdb.table1",
  "count" : 42183,
  "size" : 0,
  ...
  "ok" : 1
  },
  "shard2" : {
  "ns" : "testdb.table1",
  "count" : 38937,
  "size" : 2180472,
  ...
  "ok" : 1
  },
  "shard3" : {
  "ns" : "testdb.table1",
  "count" :18880,
  "size" : 3419528,
  ...
  "ok" : 1
  }
  },
  "ok" : 1
  
}
  

  分片的key的设置会影响每个分片的数据量。

# 集群维护

启动集群
  启动集群的顺序是:
  
1,启动配置服务。
  
2,启动分片服务。
  
3,启动路由服务。
  JackerWang 于2017年8月29日上午的广州
  个人技术站点

运维网声明 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-424438-1-1.html 上篇帖子: mongodb卸载再重装 下篇帖子: mongodb多表查询
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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