互联网服务MongoDB

有老师懂mongodb分片部署么?

参与9

2同行回答

匿名用户匿名用户
具体遇到什么问题哪?如果是不太清楚如何搭建的话,可以参考一下这篇文章,希望对你有所帮助。目标在3台CentOS 6服务器上部署mongodb分片集群,其中副本集(replica set)部署在不同的服务器上,每个服务器有一个配置(config)副本集,两个分片(sharding)副本集,以及一个mongos服务。所以3台服...显示全部

具体遇到什么问题哪?如果是不太清楚如何搭建的话,可以参考一下这篇文章,希望对你有所帮助。

目标
在3台CentOS 6服务器上部署mongodb分片集群,其中副本集(replica set)部署在不同的服务器上,每个服务器有一个配置(config)副本集,两个分片(sharding)副本集,以及一个mongos服务。所以3台服务器总共需要部署12个服务。3台服务器IP分别是:172.16.66.113,172.16.66.114,172.16.66.115,下面以113,114,115来代表某台服务器。
58233173g2i

58233173g2i

准备工作
首先要保证各个服务器之间是连通的,并且防火墙策略中能访问到下面的端口,简单方式关闭各服务器防火墙,如:service iptables stop
保证下面使用的端口号没有被占用
保证个目录整洁干净,如果有历史数据先清空历史数据,主要是dbs目录
主目录
/usr/local/mongodb
mongodb
--bin
----mongd
----mongo
----mongos
----...
--deploy
----dbs
------config
------shard1
------shard2
----etc
------configsvr.conf
------shardsvr1.conf
------shardsvr2.conf
------mongos.conf
----logs
----pids

bin目录
所有mongodb可执行程序,如:mongod,mongo, mongos…
/usr/local/mongodb/bin
deploy目录
所有部署操作统一在这个目录下进行
/usr/local/mongodb/deploy
dbs目录
存放所有数据库数据
/usr/local/mongodb/deploy/dbs
包含三个子目录,分别是:配置服务,分片1服务,分片2服务

  • /usr/local/mongodb/deploy/dbs/config
  • /usr/local/mongodb/deploy/dbs/shard1
  • /usr/local/mongodb/deploy/dbs/shard2
    logs目录
    存放所有日志
    /usr/local/mongodb/deploy/logs
    pids目录
    存放各个服务的进程ID
    /usr/local/mongodb/deploy/pids
    etc目录
    存放各个服务启动的配置信息
    /usr/local/mongodb/deploy/etc
    有三个配置文件,分别是:配置服务,分片1服务,分片2服务,mongos服务的启动配置
    /usr/local/mongodb/deploy/etc/configsvr.conf
    #bind_ip=127.0.0.1
    port=27020
    auth=false
    configsvr=true
    replSet=cfgset
    dbpath=/usr/local/mongodb/deploy/dbs/config
    logpath=/usr/local/mongodb/deploy/logs/config.log
    pidfilepath=/usr/local/mongodb/deploy/pids/config.pid
    fork=true

/usr/local/mongodb/deploy/etc/shardsvr1.conf
#bind_ip=127.0.0.1
port=27031
auth=false
shardsvr=true
replSet=shardset1
dbpath=/usr/local/mongodb/deploy/dbs/shard1
logpath=/usr/local/mongodb/deploy/logs/shard1.log
pidfilepath=/usr/local/mongodb/deploy/pids/shard1.pid
fork=true

/usr/local/mongodb/deploy/etc/shardsvr2.conf
#bind_ip=127.0.0.1
port=27032
auth=false
shardsvr=true
replSet=shardset2
dbpath=/usr/local/mongodb/deploy/dbs/shard2
logpath=/usr/local/mongodb/deploy/logs/shard2.log
pidfilepath=/usr/local/mongodb/deploy/pids/shard2.pid
fork=true

/usr/local/mongodb/deploy/etc/mongos.conf
#bind_ip=127.0.0.1
port=27017
configdb=cfgset/172.16.66.113:27020,172.16.66.114:27020,172.16.66.114:27020
logpath=/usr/local/mongodb/deploy/logs/mongos.log
pidfilepath=/usr/local/mongodb/deploy/pids/mongos.pid
fork=true

port:服务启动的端口号
auth:需不需要授权
configsvr:配置服务
shardsvr:分片服务
replSet:所属副本集的名字
dbpath:数据存放路径
logpath:日志存放路径
pidfilepath:进程ID存放路径
fork:daemon方式启动
configdb:mongos指定分片集群的配置服务
文件准备
每个服务器都将mongodb安装在/usr/local目录下
下载mongodb版本为:mongodb-linux-x86_64-rhel62-3.4.9.tgz
解压到/usr/local目录下,更名为mongodb,此时它只有一个bin目录
每台服务器上准备deploy目录
点击下载上面的deploy目录结构放到mongodb目录下
部署分片集群
注意,所有的操作都在deploy目录下进行,按下面的顺序执行。
创建配置服务副本集
每台服务器上启动一个配置服务
113机器上执行:../bin/mongod -f etc/configsvr.conf
114机器上执行:../bin/mongod -f etc/configsvr.conf
115机器上执行:../bin/mongod -f etc/configsvr.conf
初始化配置服务副本集
在113机器上操作,连接到配置服务(其中一个都可以)
每个服务的端口号请看etc目录下面的配置文件
../bin/mongo –port 27020
初始化配置服务副本集,注意initiate要在primary副本集中操作,某个副本集开始可能不是primary,用rs.status()多查看几次
rs.initiate({_id: "cfgset", configsvr: true, members: [{_id: 0, host: "172.16.66.113:27020"}, {_id: 1, host: "172.16.66.114:27020"}, {_id: 2, host: "172.16.66.115:27020"}]})
1
创建分片1服务副本集
113机器上执行:../bin/mongod -f etc/shardsvr1.conf
114机器上执行:../bin/mongod -f etc/shardsvr1.conf
115机器上执行:../bin/mongod -f etc/shardsvr1.conf
初始化分片1服务副本集
在113机器上操作,连接到分片1服务(其中一个都可以)
../bin/mongo –port 27031
rs.initiate({_id: "shardset1", members: [{_id: 0, host: "172.16.66.113:27031"}, {_id: 1, host: "172.16.66.114:27031"}, {_id: 2, host: "172.16.66.115:27031"}]})
1
创建分片2服务副本集
113机器上执行:../bin/mongod -f etc/shardsvr2.conf
114机器上执行:../bin/mongod -f etc/shardsvr2.conf
115机器上执行:../bin/mongod -f etc/shardsvr2.conf
初始化分片2副本集
在113机器上操作,连接到分片2服务(其中一个都可以)
../bin/mongo –port 27032
rs.initiate({_id: "shardset2", members: [{_id: 0, host: "172.16.66.113:27032"}, {_id: 1, host: "172.16.66.114:27032"}, {_id: 2, host: "172.16.66.115:27032"}]})
1
每台服务器上的副本集都是对等的,我们只需要在其中一台服务器上进行初始化就可以了,其他的副本集会将配置信息自动同步过去,所以上面我们只在113机器上进行副本集的初始化。
启动mongos服务
在每台服务器上启动mongos服务

  • 113机器上执行:../bin/mongos -f etc/mongos.conf
  • 114机器上执行:../bin/mongos -f etc/mongos.conf
  • 115机器上执行:../bin/mongos -f etc/mongos.conf
    连接到mongos
    在113机器上操作
    mongos使用的是默认端口27017,所以后面可以不加–port参数
    ../bin/mongo
    添加所有分片到集群,目前只有两个分片
    sh.addShard("shardset1/172.16.66.113:27031,172.16.66.114:27031,172.16.66.115:27031")
    sh.addShard("shardset2/172.16.66.113:27032,172.16.66.114:27032,172.16.66.115:27032")

为数据库启用分片(test数据库)
sh.enableSharding("test")

使用hash分片某个集合(test数据库中的users集合,username是文档中的key)
sh.shardCollection("test.users", {username: "hashed"})

收起
互联网服务 · 2018-07-18
浏览1712
王希瑞 邀答
liucj2004liucj2004其它undefined
可以先看这篇文章,然后有问题具体描述问题基于MongoDB的分布式数据库架构介绍显示全部

可以先看这篇文章,然后有问题具体描述问题
基于MongoDB的分布式数据库架构介绍

收起
农业其它 · 2018-07-18
浏览1526
王希瑞 邀答

提问者

李丰
系统运维工程师稳定
擅长领域: 服务器数据库双活

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2018-07-18
  • 关注会员:3 人
  • 问题浏览:2186
  • 最近回答:2018-07-18
  • X社区推广