文档章节

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

二两豆腐
 二两豆腐
发布于 2016/07/15 11:27
字数 1256
阅读 85
收藏 6

一、mongo安全校验机制

    1、auth方式

        连接mongo服务,使用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"}]});

         停止mongo服务,然后以 auth方式启动  ./mongod -f xxx.conf --auth

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

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

    2、keyfile方式

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

     keyfile的生成命令如下

    openssl rand -base64 753 >keyfile

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

二、认证集群搭建

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

     1、创建用户

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"}]});

    2、   生成keyfile

     在/opt/mongokeyfile/keyfile文件夹下(示例如此:自己可以在任何目录)

openssl rand -base64 313 > keyfile

   3、把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 

4、停掉三台机器的所有mongo服务

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

5、增加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

6、全部启动以后,可以登录任何一台mongos服务器进行操作

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

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

© 著作权归作者所有

共有 人打赏支持
二两豆腐
粉丝 21
博文 94
码字总数 79225
作品 0
朝阳
高级程序员
私信 提问
zanePerfor前端性能监控系统高可用之Mongodb副本集读写分离架构

HI!,你好,我是zane,zanePerfor是一款最近我开发的一个前端性能监控平台,现在支持web浏览器端和微信小程序段。 我定义为一款完整,高性能,高可用的前端性能监控系统,这是未来会达到的目...

11/14
0
0
MongoDB集群部署 - 带访问控制的分片副本集

1. 前言   Ceilometer将meter、event等数据保存在MongoDB中,之前将MongoDB部署在控制节点上,使用三副本模式,时间长了发现meter数据爆炸式增长,区区2T的磁盘捉襟见肘,而想删除旧数据,...

Sai18
08/16
0
0
搭建高可用mongodb集群(一)——配置mongodb

在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写、海量数据高效存储、高可扩展性和高可用性这些难题。不过就是因为这些问题Nosql诞生了。 NOSQL有这些优势: 大数据量...

观澜而索源
2013/11/18
0
0
#搭建高可用mongodb集群(一)——配置mongodb

本博客已迁移至 [www.0x520.com][1] [1]:http://www.0x520.com 搭建高可用mongodb集群(一)——配置mongodb 在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写、海量数...

小小霸王枪
2013/12/26
0
5
《阿里巴巴MongoDB4.0高级实战:基于Java Spring Boot 2.0》运维、监控、聚合、集群、监控等高级面试题

《阿里巴巴MongoDB4.0高级实战》阿里巴巴技术大牛 资深专家P9叶翔、专家徐雷. NoSQL排名第一!最流行的NoSQL数据库;谷歌、阿里巴巴、蚂蚁金服、腾讯、百度等一线互联网公司必备技能。 本系列...

徐雷frank
11/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java框架学习日志-2

上篇文章(java框架学习日志-1)虽然跟着写了例子,也理解为什么这么写,但是有个疑问,为什么叫控制反转?控制的是什么?反转又是什么? 控制其实就是控制对象的创建。 反转与正转对应,正转...

白话
28分钟前
0
0
Integer使用双等号比较会发生什么

话不多说,根据以下程序运行,打印的结果为什么不同? Integer a = 100;Integer b = 100;System.out.println(a == b);//print : trueInteger a = 200;Integer b = 200;System.out.pr...

兜兜毛毛
昨天
8
0
CockroachDB

百度云上的CockroachDB 云数据库 帮助文档 > 产品文档 > CockroachDB 云数据库 > 产品描述 开源NewSQL – CockroachDB在百度内部的应用与实践 嘉宾演讲视频及PPT回顾:http://suo.im/5bnORh ...

miaojiangmin
昨天
4
0
I2C EEPROM驱动实例分析

上篇分析了Linux Kernel中的I2C驱动框架,本篇举一个具体的I2C设备驱动(eeprom)来对I2C设备驱动有个实际的认识。 s3c24xx系列集成了一个基于I2C的eeprom设备at24cxx系列。at24cxx系列芯片包...

yepanl
昨天
5
0
设计模式之工厂模式

本篇博文主要翻译这篇文章: https://www.journaldev.com/1392/factory-design-pattern-in-java 由于翻译水平有限,自认为许多地方翻译不恰当,欢迎各位给出宝贵的建议,建议大家去阅读原文。...

firepation
昨天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部