概念名词解释
- Query Router(mongos) 转发客户端请求到正确分片服务上,多个router分担请求压力
- Config Servers 存储分片数据的元数据信息
- Shards(Replica set) 存储实际数据
服务规划
安装过程
- 拉取Ubuntu镜像,选择版本18.04
docker pull ubuntu:18.04
- 运行三个Ubuntu主机容器
主机1
docker run -it --name ubuntu-21 -d ubuntu:18.04
主机2
docker run -it --name ubuntu-2 -d ubuntu:18.04
主机3
docker run -it --name ubuntu-3 -d ubuntu:18.04
- 分别进入三台容器主机安装mongodb
docker exec -it 容器id /bin/bash
更新安装源
apt-get update
安装mongodb
apt-get install mongodb
- 所有主机,启动configServer
mongod --configsvr --replSet c0 --dbpath ./data/configdb --bind_ip_all --port 27018 >> /dev/null 2>&1
- 连接其中任一主机,将configServer 添加同意分组
mongo --host 172.17.0.4 --port 27018
rs.initiate(
{
_id: "c0",
configsvr: true,
members: [
{ _id : 0, host : "172.17.0.3:27018" },
{ _id : 1, host : "172.17.0.4:27018" },
{ _id : 2, host : "172.17.0.5:27018" }
]})
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yMuzO4Ot-1614321155649)(https://img.coder.date/images/mongodb0d867a2055c336e1.png)]
- 所有主机,启动shard服务
#创建数据文件夹
mkdir -p ./data/db
mkdir -p ./data/db1
mongod --shardsvr --replSet rs0 --dbpath ./data/db --bind_ip_all --port 27019 >>/dev/null 2>&1 &
mongod --shardsvr --replSet rs1 --dbpath ./data/db1 --bind_ip_all --port 27020 >>/dev/null 2>&1 &
- 连接其中主机,将副本集归为同一分组
mongo --host 172.17.0.3 --port 27019
rs.initiate(
{
_id : 'rs0',
members: [
{ _id : 0, host : "172.17.0.3:27019" },
{ _id : 1, host : "172.17.0.4:27019" },
{ _id : 2, host : "172.17.0.5:27019" }
]})
mongo --host 172.17.0.3 --port 27020
rs.initiate(
{
_id : 'rs1',
members: [
{ _id : 0, host : "172.17.0.3:27020" },
{ _id : 1, host : "172.17.0.4:27020" },
{ _id : 2, host : "172.17.0.5:27020" }
]})
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-akc5RYEo-1614321155652)(https://img.coder.date/images/mongodb.png)]
- 启动路由服务,并添加分片信息
mongos --configdb c0/172.17.0.3:27018,172.17.0.4:27018,172.17.0.5:27018 --port 37017 >>/dev/null 2>&1 &
mongo --host 172.17.0.3 --port 37017
sh.addShard('rs0/172.17.0.3:27019')
sh.addShard('rs0/172.17.0.4:27019')
sh.addShard('rs0/172.17.0.5:27019')
sh.addShard('rs1/172.17.0.3.137:27020’)
sh.addShard('rs1/172.17.0.4.138:27020')
sh.addShard('rs1/172.17.0.5.139:27020')
检查分片状态
db.runCommand({listshards:1})
状态查询
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QMRaU7g8-1614321155654)(https://img.coder.date/images/mongo.png)]
- 测试安装情况
sh.enableSharding(‘persondb’)
sh.shardCollection(“persondb.person”,{_id:”hashed”})
use persondb
for(var i=0;i<10;i++){db.person.insert({name:”aaa”+i});}
if the id(key) is range based :
sh.shardCollection(“persondb.id”,{id:1},true)
# 确认插入结果
db.person.stats()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HswRnSNA-1614321155656)(https://img.coder.date/images/count10.png)]
其他命令
开启平衡
sh.enableBalancing(“persondb.person”)
sh.stopBalancer()
sh.getBalancerState()
sh.startBalancer()