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

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

一、服务器搭建过程:

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

分别对应图中被红框框起来的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代码连接操作测试(开启用户验证)mongodb3.0分片及java代码连接操作测试(开启用户验证)

5、开启分片:  
db.runCommand({"enablesharding":"test"})
db.runCommand({"shardcollection":"test.user","key":{"name":1}})

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


6、测试:向test数据库的user表中添加10w条数据:
use test
for(var i=0;i<100000;i++){
    db.user.insert({"name":"test"+i,"age":i});
}

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

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

7、查看分片结果:
db.printShardingStatus()

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

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

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

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

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

 再切换到test数据库创建读写权限的用户(非admin数据库中无法创建集群管理相关的用户): 
db.createUser({"user":"test","pwd":"123456","roles":[{"db":"test","role":"readWrite"},"readWrite"]})

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

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

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

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

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

3、把生成的keyFile文件拷贝到其他几个mongodb的data目录中:
mongodb3.0分片及java代码连接操作测试(开启用户验证)
mongodb3.0分片及java代码连接操作测试(开启用户验证)

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、运行结果:
mongodb3.0分片及java代码连接操作测试(开启用户验证)

收工完成!








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

  1. zookeeper - 通过java代码连接zookeeper&lpar;2&rpar;

    首先创建一个Maven项目 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&qu ...

  2. mongodb的连接和开启安全验证

    首先是启动mongodb a.打开cmd,cd进入mongodb的安装目录下的bin目录下面,执行 mongod --dbpath D:\MongoDBdata(数据存放的目录) 或者将mongodb ...

  3. Java不走弯路教程(3&period;用户验证与文件内容查询)

    3.用户验证与文件内容查询 在上一章中,我们完成了对指定文件内容的输出操作. 我们现在有如下格式的文件product.db id,product_name,product_detail 1,noteb ...

  4. java代码连接本地redis数据库

    关于redis的介绍在这里就不说了.今天主要讲解,如何连接redis.连接之前.必须要做的几点: 一.安装redis.下载服务和客户端,然后 二.启动redis服务. 经过这两步的测通以后.我们只需要 ...

  5. java代码连接oracle数据库的方法

    oracle连接数据库的方式和mysql是大同小异的,主要的困难点在于oracle的数据库驱动包和依赖只有官方提供,如果你是用maven添加依赖的话,需要自己从官网下载jar包安装到你本地的maven ...

  6. java代码实现MD5加密及验证方法

    MD5加密 在我们的程序中,不管是什么,都会有安全问题,今天就说的是MD5加密的方法 MD5是哈希算法,也就是 从明文A到密文B很容易,但是从密文B到明文A几乎不可能 也就是说,给你密文,是几乎无法通 ...

  7. 使用mongo-java-driver3&period;0&period;2&period;jar和mongodb3&period;0在java代码中的用户验证4

    以下是使用mongo-java-driver3.0.2.jar和mongodb3.0.4在java代码中的用户验证: ServerAddress sa = new ServerAddress(host ...

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

    由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...

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

    from:http://blog.itpub.net/14780914/viewspace-588975/ 本文面向于那些软件架构师,设计师和开发人员,他们想使用 IBM® Rational® Sof ...

随机推荐

  1. Hibernate检索策略(抓取策略)(Hibernate检索优化)

    一.查询方法中get方法采用策略是立即检索,而load方法采用策略是延迟检索,延迟检索是在使用数据时才发送SQL语句加载数据 获取延迟加载数据方式:1.使用的时候,如果Customer c=sessi ...

  2. Java 泛型快速排序 以sdut 1196为例

    oj链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1196 Java中,Arrays.so ...

  3. IOS 如何选择delegate、notification、KVO?

    IOS 如何选择delegate.notification.KVO? 博客分类: IOS   前面分别讲了delegate.notification和KVO的实现原理,以及实际使用步骤,我们心中不禁有 ...

  4. Hibernate逆向工程全过程

    前提你已经创建好了数据库,按如下操作进行: 1.添加hibernate.cfg.xml 在src下-->new-->other--->hibernate-->选择“Hibern ...

  5. Learning How to Learn&comma; Part 1

    Jan 8, 2015 • vancexu Learning How to Learn: Powerful mental tools to help you master tough subjects ...

  6. SQL第三课-自动编号与初涉约束

    自动编号:auto_increment一张数据表中,要设定字段的唯一性,就会用到编号,确保编号的唯一性是避免重名和数据混乱的一种方式.主键,一张表只能并只有一个.在创建字段表时,指定 PRIMARY ...

  7. shell编程 之 echo命令和printf命令

    1 echo命令基本情况: echo显示普通字符:echo "i am studying shell"(有木有引号都可以) 支持转义字符:echo "\"hel ...

  8. READ–IT&colon; Assessing Readability of Italian Texts with a View to Text Simplification-paper

    https://aclanthology.info/pdf/W/W11/W11-2308.pdf 2 background2000年以前 ----传统可读性准则局限于表面的文本特征,例如the Fle ...

  9. xe5 android 手机上使用sqlite &lbrack;转&rsqb;

    在android手机上怎样使用sqlite数据库,这里用Navigator实现 增删改查. 1.新建firemonkey mobile application 2.选择blank applicatio ...

  10. React JSX基本语法规则

    JSX基本语法规则: 遇到HTML(以 < 开头)标签,就用HTML规则解析: 遇到代码块(以 { 开头),就用JavaScript规则解析. 它允许HTML和JavaScript的混写. 注意 ...