mongodb版本:4.2.2
1.關閉系統(tǒng)防火墻
2.配置域名解析
在3臺虛擬機上分別執(zhí)行以下3條命令,注意替換實際IP地址
echo "192.168.119.137 geekdemo1 member1.example.com member2.example.com" >> /etc/hosts
echo "192.168.119.138 geekdemo2 member3.example.com member4.example.com" >> /etc/hosts
echo "192.168.119.139 geekdemo3 member5.example.com member6.example.com" >> /etc/hosts
3.準備分片目錄
在各服務器上創(chuàng)建數(shù)據(jù)目錄,我們使用/data,請按自己需要修改為其他目錄:
在member1/member3/member5上執(zhí)行以下命令:
mkdir -p /data/shard1/
mkdir -p /data/config/
在member2/member4/member6上執(zhí)行以下命令:
mkdir -p /data/shard2/
mkdir -p /data/mongos/
4.創(chuàng)建第一個分片用的復制集
在member1/member3/member5上執(zhí)行以下命令。
mongod --bind_ip 0.0.0.0 --replSet shard1 --dbpath /data/shard1 --logpath /data/shard1/mongod.log --port 27010 --fork --shardsvr --wiredTigerCacheSizeGB 1
5.初始化第一個分片復制集
mongo --host member1.example.com:27010
rs.initiate({
_id:"shard1",
"members":[
{
"_id":0,
"host":"member1.example.com:27010"
},
{
"_id":1,
"host":"member3.example.com:27010"
},
{
"_id":2,
"host":"member5.example.com:27010"
}
]
});
查看狀態(tài)rs.status();
6.創(chuàng)建config server復制集
在member1/member3/member5上執(zhí)行以下命令
mongod --bind_ip 0.0.0.0 --replSet config --dbpath /data/config --logpath /data/config/mongod.log --port 27019 --fork --configsvr --wiredTigerCacheSizeGB 1
7.初始化config server復制集
mongo --host member1.example.com:27019
rs.initiate({
_id:"config",
"members":[
{
"_id":0,
"host":"member1.example.com:27019"
},
{
"_id":1,
"host":"member3.example.com:27019"
},
{
"_id":2,
"host":"member5.example.com:27019"
}
]
});
8.在第一臺機器上搭建mongos
mongos --bind_ip 0.0.0.0 --logpath /data/mongos/mongos.log --port 27017 --fork --configdb config/member1.example.com:27019,member3.example.com:27019,member5.example.com:27019
連接到mongos,添加分片
mongo --host member1.example.com:27017
sh.addShard("shard1/member1.example.com:27010,member3.example.com:27010,member5.example.com:27010");
9.創(chuàng)建分片表
連接到mongos,創(chuàng)建分片集合
mongo --host member1.example.com:27017
mongos>sh.status()
mongos>sh.enableSharding("foo");
mongos>sh.shardCollection("foo.bar",{_id:'hashed'});
mongos>sh.status();
插入測試數(shù)據(jù)
use foo
for(var i=0;i<10000;i++){
db.bar.insert({i:i});
}
10.創(chuàng)建第2個分片的復制集
在member2/member4/member6上執(zhí)行以下命令。
mongod --bind_ip 0.0.0.0 --replSet shard2 --dbpath /data/shard2 --logpath /data/shard2/mongod.log --port 27011 --fork --shardsvr --wiredTigerCacheSizeGB 1
11.初始化第二個分片的復制集
mongo --host member2.example.com:27011
rs.initiate({
_id:"shard2",
"members":[
{
"_id":0,
"host":"member2.example.com:27011"
},
{
"_id":1,
"host":"member4.example.com:27011"
},
{
"_id":2,
"host":"member6.example.com:27011"
}
]
});
12.加入第2個分片
連接到mongos,添加分片
mongo --host member1.example.com:27017
sh.addShard("shard2/member2.example.com:27011,member4.example.com:27011,member6.example.com:27011");
sh.status();
測試:
連接mongos
mongo --host member1.example.com:27017
連接分片1
mongo --host member1.example.com:27010
連接分片2
mongo --host member2.example.com:27011
查詢所有的文檔:
use foo;
db.bar.find({});
db.bar.count();
db.bar.find({i:"10001"});
db.bar.insert({i:10001});