步骤总结:

  1. 按照mongos路由、配置副本集服务,分片副本集服务的先后顺序关闭所有节点服务
  2. 创建副本集认证的key文件,复制到每个服务所在目录
  3. 修改每个服务的配置文件,增加参数
  4. 启动每个服务
  5. 创建账号和认证(存储在配置副本集中)

另一种操作步骤:

  1. 创建超管账号和普通用户账号
  2. 按照mongos路由、配置副本集服务,分片副本集服务的先后顺序关闭所有节点服务
  3. 创建副本集认证的key文件,复制到每个服务所在目录
  4. 修改每个服务的配置文件,增加参数
  5. 启动每个服务

关闭已开启的集群服务(可选)

分片集群环境下的安全认证和副本集环境下基本上一样。

但分片集群的服务器环境和架构较为复杂,建议在搭建分片集群的时候,直接加入安全认证和服务器间的鉴权,如果之前有数据,可先将之前的数据备份出来,再还原回去。

本文使用之前搭建好的集群服务,因此,先停止之前的集群服务

停止服务的方式有两种:快速关闭和标准关闭,下面依次说明:

(1)快速关闭方法(快速,简单,数据可能会出错)

目标:通过系统的kill命令直接杀死进程:

  1. #通过进程编号关闭节点
  2. kill -2 54410

实际操作命令:

  1. ps -ef|grep "mongod -f "|grep -v grep|cut -c 9-15|xargs kill -9
  2. ps -ef|grep "mongos -f "|grep -v grep|cut -c 9-15|xargs kill -9

依次杀死 mongos路由、配置副本集服务,分片副本集服务,从次节点开始。直到所有成员都离线。

副本集杀的时候,建议先杀仲裁者,再杀副本节点,最后是主节点,以避免潜在的回滚。

杀完要检查一下,避免有的没有杀掉。

【补充】

如果一旦是因为数据损坏,则需要进行如下操作(了解):

1)删除lock文件:

  1. rm -f /home/mongodb/sharded_cluster/myshardrs01_27018/data/db/*.lock \
  2. /home/mongodb/sharded_cluster/myshardrs01_27118/data/db/*.lock \
  3. /home/mongodb/sharded_cluster/myshardrs01_27218/data/db/mongod.lock \
  4. /home/mongodb/sharded_cluster/myshardrs02_27318/data/db/mongod.lock \
  5. /home/mongodb/sharded_cluster/myshardrs02_27418/data/db/mongod.lock \
  6. /home/mongodb/sharded_cluster/myshardrs02_27518/data/db/mongod.lock \
  7. /home/mongodb/sharded_cluster/myconfigrs_27019/data/db/mongod.lock \
  8. /home/mongodb/sharded_cluster/myconfigrs_27119/data/db/mongod.lock \
  9. /home/mongodb/sharded_cluster/myconfigrs_27219/data/db/mongod.lock

2 )依次修复数据:

  1. /usr/bin/mongod --repair --dbpath=/home/mongodb/sharded_cluster/myshardrs01_27018/data/db
  2. /usr/bin/mongod --repair --dbpath=/home/mongodb/sharded_cluster/myshardrs01_27118/data/db
  3. /usr/bin/mongod --repair --dbpath=/home/mongodb/sharded_cluster/myshardrs01_27218/data/db
  4. /usr/bin/mongod --repair --dbpath=/home/mongodb/sharded_cluster/myshardrs02_27318/data/db
  5. /usr/bin/mongod --repair --dbpath=/home/mongodb/sharded_cluster/myshardrs02_27418/data/db
  6. /usr/bin/mongod --repair --dbpath=/home/mongodb/sharded_cluster/myshardrs02_27518/data/db
  7. /usr/bin/mongod --repair --dbpath=/home/mongodb/sharded_cluster/myconfigrs_27019/data/db
  8. /usr/bin/mongod --repair --dbpath=/home/mongodb/sharded_cluster/myconfigrs_27119/data/db
  9. /usr/bin/mongod --repair --dbpath=/home/mongodb/sharded_cluster/myconfigrs_27219/data/db
  10. /usr/bin/mongod --repair --dbpath=/home/mongodb/sharded_cluster/mymongos_27017/data/db
  11. /usr/bin/mongod --repair --dbpath=/home/mongodb/sharded_cluster/mymongos_27117/data/db

(2)标准的关闭方法(数据不容易出错,但麻烦):

目标:通过mongo客户端中的shutdownServer命令来依次关闭各个服务

关闭分片服务器副本集中的服务,建议依次关闭仲裁节点、副本节点、主节点。主要的操作步骤参考如下:

  1. //客户端登录服务,注意,这里通过localhost登录,如果需要远程登录,必须先登录认证才行。
  2. mongo --port 27018
  3. //告知副本集说本机要下线
  4. rs.stepDown()
  5. //#切换到admin库
  6. use admin
  7. //关闭服务
  8. db.shutdownServer()

关闭配置服务器副本集的服务,建议依次关闭副本节点、主节点。主要的操作步骤参考如下:

  1. //客户端登录服务,注意,这里通过localhost登录,如果需要远程登录,必须先登录认证才行。
  2. mongo --port 27019
  3. //告知副本集说本机要下线
  4. rs.stepDown()
  5. //#切换到admin库
  6. use admin
  7. //关闭服务
  8. db.shutdownServer()

关闭路由服务器的服务,建议依次关闭两个路由节点。主要的操作步骤参考如下:

  1. //客户端登录服务,注意,这里通过localhost登录,如果需要远程登录,必须先登录认证才行。
  2. mongo --port 27017
  3. //告知副本集说本机要下线
  4. rs.stepDown()
  5. //#切换到admin库
  6. use admin
  7. //关闭服务
  8. db.shutdownServer()

创建副本集认证的key文件

第一步:生成一个key文件到当前文件夹中。

可以使用任何方法生成密钥文件。例如,以下操作使用openssl生成密码文件,然后使用chmod来更改文件权限,仅为文件所有者提供读取权限

  1. # cd /home/mongodb/sharded_cluster
  2. # openssl rand -base64 90 -out ./mongo.keyfile
  3. # chmod 400 ./mongo.keyfile
  4. # ll mongo.keyfile
  5. -r--------. 1 root root 122 8  14 14:23 mongo.keyfile

提示:所有副本集节点都必须要用同一份keyfile,一般是在一台机器上生成,然后拷贝到其他机器上,且必须有读的权限,否则将来会报错: permissions on /home/mongodb/replica_sets/myrs_27017/mongo.keyfile are too open

一定要保证密钥文件一致,文件位置随便。但是为了方便查找,建议每台机器都放到一个固定的位置,都放到和配置文件一起的目录中。这里将该文件分别拷贝到多个目录中:

  1. echo '/home/mongodb/sharded_cluster/myshardrs01_27018/mongo.keyfile
  2. /home/mongodb/sharded_cluster/myshardrs01_27118/mongo.keyfile
  3. /home/mongodb/sharded_cluster/myshardrs01_27218/mongo.keyfile
  4. /home/mongodb/sharded_cluster/myshardrs02_27318/mongo.keyfile
  5. /home/mongodb/sharded_cluster/myshardrs02_27418/mongo.keyfile
  6. /home/mongodb/sharded_cluster/myshardrs02_27518/mongo.keyfile
  7. /home/mongodb/sharded_cluster/myconfigrs_27019/mongo.keyfile
  8. /home/mongodb/sharded_cluster/myconfigrs_27119/mongo.keyfile
  9. /home/mongodb/sharded_cluster/myconfigrs_27219/mongo.keyfile
  10. /home/mongodb/sharded_cluster/mymongos_27017/mongo.keyfile
  11. /home/mongodb/sharded_cluster/mymongos_27117/mongo.keyfile' | xargs -n 1 cp -v /home/mongodb/sharded_cluster/mongo.keyfile

修改配置文件指定keyfile

分别编辑几个服务的mongod.conf文件,添加相关内容:

  1. # vim /home/mongodb/sharded_cluster/myshardrs01_27018/mongod.conf
  2. security:
  3. #KeyFile鉴权文件
  4. keyFile: /home/mongodb/sharded_cluster/myshardrs01_27018/mongo.keyfile
  5. #开启认证方式运行
  6. authorization: enabled

其他配置文件参考上面的添加,注意mongo.keyfile文件路径别写错了

mongos使用的mongod.conf添加如下相关内容:

  1. # /home/mongodb/sharded_cluster/mymongos_27117/mongos.conf
  2. security:
  3. #KeyFile鉴权文件
  4. keyFile: /home/mongodb/sharded_cluster/mymongos_27117/mongo.keyfile

mongos 比mongod少了authorization:enabled的配置。

原因是,副本集加分片的安全认证需要配置两方面的,副本集各个节点之间使用内部身份验证,用于内部各个mongo实例的通信,只有相同keyfile才能相互访问。所以都要开启 keyFile:/mongodb/sharded_cluster/mymongos_27117/mongo.keyfile 。

然而对于所有的mongod,才是真正的保存数据的分片。

mongos只做路由,不保存数据。所以所有的mongod开启访问数据的授权authorization:enabled。这样用户只有账号密码正确才能访问到数据。

重新启动节点

必须依次启动配置节点、分片节点、路由节点:

  1. /home/mongodb/sharded_cluster # /usr/bin/mongod -f /home/mongodb/sharded_cluster/myconfigrs_27019/mongod.conf
  2. about to fork child process, waiting until server is ready for connections.
  3. forked process: 8753
  4. child process started successfully, parent exiting
  5. ------------------------------------------------------------------------------------------------------------------------------------------------------------
  6. /home/mongodb/sharded_cluster # /usr/bin/mongod -f /home/mongodb/sharded_cluster/myconfigrs_27119/mongod.conf
  7. about to fork child process, waiting until server is ready for connections.
  8. forked process: 8862
  9. child process started successfully, parent exiting
  10. ------------------------------------------------------------------------------------------------------------------------------------------------------------
  11. /home/mongodb/sharded_cluster # /usr/bin/mongod -f /home/mongodb/sharded_cluster/myconfigrs_27219/mongod.conf
  12. about to fork child process, waiting until server is ready for connections.
  13. forked process: 8974
  14. child process started successfully, parent exiting
  15. ------------------------------------------------------------------------------------------------------------------------------------------------------------
  16. /home/mongodb/sharded_cluster # /usr/bin/mongod -f /home/mongodb/sharded_cluster/myshardrs01_27018/mongod.conf
  17. about to fork child process, waiting until server is ready for connections.
  18. forked process: 9115
  19. child process started successfully, parent exiting
  20. ------------------------------------------------------------------------------------------------------------------------------------------------------------
  21. /home/mongodb/sharded_cluster # /usr/bin/mongod -f /home/mongodb/sharded_cluster/myshardrs01_27118/mongod.conf
  22. about to fork child process, waiting until server is ready for connections.
  23. forked process: 9243
  24. child process started successfully, parent exiting
  25. ------------------------------------------------------------------------------------------------------------------------------------------------------------
  26. /home/mongodb/sharded_cluster # /usr/bin/mongod -f /home/mongodb/sharded_cluster/myshardrs01_27218/mongod.conf
  27. about to fork child process, waiting until server is ready for connections.
  28. forked process: 9384
  29. child process started successfully, parent exiting
  30. ------------------------------------------------------------------------------------------------------------------------------------------------------------
  31. /home/mongodb/sharded_cluster # /usr/bin/mongod -f /home/mongodb/sharded_cluster/myshardrs02_27318/mongod.conf
  32. about to fork child process, waiting until server is ready for connections.
  33. forked process: 9493
  34. child process started successfully, parent exiting
  35. ------------------------------------------------------------------------------------------------------------------------------------------------------------
  36. /home/mongodb/sharded_cluster # /usr/bin/mongod -f /home/mongodb/sharded_cluster/myshardrs02_27418/mongod.conf
  37. about to fork child process, waiting until server is ready for connections.
  38. forked process: 9633
  39. child process started successfully, parent exiting
  40. ------------------------------------------------------------------------------------------------------------------------------------------------------------
  41. /home/mongodb/sharded_cluster # /usr/bin/mongod -f /home/mongodb/sharded_cluster/myshardrs02_27518/mongod.conf
  42. about to fork child process, waiting until server is ready for connections.
  43. forked process: 9804
  44. child process started successfully, parent exiting
  45. ------------------------------------------------------------------------------------------------------------------------------------------------------------
  46. /home/mongodb/sharded_cluster # /usr/bin/mongos -f /home/mongodb/sharded_cluster/mymongos_27017/mongos.conf
  47. about to fork child process, waiting until server is ready for connections.
  48. forked process: 9895
  49. child process started successfully, parent exiting
  50. ------------------------------------------------------------------------------------------------------------------------------------------------------------
  51. /home/mongodb/sharded_cluster # /usr/bin/mongos -f /home/mongodb/sharded_cluster/mymongos_27117/mongos.conf
  52. about to fork child process, waiting until server is ready for connections.
  53. forked process: 9963

注意:

这里有个非常特别的情况,就是启动顺序。先启动配置节点,再启动分片节点,最后启动路由节点。

如果先启动分片节点,会卡住,提示:

  1. about to fork child process, waiting until server is ready for connections

这也许是个 bug。原因未知。

创建帐号和认证

客户端mongo,通过localhost登录任意一个mongos路由,

  1. # mongo --port 27017

提示:相当于一个后门,只能在 admin下添加用户。

创建一个管理员帐号:

  1. mongos> use admin
  2. switched to db admin
  3. mongos>  db.createUser({user:"myroot",pwd:"123456",roles:["root"]})
  4. Successfully added user: { "user" : "myroot", "roles" : [ "root" ] }

提示:如果在开启认证之前已经创建了管理员账号,这里可以忽略

创建一个普通权限帐号:

  1. mongos> use admin
  2. switched to db admin
  3. mongos> db.auth("myroot","123456")
  4. 1
  5. mongos> use articledb
  6. switched to db articledb
  7. mongos> db.createUser({user: "bobo", pwd: "123456", roles: [{ role: "readWrite",db: "articledb" }]})
  8. mongos> db.auth("bobo","123456")
  9. 1

提示:通过mongos添加的账号信息,只会保存到配置节点的服务中,具体的数据节点不保存账号信息,因此,分片中的账号信息不涉及到同步问题。

mongo客户端登录mongos路由,用管理员帐号登录可查看分片情况:

  1. mongos> use admin
  2. switched to db admin
  3. mongos>  db.auth("myroot","123456")
  4. 1
  5. mongos> sh.status()

退出连接,重新连接服务,使用普通权限帐号访问数据:

  1. # mongo --host=192.168.0.253 --port=27017
  2. mongos> use articledb
  3. switched to db articledb
  4. mongos> db.auth("bobo","123456")
  5. 1
  6. mongos> show collections
  7. comment
  8. comment2
  9. mongos> db.comment.count()
  10. 10001

MongoDB 分片集群的用户和权限一般操作步骤的更多相关文章

  1. 关于MongoDB副本集和分片集群有关用户和权限的说明分析

    1.MongoDB副本集 可以先创建超管用户,然后再关闭服务,创建密钥文件,修改配置文件,启动服务,使用超管用户登录验证,然后创建普通用户 2.MongoDB分片集群 先关闭服务,创建密钥文件,修改配 ...

  2. Mongodb分片集群技术+用户验证

    随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,“分片”就用这个来解决这个问题. 从图中可以看到有四个组件:mongos.config server. ...

  3. mongodb分片集群

    第一章 1.mongodb 分片集群解释和目的 一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合.复制集提供了数据冗余和高等级的可靠性,这是生产部署的基础. 第二章 1. ...

  4. 网易云MongoDB分片集群(Sharding)服务已上线

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. MongoDB sharding cluster(分片集群)是MongoDB提供的数据在线水平扩展方案,包括 ...

  5. MongoDB 分片集群实战

    背景 在如今的互联网环境下,海量数据已随处可见并且还在不断增长,对于如何存储处理海量数据,比较常见的方法有两种: 垂直扩展:通过增加单台服务器的配置,例如使用更强悍的 CPU.更大的内存.更大容量的磁 ...

  6. MongoDB分片集群原理、搭建及测试详解

    随着技术的发展,目前数据库系统对于海量数据的存储和高效访问海量数据要求越来越高,MongoDB分片机制就是为了解决海量数据的存储和高效海量数据访问而生. MongoDB分片集群由mongos路由进程( ...

  7. Windows 搭建MongoDB分片集群(一)

    一.角色说明 要构建一个MongoDB分片集群,需要三个角色: shard server  即存储实际数据得分片,每个shard 可以是一个Mongod实例,也可以是一组mongod实例构成得Repl ...

  8. 分布式文档存储数据库之MongoDB分片集群

    前文我们聊到了mongodb的副本集以及配置副本集,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13953598.html:今天我们来聊下mongodb的分片 ...

  9. TiDB和MongoDB分片集群架构比较

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 最近阅读了TiDB源码的说明文档,跟MongoDB的分片集群做了下简单对比. 首先展示TiDB的整体架构 M ...

随机推荐

  1. Zend Studio,php 生成报错

    Zend Studio  Description Resource Path Location Type Undefined CSS file ("../red-treeview.css&q ...

  2. 【USACO 2012 Open】奶牛赛跑_题解

    奶牛赛跑 目录 奶牛赛跑 题目描述 输入格式 输出格式 样例 样例输入#1 样例输出#1 题解 代码 题目描述 约翰有头奶牛,他为这些奶牛准备了一个周长为的环形跑牛场.所有奶牛从起点同时起跑,奶牛在比 ...

  3. Sharding-jdbc 5.1.2案例

    简介 sharding-jdbc案例,版本5.1.2 springboot + mybatis-plus + sharding-jdbc 项目地址:sharding-jdbc-example 模块说明 ...

  4. iframe 标签

    iframe是一个内联框架,可以在当前HTML页面中嵌入另一个文档,一般情况下使用iframe直接在页面嵌套iframe标签再指定src就可以了. iframe 的常用属性: name : 规定 &l ...

  5. 【Azure 应用服务】本地创建Azure Function Kafka Trigger 函数和Kafka output的HTTP Trigger函数实验

    问题描述 在上一篇博文(https://www.cnblogs.com/lulight/p/16525902.html)中,我们成功的以VM作为Kafka服务器运行,并且验证了从其他机器中远程访问.在 ...

  6. HTML js 复习

    <a href="#top" target="_self">返回顶部</a> 返回页面顶部代码 打印js对象方法 function wr ...

  7. 基于微前端qiankun的多页签缓存方案实践

    作者:vivo 互联网前端团队- Tang Xiao 本文梳理了基于阿里开源微前端框架qiankun,实现多页签及子应用缓存的方案,同时还类比了多个不同方案之间的区别及优劣势,为使用微前端进行多页签开 ...

  8. MySQL 启停过程了解一二

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 前言 你知道MySQL启停都做了些什么吗? 启动的时 ...

  9. 用固态U盘让你的办公环境随身移动

    有些人因为家中的电脑设备没有办公环境,或者是软件太多装起来麻烦,以及环境不同步等原因上下班总是背着电脑,其实大可不必,只要将系统装进U盘,就可以让你的办公环境随身移动.在公司时启动U盘系统工作,下班后 ...

  10. React报错之useNavigate() may be used only in context of Router

    正文从这开始~ 总览 当我们尝试在react router的Router上下文外部使用useNavigate 钩子时,会产生"useNavigate() may be used only i ...