Mongo分片+副本集集群搭建测试

mongo相关概念阐述

请移步mongo官网
mongo副本集相关概念
mongo分片相关概念

搭建思路

副本集作为备份,防止将所有的数据存放在主机上,而主机出现了故障而造成的数据丢失,分片搭建是为了存储海量数据。

搭建图示

在这里插入图片描述

服务器准备

服务器192.168.80.130
服务器192.168.80.133
服务器192.168.80.135
服务器192.168.1.143

mongo服务器部署

服务器192.168.80.130服务器192.168.80.133服务器192.168.80.135服务器 192.168.1.143
Mongosmongosmongos
config serverconfig serverconfig servershard serverB 副节点
shard serverA 主节点shard serverA 副节点shard serverB 主节点shard serverA 仲裁
shard serverB 仲裁

端口配置

mongos ----- 20001
config server ----- 21001
shard server ----- 27004
仲裁节点 ------27005

配置文件

建好配置文件
mkdir -p /usr/local/mongodb/mongons/log
mkdir -p /usr/local/mongodb/confign/data
mkdir -p /usr/local/mongodb/confign/log
mkdir -p /usr/local/mongodb/shardA/data
mkdir -p /usr/local/mongodb/shardA/log
mkdir -p /usr/local/mongodb/shardB/data
mkdir -p /usr/local/mongodb/shardB/log
config server配置
vi /usr/local/mongodb/conf/confign.conf
confign.conf

服务器130 133 135 的配置confign.conf

pidfilepath = /usr/local/mongodb/confign/log/configsrv.pid
dbpath = /usr/local/mongodb/confign/data
logpath = /usr/local/mongodb/confign/log/congigsrv.log
logappend = true
 
bind_ip = 0.0.0.0
port = 21001
fork = true
 
#declare this is a config db of a cluster;
configsvr = true

#副本集名称
replSet=configns
 
#设置最大连接数
maxConns=20000
启动三台服务器的config server
mongod -f /usr/local/mongodb/conf/confign.conf
登录任意一台配置服务器,初始化配置副本集
#连接
mongo --port 21001
#config变量
config = {
...    _id : "configns",
...     members : [
...         {_id : 0, host : "192.168.80.130:21001" },
...         {_id : 1, host : "192.168.80.133:21001" },
...         {_id : 2, host : "192.168.80.135:21001" }
...     ]
... }

#初始化副本集
rs.initiate(config)
配置仲裁节点

配置shardA的仲裁节点—在服务器192.168.1.143上

vi /usr/local/mongodb/conf/shardArbiter.conf

#配置文件内容
#——————————————–
pidfilepath = /usr/local/mongodb/shardA/log/shardA.pid
dbpath = /usr/local/mongodb/shardA/data
logpath = /usr/local/mongodb/shardA/log/shardA.log
logappend = true

bind_ip = 0.0.0.0
port = 27005
fork = true
 
#打开web监控
httpinterface=true
rest=true
 
#副本集名称
replSet=shardA
 
#declare this is a shard db of a cluster;
shardsvr = true
 
#设置最大连接数
maxConns=20000

配置shardB的仲裁节点—在服务器192.168.80.130上

vi /usr/local/mongodb/conf/shardBArbiter.conf

#配置文件内容
#——————————————–
pidfilepath = /usr/local/mongodb/shardB/log/shardB.pid
dbpath = /usr/local/mongodb/shardB/data
logpath = /usr/local/mongodb/shardB/log/shardB.log
logappend = true

bind_ip = 0.0.0.0
port = 27005
fork = true
 
#打开web监控
httpinterface=true
rest=true
 
#副本集名称
replSet=shardB
 
#declare this is a shard db of a cluster;
shardsvr = true
 
#设置最大连接数
maxConns=20000
配置shardA分片副本集

服务器130 服务器133 服务器143(仲裁)

vi /usr/local/mongodb/conf/shardA.conf

#配置文件内容
#——————————————–
pidfilepath = /usr/local/mongodb/shardA/log/shardA.pid
dbpath = /usr/local/mongodb/shardA/data
logpath = /usr/local/mongodb/shardA/log/shardA.log
logappend = true

bind_ip = 0.0.0.0
port = 27004
fork = true
 
#打开web监控
httpinterface=true
rest=true
 
#副本集名称
replSet=shardA
 
#declare this is a shard db of a cluster;
shardsvr = true
 
#设置最大连接数
maxConns=20000

启动三台服务器的shardA server

mongod -f /usr/local/mongodb/conf/shardA.conf

登陆任意一台服务器,初始化副本集

mongo --port 27004
#使用admin数据库
use admin
#定义副本集配置,第三个节点的 "arbiterOnly":true 代表其为仲裁节点。
config = {
...    _id : "shardA",
...     members : [
...         {_id : 0, host : "192.168.80.130:27004" },
...         {_id : 1, host : "192.168.80.133:27004" },
...         {_id : 2, host : "192.168.1.143:27005" , arbiterOnly: true }
...     ]
... }
#初始化副本集配置
rs.initiate(config);
配置shardB分片副本集

服务器130(仲裁) 服务器135(主节点) 服务器143(副节点)

vi /usr/local/mongodb/conf/shardB.conf

#配置文件内容
#——————————————–
pidfilepath = /usr/local/mongodb/shardB/log/shardB.pid
dbpath = /usr/local/mongodb/shardB/data
logpath = /usr/local/mongodb/shardB/log/shardB.log
logappend = true

bind_ip = 0.0.0.0
port = 27004
fork = true
 
#打开web监控
httpinterface=true
rest=true
 
#副本集名称
replSet=shardB
 
#declare this is a shard db of a cluster;
shardsvr = true
 
#设置最大连接数
maxConns=20000

启动三台服务器的shardB server

mongod -f /usr/local/mongodb/conf/shardB.conf

登陆任意一台服务器,初始化副本集

mongo --port 27004
#使用admin数据库
use admin
#定义副本集配置,第三个节点的 "arbiterOnly":true 代表其为仲裁节点。
config = {
...    _id : "shardB",
...     members : [
...         {_id : 0, host : "192.168.80.130:27005" , arbiterOnly: true},
...         {_id : 1, host : "192.168.80.135:27004" },
...         {_id : 2, host : "192.168.1.143:27004" }
...     ]
... }
#初始化副本集配置
rs.initiate(config);
配置路由服务器 mongos

先启动配置服务器和分片服务器,后启动路由实例启动路由实例:(两台机器 130 135)
mongos -f /usr/local/mongodb/conf/mongons.conf

vi /usr/local/mongodb/conf/mongons.conf
#内容
pidfilepath = /usr/local/mongodb/mongos/log/mongos.pid
logpath = /usr/local/mongodb/mongos/log/mongos.log
logappend = true

bind_ip = 0.0.0.0
port = 20001
fork = true

#监听的配置服务器,只能有1个或者3个 configs为配置服务器的副本集名字
configdb = configns/192.168.80.130:21001,192.168.80.133:21001,192.168.80.135:21001

#设置最大连接数
maxConns=20000
启用分片

目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。

登陆任意一台mongos

mongo --port 20001
#使用admin数据库
user  admin
#串联路由服务器与分配副本集
sh.addShard("shardA/192.168.80.130:27004,192.168.80.133:27004,192.168.1.143:27005")
sh.addShard("shardB/192.168.80.130:27005,192.168.80.135:27004,192.168.1.143:27004")
#查看集群状态
sh.status()

设置需要分片的数据库和表(需要在admin库里设置)

#指定testdb分片生效
db.runCommand( { enablesharding :"testdb"});
#指定数据库里需要分片的集合和片键
db.runCommand( { shardcollection : "testdb.table1",key : {id: 1} } )
#设置数据
for(var i=1;i<=1000;i++){
	db.table1.save({"id":i,"x":Math.random(),"name":"xubo","time":"20150819","ops":"testinserttimes"});
}
测试结果

130—serverA主节点 —存储1条数据
133—serverA副节点 —存储1条数据
135—serverB主节点 —存储999条数据
143—serverB副节点 —存储999条数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值