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

来源:互联网 发布:人工智能猜出眉毛 编辑:程序博客网 时间:2024/05/16 23:35

结构图

配置分片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.000GBconfig  0.000GB

会发现有两个数据库 查看一下config数据库中的表

mongos> use configmongos> show collections

输出结果

actionlogchangelogchunksdatabaseslockpingslocksmongossettingsshardssystem.indexesversion

可以发现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);}
0 0
原创粉丝点击