mongodb 高可用集群搭建 续 《安全认证》

1、mongo安全校验机制mongodb

    一、auth方式数据库

        链接mongo服务,使用admin数据库,建立超级管理员用户安全

        db.createUser({user:"admin",pwd:"admin",roles:[{role:"root",db:"admin"}]});bash

         而后更改数据库(use testdb),建立普通数据库用户服务器

        db.createUser({user:"tester",pwd:"testerpwd",roles:[{role:"dbAdmin",db:"testdb"}]});测试

         中止mongo服务,而后以 auth方式启动  ./mongod -f xxx.conf --auth编码

       这样再链接上mongo服务,使用show dbs之类的命令就会收到限制了,须要用db.auth("tester","testerpwd")进行验证过以后,这样在限定的权限内就行操做了。.net

      具体roles中有多少配置,配置的角色权限是多少,详细请查看《 mongodb 内建用户 code

    二、keyfile方式server

         在集群中,各个mongo实例进行通讯的时候一般会采用keyfile的方式,keyfile是使用openssl生成的随机的base64编码的一个字符串,只要各台服务器启动的时候用的是同一个keyfile,这样各个mongo实例就可以相互感知通讯。

     keyfile的生成命令以下

openssl rand -base64 753 >keyfile

    其中753是随机种子,本身能够任意填写1到10000中的数字,这样咱们就生成了一个 keyfile文件,把keyfile文件复制到各台服务器上。启动的时候增长--keyFile /xxx/xxx/keyfile参数便可。

2、认证集群搭建

      续上篇《 mongoDB高可用集群环境搭建 》  文章中,咱们已经搭建了一个没有安全认证的方式,如今把它改成有安全校验的。

     一、建立用户

user admin
db.createUser({user:"admin",pwd:"admin",roles:[{role:"root",db:"admin"}]});

         而后更改数据库(use testdb),建立普通数据库用户

db.createUser({user:"tester",pwd:"testerpwd",roles:[{role:"dbAdmin",db:"testdb"}]});

    二、   生成keyfile

     在/opt/mongokeyfile/keyfile文件夹下(示例如此:本身能够在任何目录)

openssl rand -base64 313 > keyfile

   三、把keyfile复制到各个服务,若是一台服务器上有多个实例,能够使用一个keyfile,也能够分别使用各自的keyfile,本篇文章采用各自的keyfile

cd /etc/mongodb/conf/
cp /opt/mongokeyfile/keyfile 27017/
[root@m1 conf]# cp /opt/mongokeyfile/keyfile 27018/
[root@m1 conf]# cp /opt/mongokeyfile/keyfile 27019/
[root@m1 conf]# cp /opt/mongokeyfile/keyfile 27020/
[root@m1 conf]# cp /opt/mongokeyfile/keyfile 27300/

[root@m1 conf]# chmod 600 27017/keyfile 
[root@m1 conf]# chmod 600 27018/keyfile 
[root@m1 conf]# chmod 600 27019/keyfile 
[root@m1 conf]# chmod 600 27020/keyfile 
[root@m1 conf]# chmod 600 27300/keyfile

四、停掉三台机器的全部mongo服务

#在三台服务器上执行
killall mongos && killall mongod

五、增长keyfile参数启动全部服务

       都是配置启动的,启动方式彻底相同

#从新启动全部服务

#启动mongos 在三台机器上运行
/usr/local/mongodb/bin/mongod --configsvr --dbpath /var/lib/mongodb/db/27017/ --port 27017 --logpath /var/log/mongodb/27017/mongo.log --fork --keyFile /etc/mongodb/conf/27017/keyfile

#启动config server
/usr/local/mongodb/bin/mongos --configdb 192.168.1.140:27017,192.168.1.141:27017,192.168.1.142:27017 --port 27300 --logpath /var/log/mongodb/27300/mongos.log  --chunkSize 5  --fork  --keyFile /etc/mongodb/conf/27017/keyfile


#140服务器
/usr/local/mongodb/bin/mongod --shardsvr --replSet shard1 --port 27018 --dbpath /var/lib/mongodb/db/27018/ --logpath /var/log/mongodb/27018/shard1.log --fork --nojournal --oplogSize 10 --keyFile /etc/mongodb/conf/27017/keyfile
/usr/local/mongodb/bin/mongod --shardsvr --replSet shard1 --port 27019 --dbpath /var/lib/mongodb/db/27019/ --logpath /var/log/mongodb/27019/shard1.log --fork --nojournal --oplogSize 10 --keyFile /etc/mongodb/conf/27017/keyfile
/usr/local/mongodb/bin/mongod --shardsvr --replSet shard1 --port 27020 --dbpath /var/lib/mongodb/db/27020/ --logpath /var/log/mongodb/27020/shard1.log --fork --nojournal --oplogSize 10 --keyFile /etc/mongodb/conf/27017/keyfile


#141服务器
/usr/local/mongodb/bin/mongod --shardsvr --replSet shard2 --port 27018 --dbpath /var/lib/mongodb/db/27018/ --logpath /var/log/mongodb/27018/shard1.log --fork --nojournal --oplogSize 10 --keyFile /etc/mongodb/conf/27017/keyfile
/usr/local/mongodb/bin/mongod --shardsvr --replSet shard2 --port 27019 --dbpath /var/lib/mongodb/db/27019/ --logpath /var/log/mongodb/27019/shard1.log --fork --nojournal --oplogSize 10 --keyFile /etc/mongodb/conf/27017/keyfile
/usr/local/mongodb/bin/mongod --shardsvr --replSet shard2 --port 27020 --dbpath /var/lib/mongodb/db/27020/ --logpath /var/log/mongodb/27020/shard1.log --fork --nojournal --oplogSize 10 --keyFile /etc/mongodb/conf/27017/keyfile
 
 #142服务器
/usr/local/mongodb/bin/mongod --shardsvr --replSet shard3 --port 27018 --dbpath /var/lib/mongodb/db/27018/ --logpath /var/log/mongodb/27018/shard1.log --fork --nojournal --oplogSize 10 --keyFile /etc/mongodb/conf/27017/keyfile
/usr/local/mongodb/bin/mongod --shardsvr --replSet shard3 --port 27019 --dbpath /var/lib/mongodb/db/27019/ --logpath /var/log/mongodb/27019/shard1.log --fork --nojournal --oplogSize 10 --keyFile /etc/mongodb/conf/27017/keyfile
/usr/local/mongodb/bin/mongod --shardsvr --replSet shard3 --port 27020 --dbpath /var/lib/mongodb/db/27020/ --logpath /var/log/mongodb/27020/shard1.log --fork --nojournal --oplogSize 10 --keyFile /etc/mongodb/conf/27017/keyfile

六、所有启动之后,能够登陆任何一台mongos服务器进行操做

/usr/local/mongodb/bin/mongo 192.168.1.142:27300/admin -u admin -p admin

这样咱们就搭建起来了一个高可用的,而且有安全认证的mongo集群。测试的时候能够停掉任何一个实例,接着测试集群是否可用。

相关文章
相关标签/搜索