详解MongoDB 带访问控制的副本集部署相关问题
当你需要用到一个MongoDB 副本集集群,用于开发测试时, 可以通过下面的步骤简单完成。
版本及环境 MongoDB4.4 Centos6.5
一、下载 MongoDB Server 及 MongoDB ShellMongoDB Server 提供数据库服务。 Mongo Shell 可以理解为命令行的客户端程序。
下载地址:https://www.mongodb.com/try/download/community
此处选择对应的,版本, 平台,Package类型(server /shell)
4.4.12 MongoDB Server:https://repo.mongodb.org/yum/redhat/6/mongodb-org/4.4/x86_64/RPMS/mongodb-org-server-4.4.12-1.el6.x86_64.rpm
MongoDB Shell:https://repo.mongodb.org/yum/redhat/6/mongodb-org/4.4/x86_64/RPMS/mongodb-org-shell-4.4.12-1.el6.x86_64.rpm
RMP 安装
rpm -ivh mongodb-org-server-4.4.12-1.el6.x86_64.rpm
rpm -ivh mongodb-org-shell-4.4.12-1.el6.x86_64.rpm
二、副本集初始化副本集(replica set)是一组维护相同数据的mongod进程, 提供了高可用性。部分节点故障了,还可以自动选取主节点,继续提供服务。
由于副本集的链接方式和单点有些区别,所以测试环境也按照副本集方式部署。
MongoDB 手册中关于副本集的部分在:https://docs.mongodb.com/v4.4/replication/
1. 首先创建下数据库数据存储目录,用于存储数据。 环境是单机,三个节点的目录,都是在一台机器创建的,伪分布式。
mkdir -p /srv/mongodb/rs0-0 /srv/mongodb/rs0-1 /srv/mongodb/rs0-22. 依次启动三个mongod实例
mongod replSet rs0 fork logpath /srv/mongodb/0 logappend port 27017 bind_ip 0.0.0.0,:: dbpath /srv/mongodb/rs0-0 oplogSize 128mongod replSet rs0 fork logpath /srv/mongodb/1 logappend port 27018 bind_ip 0.0.0.0,:: dbpath /srv/mongodb/rs0-1 oplogSize 128
mongod replSet rs0 fork logpath /srv/mongodb/2 logappend port 27019 bind_ip 0.0.0.0,:: dbpath /srv/mongodb/rs0-2 oplogSize 128
启动后, ps -axu |grep mongo 看一下 3个进程 mongod 是不是都ok。
3.使用mongo shell 连接其中一个节点。进行副本集初始化。
mongo port 27017进入shell后, 执行如下命令。注意替换 10.13.50.40 为实际IP
rsconf = {_id: rs0 ,
members: [
{
_id: 0,
host: 10.13.50.40:27017
},
{
_id: 1,
host: 10.13.50.40:27018
},
{
_id: 2,
host: 10.13.50.40:27019
}
]
rs.initiate( rsconf )
初始化完成后,可以通过
rs.conf()查看副本集配置。
到这里3个节点的副本集已经配置好了。可以连接进行读写操作了。
但目前连接是没有访问控制的, 下面来增加访问控制。
三、增加访问控制在副本集中启用访问控制,需要进行两项配置。
1. 副本集节点成员间的安全认证,支持keyfiles 或者 x.509 证书 认证。
2.副本集服务与数据库连接客户端间的安全认证, 用户名,密码。权限基于用户所属角色。
副本集节点间的内部认证, 这里使用keyfiles。 通俗说就是所有节点共享相同的keyfile 作为密码。keyfile正确, 才能够加入副本集,实现了副本集节点间的身份验证。
创建一个keyfile, 复制三份,供3个节点使用。下面按官方手册, 使用openssl 生成随机密码,修改权限为400. 复制到3个目录备用。
openssl rand -base64 756 keychmod 400 key
mkdir -p /srv/mongodb/k0 /srv/mongodb/k1 /srv/mongodb/k2
cp key /srv/mongodb/k0/
cp key /srv/mongodb/k1/
cp key /srv/mongodb/k2/
下面创建用户,指定角色。 如前述,使用 mongo shell 连接数据库。创建用户需要在主节点进行。如果连接的节点不是当前主节点。可以用 rs.status(); 查看主节点ip端口后连接。进入mongo shell后, 输入如下命令。
创建一个用户名未 admin 角色为 userAdminAnyDatabase 的用户, 密码为 admin!@#$。 关于内建角色的更多信息可以在这里了解。
https://docs.mongodb.com/v4.4/reference/built-in-roles/
准备就绪后。 需要重启mongo server服务, 启用访问控制机制。 下面关闭所有节点。
重新启动mongod,启用访问控制 auth keyFile
mongod replSet rs0 fork auth keyFile /srv/mongodb/k0/key logpath /srv/mongodb/0 logappend port 27017 bind_ip 0.0.0.0,:: dbpath /srv/mongodb/rs0-0 oplogSize 128mongod replSet rs0 fork auth keyFile /srv/mongodb/k1/key logpath /srv/mongodb/1 logappend port 27018 bind_ip 0.0.0.0,:: dbpath /srv/mongodb/rs0-1 oplogSize 128
mongod replSet rs0 fork auth keyFile /srv/mongodb/k2/key logpath /srv/mongodb/2 logappend port 27019 bind_ip 0.0.0.0,:: dbpath /srv/mongodb/rs0-2 oplogSize 128
此时,已经启用了访问控制, 无权限用户无法对数据库进行读写,无法新增用户。下面使用 带认证的方式登录。 username 及 password
mongo admin username admin password admin!@#$ host rs0/10.13.50.40:27017,10.13.50.40:27018,10.13.50.40:27019admin的角色userAdminAnyDatabase 具有用户管理权限,但无数据库读写权限。 登陆后在 mongo shell中创建一个数据库库读写用户,读写特定数据库。test 用户具有对数据库 mytest 的读写权限, 属于内置的 readWrite 角色。
然后mongo shell 使用 test 登录 验证。
mongo test username test password test!@#$ host rs0/10.13.50.40:27017,10.13.50.40:27018,10.13.50.40:27019test登录后,在mongo shell 中测试读写
use mytestdb.col.insert({name: 测试 ,age:1})
db.col.find()
查询结果
{ _id : ObjectId( 61f3da65e72c3f10edef9a78 ), name : 测试 , age : 1 }
至此。一个三个节点的, 带有访问控制的副本集,就搞定收工。
到此这篇关于MongoDB 带访问控制的副本集部署的文章就介绍到这了,更多相关MongoDB副本集部署内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 详解MongoDB 带访问控制的副本集部署相关问题
相关文章
- MongoDB的下载、安装与部署方法
- MongoDB中游标的深入学习
- 部署MongoDB单机部署:最简易方式(mongodb单机)
- MongoDB 安装指南:快速简易部署(mongodb安装教程)
- 部署MongoDB:多种方式解决数据存储问题(mongodb部署方式)
- 精简流程,体验 MongoDB 图形化工具的优势(mongodb图形工具)
- 过高MongoDB CPU 利用率过高问题排查(mongodb占用cpu)
- Linux快速启动MongoDB(linux启动mongo)
- MongoDB单机部署实战(mongodb单机部署)
- MongoDB云服务:轻松实现数据库集群部署(mongodb云服务)
- MongoDB部署:构建跨平台高可用数据库(mongodb部署)
- MongoDB安全:如何设置用户名密码(mongodb用户名密码)
- 解决MongoDB 超时问题:正确的设定(mongodb超时设置)
- Redis与MongoDB——一场激烈的双大比拼(redis和mongodb)
- MongoDB 分片部署——实现理想的伸缩性(mongodb分片部署)
- MongoDB分布式部署:最佳实践(mongodb分布式部署)
- 集MongoDB: 副本集为安全保驾护航(mongodb副本)
- MongoDB:解决大数据量问题的有效解决方案(mongodb数据量)
- 卸载MongoDB:一个快速指南(卸载mongodb)
- MongoDB:让文档数据库的工作更简单(mongodb文档数据库)
- 处理解决 MongoDB 错误的正确方法(mongodb错误)
- 深入理解MongoDB的更新数据库技术(mongodb更新数据库)
- MongoDB带来的极大优势(mongodb优点)
- 使用MongoDB实现高效图片存储与管理(mongodb图片存储)
- MongoDB 中删除数据表的方法(mongodb删除表)
- 持久化MongoDB:用多线程实现数据持久化(mongodb多线程)
- 如何在MongoDB中查看数据:使用查询和聚合操作进行检索和分析。(mongodb怎么看数据)
- 如何停止MongoDB数据库服务?(mongodb停止)
- MongoDB脚本执行技巧:优化数据库操作步骤!(mongodb执行脚本)
- MongoDB实现全文检索的优秀指南(全文检索mongodb)