mongodb3.0分片及java代码连接操作测试(开启用户验证)

最近抽时间搭建了一下mongodb简单的分片,整个过程还算是蛮顺利,只不过在用户验证这一块遇到了一些问题,好在最后终于搞定。

一、服务器搭建过程:

1、安装四个mongodb:一个作为config、一个作为mongos、另外两个作为主要数据存储的服务器(机器ip192.168.0.201),如图:
mongodb3.0分片及java代码连接操作测试(开启用户验证)_第1张图片

分别对应图中被红框框起来的mongoconf、mongos、mongo1、mongo2(解压安装,安装过程省略)。

2、分别建立data、conf、logs文件夹,并在logs文件夹下建立mongodb.log文件,在conf中建立mongodb.conf(启动配置参数)文件。
mongoconf中conf文件内容如下:
dbpath=/home/admin/mongoconf/data
logpath=/home/admin/mongoconf/logs/mongodb.log
logappend=true
fork=true
port=30000

mongos中conf文件内容个如下(与上边相比少了dbpath的指定):
logpath=/home/admin/mongos/logs/mongodb.log
logappend=true
fork=true
port=40000

mongo1中conf内容如下(和mongoconf中基本一样,只是路径指向的是自己的):
dbpath=/home/admin/mongo1/data
logpath=/home/admin/mongo1/logs/mongodb.log
logappend=true
fork=true
port=37117

mongo2中的conf也是一样,只是把mongo1改为mongo2(省略)。

3、依次启动mongoconf、mongos和mongo1、mongo2:
启动mongoconf,在bin目录下执行mongod命令:
./mongod -f ../conf/mongodb.conf

启动mongos,在bin目录下执行mongos命令:
./mongos -f ../conf/mongodb.conf --configdb=192.168.0.201:30000

启动mongo1和mongo2,在各自的bin目录中执行mongod命令:
./mongod -f ../conf/mongodb.conf

4、连接mongos服务器,并添加分片:
  (1)、连接mongos:在任意一个mongodb的bin目录执行如下命令:       
./mongo 192.168.0.201:40000/admin

  (2)、进入mongos后添加mongo1和mongo2位分片数据服务器:        
db.runCommand({"addshard":"192.168.0.201:37117"})
db.runCommand({"addshard":"192.168.0.201:47117"})
    mongodb3.0分片及java代码连接操作测试(开启用户验证)_第2张图片

5、开启分片:   
db.runCommand({"enablesharding":"test"})
db.runCommand({"shardcollection":"test.user","key":{"name":1}})
mongodb3.0分片及java代码连接操作测试(开启用户验证)_第3张图片

6、测试:向test数据库的user表中添加10w条数据:
use test
for(var i=0;i<100000;i++){
    db.user.insert({"name":"test"+i,"age":i});
}
mongodb3.0分片及java代码连接操作测试(开启用户验证)_第4张图片

7、查看分片结果:
db.printShardingStatus()
mongodb3.0分片及java代码连接操作测试(开启用户验证)_第5张图片

二、开启用户验证:

1、切换数据库到admin创建root用户:
 db.createUser({"user":"root","pwd":"123456","roles":["root"]})


 再切换到test数据库创建读写权限的用户(非admin数据库中无法创建集群管理相关的用户):  
db.createUser({"user":"test","pwd":"123456","roles":[{"db":"test","role":"readWrite"},"readWrite"]})
mongodb3.0分片及java代码连接操作测试(开启用户验证)_第6张图片

2、退出mongo shell,创建keyFile(文件名可自取)文件,并赋予600权限,必须要600权限:
  进入到mongo1的data目录下执行如下命令:
openssl rand -base64 753 > keyFile
chmod 600 keyFile


3、把生成的keyFile文件拷贝到其他几个mongodb的data目录中:


4、修改mongodb.conf启动配置文件:
除开mongos之外,其他都加上如下内容(开启用户验证和keyFile验证):
auth=true
keyFile=/home/admin/mongo2/data/keyFile

mongos中没有auth参数,只需要keyFile。

5、重新依次启动 mongoconf、mongos和mongo1、mongo2(参考上边的启动说明);

三、java代码连接测试:

1、java连接代码如下:
public class MonTest {
    public static void main(String[] args) {
        mongodbfind2();
    }

   public static void mongodbfind2() {
        ServerAddress sa = new ServerAddress("192.168.0.201", 40000);
        List mongoCredentialList = new ArrayList();
        mongoCredentialList.add(MongoCredential.createCredential("test", "test", "123456".toCharArray()));
        MongoClient client = new MongoClient(sa, mongoCredentialList);
        MongoDatabase database = client.getDatabase("test");        // ********
        MongoCollection collection2 = database.getCollection("user");
        FindIterable findIterable = collection2.find();
        MongoCursor cursor2 = findIterable.iterator();
        while (cursor2.hasNext()) {
            Document doc = cursor2.next();
            System.out.println(doc.get("_id") + "," + doc.get("name") + "," + doc.get("age"));
        }
        // 关闭数据库连接
        client.close();
    }
}

2、运行结果:
mongodb3.0分片及java代码连接操作测试(开启用户验证)_第7张图片

收工完成!








你可能感兴趣的:(...☀mongodb,mongodb学习提高)