结构图
配置分片A
1 新建如下目录
2 分别启动分片A的三个节点
[root@localhost bin]# ./mongod --port 30001 --shardsvr --replSet shard-a --dbpath /usr/local/mongodb-linux-x86_64-3.4.4/shard/shard-a-1/ --logpath /usr/local/mongodb-linux-x86_64-3.4.4/shard/shard-a-1/1.log --fork --nojournal
[root@localhost bin]# ./mongod --port 30002 --shardsvr --replSet shard-a --dbpath /usr/local/mongodb-linux-x86_64-3.4.4/shard/shard-a-2/ --logpath /usr/local/mongodb-linux-x86_64-3.4.4/shard/shard-a-2/1.log --fork --nojournal
[root@localhost bin]# ./mongod --port 30003 --shardsvr --replSet shard-a --dbpath /usr/local/mongodb-linux-x86_64-3.4.4/shard/shard-a-3/ --logpath /usr/local/mongodb-linux-x86_64-3.4.4/shard/shard-a-3/1.log --fork --nojournal
3 配置分片A这个副本集
连接mongo 30001这个节点
[root@localhost bin]# ./mongo --port 30001
初始化副本集
rs.initiate(
{
"_id":"shard-a",
"members":[
{
"_id":0,
"host":"192.168.7.127:30001"
}
]
}
);
添加从节点
rs.add("192.168.7.127:30002")
添加仲裁节点
rs.add("192.168.7.127:30003",{arbiterOnly:true})
配置分片B
1 新建如下目录
2 分别启动分片B的三个节点
[root@localhost bin]# ./mongod --port 40001 --shardsvr --replSet shard-b --dbpath /usr/local/mongodb-linux-x86_64-3.4.4/shard/shard-b-1/ --logpath /usr/local/mongodb-linux-x86_64-3.4.4/shard/shard-b-1/1.log --fork --nojournal
[root@localhost bin]# ./mongod --port 40002 --shardsvr --replSet shard-b --dbpath /usr/local/mongodb-linux-x86_64-3.4.4/shard/shard-b-2/ --logpath /usr/local/mongodb-linux-x86_64-3.4.4/shard/shard-b-2/1.log --fork --nojournal
[root@localhost bin]# ./mongod --port 40003 --shardsvr --replSet shard-b --dbpath /usr/local/mongodb-linux-x86_64-3.4.4/shard/shard-b-3/ --logpath /usr/local/mongodb-linux-x86_64-3.4.4/shard/shard-b-3/1.log --fork --nojournal
3 配置分片A这个副本集
连接mongo 40001这个节点
[root@localhost bin]# ./mongo --port 40001
初始化副本集
rs.initiate(
{
"_id":"shard-b",
"members":[
{
"_id":0,
"host":"192.168.7.127:40001"
}
]
}
);
添加从节点
rs.add("192.168.7.127:40002")
添加仲裁节点
rs.add("192.168.7.127:40003",{arbiterOnly:true})
启动配置服务器
1 先建立如下文件夹
2 分别启动配置服务器
[root@localhost bin]# ./mongod --configsvr --port 20001 --replSet cfgReplSet --dbpath /usr/local/mongodb-linux-x86_64-3.4.4/shard/conf1/ --logpath /usr/local/mongodb-linux-x86_64-3.4.4/shard/conf1/l.log --fork
[root@localhost bin]# ./mongod --configsvr --port 20002 --replSet cfgReplSet --dbpath /usr/local/mongodb-linux-x86_64-3.4.4/shard/conf2/ --logpath /usr/local/mongodb-linux-x86_64-3.4.4/shard/conf2/l.log --fork
[root@localhost bin]# ./mongod --configsvr --port 20003 --replSet cfgReplSet --dbpath /usr/local/mongodb-linux-x86_64-3.4.4/shard/conf3/ --logpath /usr/local/mongodb-linux-x86_64-3.4.4/shard/conf3/l.log --fork
3 配置 配置服务器这个副本集
连接mongo 20001这个节点
[root@localhost bin]# ./mongo --port 20001
初始化副本集
rs.initiate(
{
"_id":"cfgReplSet",
"members":[
{
"_id":0,
"host":"192.168.7.127:20001"
}
]
}
);
添加从节点
rs.add("192.168.7.127:20002")
添加从节点 (注意这里没有仲裁节点)
rs.add("192.168.7.127:20003")
启动路由
1 先建立如下文件夹
/usr/local/mongodb-linux-x86_64-3.4.4/shard/route
2 启动路由
[root@localhost bin]# ./mongos --port 10000 --configdb cfgReplSet/192.168.7.127:20001,192.168.7.127:20002,192.168.7.127:20003 --logpath /usr/local/mongodb-linux-x86_64-3.4.4/shard/route/l.log --fork
配置集群
1 连接路由节点
[root@localhost bin]# ./mongo --port 10000
2 添加分片
添加分片A (这里没有添加仲裁节点)
mongos> sh.addShard("shard-a/192.168.7.127:30001,192.168.7.127:30002")
添加分片B
mongos> sh.addShard("shard-b/192.168.7.127:40001,192.168.7.127:40002")
3 查看数据库
输入命令
mongos> show dbs
输出结果
admin 0.000GB
config 0.000GB
会发现有两个数据库 查看一下config数据库中的表
mongos> use config
mongos> show collections
输出结果
actionlog
changelog
chunks
databases
lockpings
locks
mongos
settings
shards
system.indexes
version
可以发现config数据库就存放了分片的信息
测试分片
目标:通过Java 驱动的方式写入到 数据库 cloud-users的表 user一千条数据
1 开启 cloud-uses 数据库分片,不管这个数据库是否存在
mongos> sh.enableSharding("cloud-users")
2 开启表 user的 分片,不管表是否存在直接执行命令即可 , 分片键 由 age 和 id组合而成
sh.shardCollection("cloud-users.user",{"age":1,"_id":1})
3 Java驱动执行代码
coll = new MongoClient( "192.168.7.127", 10000).getDatabase("cloud-users").getCollection("user");
for(int i = 0 ; i < 1000 ; i ++){
Document doc = new Document();
User u = User.initUser();
doc.put("address", u.getAddress());
doc.put("age", u.getAge());
doc.put("email", u.getEmail());
doc.put("height", u.getHeight());
doc.put("job", u.getJob());
doc.put("nickname", u.getNickname());
doc.put("phone", u.getPhone());
doc.put("school", u.getSchool());
doc.put("sex", u.getSex());
doc.put("hoby", u.getHoby());
Document dog = new Document();
dog.put("name", u.getDog().getName());
dog.put("age", u.getDog().getAge());
doc.put("dog", dog);
coll.insertOne(doc);
}