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 |
---|---|---|---|
Mongos | mongos | mongos | |
config server | config server | config server | shard 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条数据