Mongodb的带用户验证replica set配置

来源:互联网 发布:use衣服知乎 编辑:程序博客网 时间:2024/05/17 03:10

mkdir -p /data/data/dbmaster /data/data/dbslave1 /data/data/dbslave2 /data/data/dbslave3


mongod --fork --auth --master --port 27017 --dbpath /data/data/dbmaster  --logpath /data/data/dbmaster.log #主库

mongod --fork --auth --slave --source 192.168.1.100:27017 --port 27011 --dbpath /data/data/dbslave1 --logpath /data/data/dbslave1.log  #从库1

mongod --fork --auth --slave --source 192.168.1.100:27017 --port 27012 --dbpath /data/data/dbslave2 --logpath /data/data/dbslave2.log  #从库2

mongod --fork --auth --slave --source 192.168.1.100:27017 --port 27013 --dbpath /data/data/dbslave3 --logpath /data/data/dbslave3.log  #从库3



#创建三个数据存放目录用来做db的路径

mkdir -p /data/data/dbmaster /data/data/dbslave1 /data/data/dbslave2 /data/data/dbslave3

#启动一个mongod实例

mongod --fork --auth --master --port 27017 --dbpath /data/data/dbmaster  --logpath /data/data/dbmaster.log


#因为我需要做带用户验证的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 --fork --auth --slave --source 192.168.1.100:27017 --port 27011 --dbpath /data/data/dbslave1 --logpath /data/data/dbslave1.log

mongod --fork --auth --slave --source 192.168.1.100:27017 --port 27012 --dbpath /data/data/dbslave2 --logpath /data/data/dbslave2.log

mongod --fork --auth --slave --source 192.168.1.100:27017 --port 27013 --dbpath /data/data/dbslave3 --logpath /data/data/dbslave3.log


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

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

#接下来我们以replica set的方式启动这三个实例

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


mongod --fork --auth --slave --source 192.168.1.100:27017 --port 27011 --dbpath /data/data/dbslave1 --logpath /data/data/dbslave1.log

mongod --fork --auth --slave --source 192.168.1.100:27017 --port 27012 --dbpath /data/data/dbslave2 --logpath /data/data/dbslave2.log

mongod --fork --auth --slave --source 192.168.1.100:27017 --port 27013 --dbpath /data/data/dbslave3 --logpath /data/data/dbslave3.log

注意,这里带上了--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()