MongoDB数据库高可用架构集群权限控制
每个分片3服务器,前期采用三台,日后服务器的增加考虑灾备,服务增加的基数最少为两台。
类型 |
服务器 |
用途 |
系统 |
说明 |
存储/数据 |
Server1 |
Shard1/Shard2/Shard3 |
Linux 64位 |
Shard1:10001;Shard2:10002,Shard3:10003; |
Server2 |
Shard1/Shard2/Shard3 |
Linux 64位 |
Shard1:10001;Shard2:10002,Shard3:10003; |
|
Server3 |
Shard1/Shard2/Shard3 |
Linux 64位 |
Shard1:10001;Shard2:10002,Shard3:10003; |
|
配置 |
Server1 |
Config1 |
Linux 64位 |
Config1:20000; |
Server2 |
Config2 |
Linux 64位 |
Config2:20000; |
|
Serve3 |
Config3 |
Linux 64位 |
Config3:20000; |
|
路由 |
Server1 |
Mongos1 |
Linux 64位 |
Mongos:30000 |
Server2 |
Mongos2 |
Linux 64位 |
Mongos:30000 |
|
Server3 |
Mongos3 |
Linux 64位 |
Mongos:30000 |
(表:一)
创建配置、日志、分片、key文件存储目录及验证文件
[root@Mongo-server-B/]# mkdir /data/config/ -p
[root@Mongo-server-B/]# mkdir /data/log/ -p
[root@Mongo-server-B/]# mkdir /data/shard1/ -p
[root@Mongo-server-B/]# mkdir /data/shard2/ -p
[root@Mongo-server-B/]# mkdir /data/shard3/ -p
[root@Mongo-server-B/]# mkdir /data/key/ -p
创建验证与无验证目录
[root@Mongo-server-B/]# mkdir /Apps/mongo/bin/nosecurity/ -p
[root@Mongo-server-B/]# mkdir /Apps/mongo/bin/security/ -p
创建配置文件
1、
[root@Mongo-server-B/]# cd /data/key/
[root@Mongo-server-Bkey]# echo 'pomohoshard1key'> security
[root@Mongo-server-Bkey]# chmod 600 security
2、
MongoDB默认为验证模式。如需对数据库进行权限控制,需先采用无验证模式登录,进入admin库创建管理员用户后,再采用验证模式登录。通过前面创建的管理员帐号进行数据库与用户的创建。MongoDB集群的权限与单台的权限控制的不同之处在于,单台是通过-auth属性,集群是通过keyFile来进行服务器间的验证。以下介绍配置全过程。
前面的所有步骤,都是在nosecurity模式下进行。如果没有采用非验证模式的需要将所有进程(分片、配置、mongos)停止,将切换到无验证模式。
步骤一:先进行登录,并切换进admin库创建管理员帐号
[root@Mongo-server-A bin]#./mongo 192.168.2.88:30000
mongos> use admin
mongos>db.addUser('admin','123456')
{
}
{
}
验证用户名与密码
mongos> db.auth('admin','123456')
1
mongos>exit
步骤二:退出后,将Server1Server2Server3服务器上MongoDB的所有进程(分片、配置、mongos)停止,将切换到验证模式。具体命令如下:
[root@Mongo-server-A bin]#killall mongod mongos
[root@Mongo-server-A bin]#netstat -lnpt
[root@Mongo-server-A bin]# ./mongod-f ./security/shard1.conf
[root@Mongo-server-A bin]# ./mongod-f ./security/shard2.conf
[root@Mongo-server-A bin]# ./mongod-f ./security/shard3.conf
[root@Mongo-server-A bin]#netstat ?lnpt
[root@Mongo-server-A bin]#./mongod -f ./security/configsvr.conf
[root@Mongo-server-A bin]# ./mongos-f ./security/mongos.conf
启动后,如对库进行查看,则会报以下异常:
[root@Mongo-server-A bin]#./mongo 192.168.2.90:30000/admin
MongoDB shell version: 2.0.3
connecting to:192.168.2.90:30000/admin
> show dbs
Fri Mar 23 22:28:28 uncaughtexception: listDatabases failed:{ "ok" : 0, "errmsg" :"unauthorized" }
以下是正常登录后显示的信息:
[root@Mongo-server-A bin]#./mongo 192.168.2.90:30000/admin
MongoDB shell version: 2.0.3
connecting to:192.168.2.90:30000/admin
>db.auth('admin','123456')
1
mongos>
步骤三:以下是数据库及数据库用户创建的过程:
mongos> use hello
switched to db hello
mongos>db.addUser('sa','sa')
{
}
{
}
mongos> exit
bye
[root@Mongo-server-A bin]#./mongo 192.168.2.90:30000/hello -u sa -p
MongoDB shell version: 2.0.3
Enter password:
connecting to:192.168.2.90:30000/hello
> show collections
system.indexes
system.users
> db.system.users.find()
{ "_id" :ObjectId("4f6c8a6e9f67b049a20a00de