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

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

一、服务器搭建过程:

1、安装四个mongodb:一个作为config、一个作为mongos、另外两个作为主要数据存储的服务器(机器ip192.168.0.201),如图:

分别对应图中被红框框起来的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"})

5、开启分片:

db.runCommand({"enablesharding":"test"})
db.runCommand({"shardcollection":"test.user","key":{"name":1}})

6、测试:向test数据库的user表中添加10w条数据:

use test
for(var i=0;i<100000;i++){
    db.user.insert({"name":"test"+i,"age":i});
}

7、查看分片结果:

db.printShardingStatus()

二、开启用户验证:

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"]})

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<MongoCredential> mongoCredentialList = new ArrayList<MongoCredential>();
        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<Document> findIterable = collection2.find();
        MongoCursor<Document> 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、运行结果:

收工完成!

时间: 2024-10-10 17:19:22

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

mongodb的连接和开启安全验证

首先是启动mongodb a.打开cmd,cd进入mongodb的安装目录下的bin目录下面,执行 mongod --dbpath D:\MongoDBdata(数据存放的目录) 或者将mongodb添加到环境变量,然后执行这一句命令也是可以的(为了方便本人建立了一个.bat的批处理文件,将启动mongodb的命令写入该文件,每次想启动直接双击该文件就可以了) b.启动后直接执行命令mongo就可以进入mongodb了,或者也可以建立一个.bat的批处理文件,写入mongo 127.0.0.1:

MaxScale2.0.1结合Java Druid连接池实现读写分离注意事项

现象: 程序会不定时的出现连接错误,问题bug的异常信息如下: The last packet successfully received from the server was 116 milliseconds ago.  The last packet sent successfully to the server was 115 milliseconds ago. java.sql.SQLException: No database selected 但通过客户端sqlyog/navica

java代码连接本地redis数据库

关于redis的介绍在这里就不说了.今天主要讲解,如何连接redis.连接之前.必须要做的几点: 一.安装redis.下载服务和客户端,然后 二.启动redis服务. 经过这两步的测通以后.我们只需要,看代码走起; package com.huojg.test; import redis.clients.jedis.Jedis; public class mainConnetcionRedis { public static void main(String[] args) { //实例化一个客

不使用spring的情况下原生java代码两种方式操作mongodb数据库

由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置文件的密码,而实际上这个密码在代码中根本就没有使用,他们在代码中已经把用户验证信息写死.   在协助他们解决这个问题的时候,我看到他们代码中在和mongodb数据库交互时使用了已经不被建议使用的方法,于是便抽时间尝试了一下另一种被建议的方式实现各功能.   当然了,生产环境中用的是mongodb集群

从 Java 代码逆向工程生成 UML 类图和序列图

from:http://blog.itpub.net/14780914/viewspace-588975/ 本文面向于那些软件架构师,设计师和开发人员,他们想使用 IBM? Rational? Software Architect 从 Java? 源代码来逆向工程生成 UML 类和序列图. 逆向工程经常被用来从已有的源代码中以一种抽象模型 UML 格式来获得丢失的设计文档,其可以用来研究一个系统的静态结构和动态行为,并用于扩展新的特性到产品. 作者详细说明了使用 IBM Rational Sof

论坛源码推荐(11.6):iPhone6/6 plus屏幕适配Demo,Java代码转Objective-C

http://www.cocoachina.com/ios/20141106/10153.html iPhone6/6 plus 屏幕适配Demo(代码底层处理)(论坛会员satian)htt 该项目是iPhone6/6 plus屏幕适配Demo,采用代码编写界面的适配方法,以iPhone5屏幕分辩率为设计基础. 测试环境:Xcode 6.0,iOS 6.0以上 Google:Java代码转Objective-C(J2ObjC)  J2ObjC是一款出自Google的开源的命令行工具,可以将Ja

Mongodb3.0.5副本集搭建及spring和java连接副本集配置

这是去年写的一篇文档,最近突然发现并没有发不出来,因此现在补上,希望能对某些朋友有所帮助.因为当时记录时没有截图,因此这里看起来可能就比较单调. 一.基本环境: mongdb3.0.5数据库 spring-data-mongodb-1.7.2.jar mongo-java-driver-3.0.2.jar linux-redhat6.3 tomcat7 二.搭建mongodb副本集: 1.  分别在三台linux系统机上安装mongodb,(为避免和机器上原有的mongodb端口冲突,这里设为5

使用spring连接及操作mongodb3.0

前边有一篇记录过不使用spring,直接在java代码中连接和操作mongodb数据库,这里就紧随其后记录一下使用spring的情况下,在java中简单操作mongodb. maven导包配置: 因为涉及了sping以及springmvc,因此也需要导入它们相关的包: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc

mysql数据库的连接以及增删改查Java代码实现(Statement版)

数据库: create table t1(id int primary key not null auto_increment,name varchar(32),password varchar(32)); insert into t1(name,password) values('admin','123'); insert into t1(name,password) values('zhangsan','123'); insert into t1(name,password) values(