日期:2014-05-16  浏览次数:20353 次

Mongodb的带用户验证replica set配置
这些天捣鼓了一下mongodb的replica set
本人初学,属菜鸟。现在将一些心得分享给大家。若有不对之处,望各位大鸟指点。

#创建三个数据存放目录用来做db的路径
/data/data/r0
/data/data/r1
/data/data/r2

#启动一个mongod实例
./mongod   --port 27017 --dbpath /data/data/r0
#因为我需要做带用户验证的replica set,所以先这样启动来设置用户
#若要使用replica set,那么所有的节点机器必须在local库里要新增一个repl的用户
use local
db.addUser('repl','replication')
否则,当我们启动slave时,会报错:

引用
replauthenticate: no user in local.system.users to use for authentication
replauthenticate: can't authenticate to master server, user:repl

#同样,启动另外两个mongod实例,添加local用户
./mongod   --port 27018 --dbpath /data/data/r1
./mongod   --port 27019 --dbpath /data/data/r2

use local
db.addUser('repl','replication')

完成后将三个实例在控制台关闭
use admin
db.shutdownServer();

#接下来我们以replica set的方式启动这三个实例
./mongod  --replSet testrs --port 27017 --dbpath /data/data/r0 --auth

./mongod  --replSet testrs --port 27018 --dbpath /data/data/r1 --auth

./mongod  --replSet testrs --port 27019 --dbpath /data/data/r2 --auth

注意,这里带上了--auth参数,要求客户端使用用户登录

启动好这三个实例后,要去其中一台机的控制台去初始化。该初始化操作只执行一次如下:
db.runCommand({"replSetInitiate":{"_id":"testrs","members":[
{"_id":1, "host":"localhost:27017",priority : 1},
{"_id":2,"host":"localhost:27018",priority : 1},
{"_id":3,"host":"localhost:27019",priority : 0 }
]}})
执行完这个命令后,没什么意外的话,三个实例的replica set就配置启动好了。

通过rs.status();查看哪个实例是主节点,去登录主节点的客户端。
由于设置了--auth参数,所以我们要先建立用户。
use admin;
db.addUser('root','root'); //在admin库里创建一个root用户
db.auth('root','root');
use wj;
db.addUser('wj','wj'); //在wj库里创建一个wj用户

这样,在wj库里新增数据的话,就可以在三台实例里查看到了。
在从节点查看数据的话,需要执行db.getMongo().setSlaveOk()