MongoDB 3.4 分片与副本集实践笔记

关于MongoDB 3.4 的分片与原来还是有一些区别,网上没找到完整的操作手册,只能自己摸索。
本文仅是记录一下自己的操作步骤,以免忘记,……


第一步: 准备数据节点

我们准备两个单节点,当然,你也可以使用副本集作为数据节点,只是我的PC实在跑不动……

必须添加–shardsvr参数。

mongod --logpath /data/shard/log/d0.log --dbpath /data/shard/db0 --port 32770 --shardsvr
mongod --logpath /data/shard/log/d1.log --dbpath /data/shard/db1 --port 32771 --shardsvr

第二步:config server

3.4要求配置服务器必须也是副本集,好吧,我们需要这样弄一个,我暂时只用一个节点做rs。

先不启mongos。再启一个配置服务器

mongod —logpath /data/config/log/config0.log —datapath /data/config/db0 —port  26010 --configsvr --replSet cs

嗯,我只用一个节点,凑合着先跑起来,当然这样是不好的……

用robomongo连上 26010 ,初始化一下副本集cs:

use admin
cfg = {
    _id:'cs',
    configsvr:true,
    members:[
        {_id:0,host:'192.168.57.151:26010'}
     ]
};

rs.initiate(cfg);

你应该有多个configserver,所以需要添加第二个

rs.add({_id:1,host:'192.168.57.151:26011'})

第三步:启mongos

mongos --configdb cs/192.168.57.151:26010 --logpath /data/mongos.log --port 8001 

因为我上面的cs中只有一个节点,所以是这样的,如果你有多个,应该这样写:

mongos --configdb cs/192.168.57.151:26010,192.168.57.151:26011 --logpath /data/mongos.log --port 8001 

第四步:配置分片节点

同样使用robomongo 连上 8100 ,添加片节点,并启用aedata库的分片:

sh.addShard('192.168.57.151:32770')
sh.addShard('192.168.57.151:32771')

sh.status()

sh.enableSharding('aedata')

然后还有一件事,片键的设置

sh.shardCollection('aedata.ac01_test',{'id':1,'idcard':1})

至此,应该已经可以使用了。

第五步:创建用户

如果要加上鉴权,官网说只要在mongos上操作即可,所以连上 8100,简单地添加一个用户:

use aedata

db.createUser({
    user:'aedata',
    pwd:'111111',
    roles:[
        {role:'readWrite',db:'aedata'}
    ]
    })

这样就可以了。


再来看看副本集的鉴权配置,这次我们换到Docker环境中来弄吧,开一堆命令行窗口都晕。

1)先准备一个Docker脚本

就叫run.sh吧,让它可执行。

#!/bin/bash
docker run -d --name mongo-$1 -p $1:27017 -v /Users/yancheng/workspace/mongodb/conf:/conf mongo:3.4 -f /conf/mongod.conf

2)准备上面那个mongod.conf 配置文件

简单的写一下即可:

security: 
  keyFile: /conf/key-file

replication: 
  replSetName: rs0

3)再准备上面说的那个key-file

key-file 生成命令见官网说明

openssl rand -base64 756 > <path-to-keyfile>
chmod 400 <path-to-keyfile>

当然,你随便写一个字串也无所谓了。

4)启动第一个副本节点

启动一个副本节点32880 ,命令行执行./run.sh 32880 即可

然后我们需要用docker exec 进入容器进行副本集和用户的设置,因为我们在启动时添加了keyfile,外部暂时无法登录了,只能通过本机登录。

分别做以下几件事
4.1)初始化副本集 ,注意,因为我们是暴露端口方式,不能用缺省值,必须写清楚IP地址

rs.status()
rs.initilate({
    _id:'rs0',
    members:[
     {_id:0,host:'192.168.40.145:32880'}
    ]
})

只建一个即可,以后添加可以从外部操作,没关系了。

4.2) 当前节点变成PRIMARY时,创建一个超级用户

rs0:PRIMARY> db.createUser({
 user:'root',
 pwd:'root',
 roles:[
 {role:'userAdminAnyDatabase',db:'admin'},{role:'clusterAdmin',db:'admin'}]
 })

这里我添加的角色有两个,userAdminAnyDatabase,可以让root用户可以为任何数据库添加新用户,而clusterAdmin则可以为副本集添加新节点。

5)添加节点和用户

现在可以从外部操作了。用Robomongo连32880,添加副本,加上 32881,32882,(必须有3个才能选举)

rs.add({_id:1,host:'192.168.40.145:32881'})
rs.add({_id:2,host:'192.168.40.145:32882'})

然后可以创建一个普通用户

use aedata
db.createUser({
    user:'aedata',
    pwd:'111111',
    roles:[{role:'readWrite',db:'aedata'}]
})

现在可以用aedata/111111 去操作数据库了。

猜你喜欢

转载自blog.csdn.net/sharetop/article/details/53610379