mongodb分片技术调研
环境信息
操作系统: centos
mogodb版本:4.0.5
虚拟机: 172.30.0.181 172.30.0.182 172.30.0.183
集群环境:
2个分片复制集
shard1(172.30.0.181:27017 172.30.0.182:27017 172.30.0.183:27017)
shard1(172.30.0.181:27018 172.30.0.182:27018 172.30.0.183:27018)
1个config复制集
172.30.0.181:28018 172.30.0.182:28018 172.30.0.183:28018
1个mongos节点
28017
搭建分片复制
解压安装包
tar xvf mongodb-linux-x86_64-4.0.5.tar
shard1(rx_rep1)复制集
#配置文件
bind_ip=0.0.0.0
fork=true
dbpath=/usr/mongodb/mongodb-linux-x86_64-4.0.5/data/db/
port=27017
logpath=/usr/mongodb/mongodb-linux-x86_64-4.0.5/data/logs/mongodb.log
logappend=true
replSet=rx_rep1
smallfiles=true
shardsvr=true
启动shard1复制集
/usr/mongodb/mongodb-linux-x86_64-4.0.5/bin/mongod -f /usr/mongodb/mongodb.conf
shard2(rx_rep2)复制集
bind_ip=0.0.0.0
fork=true
dbpath=/usr/mongodb/mongodb-linux-x86_64-4.0.5/data/db2/
port=27018
logpath=/usr/mongodb/mongodb-linux-x86_64-4.0.5/data/logs2/mongodb2.log
logappend=true
replSet=rx_rep2
smallfiles=true
shardsvr=true
启动shard2复制集
/usr/mongodb/mongodb-linux-x86_64-4.0.5/bin/mongod -f /usr/mongodb/mongodb2.conf
添加防火墙
[root@localhost mongodb]# iptables -I INPUT -p tcp -m tcp --dport 27017 -j ACCEPT
[root@localhost mongodb]# iptables -I INPUT -p tcp -m tcp --dport 27018 -j ACCEPT
[root@localhost mongodb]# iptables -I INPUT -p tcp -m tcp --dport 28018 -j ACCEPT
[root@localhost mongodb]# iptables -I INPUT -p tcp -m tcp --dport 28017 -j ACCEPT
[root@localhost mongodb]# iptables-save
登录复制集,添加初始化配置
进入mongodb客户端
shard1客户端
/usr/mongodb/mongodb-linux-x86_64-4.0.5/bin/mongo -port 27017
配置shard1复制集
var config = {"_id":"rx_rep1",
"members":[
{"_id":0,host:"172.30.0.181:27017"},
{"_id":1,host:"172.30.0.182:27017"},
{"_id":2,host:"172.30.0.183:27017"}
]
}
初始化复制集
rs.initiate(config)
查看复制集状态
rs.status()
-----
shard2复制集初始化
shard2客户端
/usr/mongodb/mongodb-linux-x86_64-4.0.5/bin/mongo -port 27018
配置shard2复制集
var config = {"_id":"rx_rep2",
"members":[
{"_id":0,host:"172.30.0.181:27018"},
{"_id":1,host:"172.30.0.182:27018"},
{"_id":2,host:"172.30.0.183:27018"}
]
}
初始化复制集
rs.initiate(config)
查看复制集状态
rs.status()
搭建config节点复制集
创建config节点配置文件:mongocfg.conf
bind_ip=0.0.0.0
fork=true
dbpath=/usr/mongodb/mongodb-linux-x86_64-4.0.5/cfg/data/db2/
port=28018
logpath=/usr/mongodb/mongodb-linux-x86_64-4.0.5/cfg/logs/cfg.log
logappend=true
# 配置节点的复制集名称
replSet=configRepSet
smallfiles=true
#配置复制集
configsvr=true
启动配置复制集合
/usr/mongodb/mongodb-linux-x86_64-4.0.5/bin/mongod -f /usr/mongodb/mongodb-linux-x86_64-4.0.5/cfg/mongocfg.conf
初始化配置节点
登录客户端
/usr/mongodb/mongodb-linux-x86_64-4.0.5/bin/mongo -port 28018
初始化
var config = {"_id":"configRepSet",
"members":[
{"_id":0,host:"172.30.0.181:28018"},
{"_id":1,host:"172.30.0.182:28018"},
{"_id":2,host:"172.30.0.183:28018"}
]
}
初始化复制集
rs.initiate(config)
查看复制集状态
rs.status()
mongos节点
mongos配置文件mongos.conf
logpath=/usr/mongodb/mongodb-linux-x86_64-4.0.5/mongos/log/mongos.log
logappend = true
port = 28017
fork = true
configdb = configRepSet/172.30.0.181:28018,172.30.0.182:28018,172.30.0.183:28018
maxConns=20000
bind_ip=0.0.0.0
/usr/mongodb/mongodb-linux-x86_64-4.0.5/bin/mongos -config /usr/mongodb/mongodb-linux-x86_64-4.0.5/mongos/conf/mongos.conf
启动分片功能
链接mongo:
/usr/mongodb/mongodb-linux-x86_64-4.0.5/bin/mongo --host 172.30.0.183 --port 28017
创建数据集
use hostTrack
添加分片,只需在一台机器执行便可:
sh.addShard("rx_rep1/172.30.0.181:27017,172.30.0.182:27017,172.30.0.183:27017")
sh.addShard("rx_rep2/172.30.0.181:27018,172.30.0.182:27018,172.30.0.183:27018")
查看集群状态:
sh.status()
模拟写入数据
use hostTrack
for(i=1;i<=50000;i++){db.user.insert({“id”:i,“name”:“jack”+i})}
启用数据库分片
sh.enableSharding(“hostTrack”)
建立索引,对表进行分片
db.user.createIndex({“id”:1}) # 以"id"做为索引
sh.shardCollection(“hostTrack.user”,{“id”:1}) # 根据"id"对user表进行分片
sh.shardCollection(“user_center.users”,{“name”:1})
sh.status() # 查看分片状况