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集羣。測試的時候能夠停掉任何一個實例,接着測試集羣是否可用。

相關文章
相關標籤/搜索