MongoDB学习记录11-分片-副本集(mongodb3.2版本以后)

结构图

配置分片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);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值