三个节点的副本集如下图所示:

实验目的:

  配置MongoDB的3节点副本集

  3个节点的副本集都要开启auth认证,并且开启认证后,能互相通信

第一步 - 准备环境

准备三个虚拟机,其中一个用作Primary,另外两个用作Secondary。如上图展示的那样

  1. 虚拟机信息如下:
  2.  
  3. Primary172.xx.xx.107
  4.  
  5. Secondary172.xx.xx.105 172.xx.xx.106   

第二步 - yum安装Mongo

/etc/yum.repos.d/目录下,创建一个mongodb.repo文件,指定MongoDB资源库即可。

使用 vim /etc/yum.repos.d/mongodb.repo命令,创建并打开文件mongodb.repo

  1. [mongodb-org-3.4]
  2.  
  3. name=MongoDB Repository
  4.  
  5. baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
  6.  
  7. gpgcheck=1
  8.  
  9. enabled=1
  10.  
  11. gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

  

  1. ### 然后
  2.  
  3. # yum repolist
  4. # yum install mongodb-org  

第三步 - 配置副本集

使用vim /etc/mongod.conf配置,每一台虚拟机上的Mongod配置文件。

在replication选项中添加oplogSizeMB 和 replSetName两个属性

  1. # vim /etc/mongod.conf
  2.  
  3. replication:
  4.  
  5. oplogSizeMB: 1024
  6.  
  7. replSetName: test 

查看mongod.conf文件配置

  1. # cat /etc/mongod.conf
  2.  
  3. # mongod.conf
  4.  
  5. # for documentation of all options, see:
  6. # http://docs.mongodb.org/manual/reference/configuration-options/
  7.  
  8. # where to write logging data.
  9. systemLog:
  10. destination: file
  11. logAppend: true
  12. path: /var/log/mongodb/mongod.log
  13.  
  14. # Where and how to store data.
  15. storage:
  16. dbPath: /var/lib/mongo
  17. journal:
  18. enabled: true
  19. # engine:
  20. # mmapv1:
  21. # wiredTiger:
  22.  
  23. # how the process runs
  24. processManagement:
  25. fork: true # fork and run in background
  26. pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
  27.  
  28. # network interfaces
  29. net:
  30. port: 27017
  31. bindIp: 0.0.0.0 # Listen to local interface only, comment to listen on all interfaces.
  32.  
  33. #security:
  34.  
  35. #operationProfiling:
  36.  
  37. replication:
  38. oplogSizeMB: 1024
  39. replSetName: test
  40.  
  41. #sharding:
  42.  
  43. ## Enterprise-Only Options
  44.  
  45. #auditLog:
  46.  
  47. #snmp:   
  1. 注意:
  2.  
  3. 3台虚拟机,MongoDB配置文件mongod.conf中的replSetName名字要保持一致,
  4.  
  5. 在本例中,replSetName的名字为test,这个名字可以随便取  

 

第四步 - 启动

配置好副本集之后,通过mongod --config /etc/mongod.conf 命令启动三个虚拟机中的Mongo服务

  1. [root@dev04 mongodb]# mongod --config /etc/mongod.conf
  2. about to fork child process, waiting until server is ready for connections.
  3. forked process: 30799
  4. child process started successfully, parent exiting  

因为107端口的虚拟机安装的MongoDB要用作Primary节点,所以,我们可以使用mongo命令来连接

  1. [root@dev04 mongodb]# mongo
  2. MongoDB shell version v3.4.2
  3. connecting to: mongodb://127.0.0.1:27017
  4. MongoDB server version: 3.4.2
  5.  
  6. ### 使用use admin, 切换到时admin数据库
  7. > use admin
  8. switched to db admin  

然后通过config配置设置副本集节点成员

  1. config={_id:"test",members:[{_id:0,host:"172.xxx.xxx.107:27017"},{_id:1,host:"172.xxx.xxx.106:27017"},{_id:2,host:"172.xxx.xxx.105:27017"}]}
  2.  
  3. 注:
  4.  
  5. _id:"test", test是副本集中取得名字。
  6.  
  7. members中添加每个副本集Mongod_idhost信息
  8.  
  9. > config={_id:"test",members:[{_id:0,host:"172.xxx.xxx.107:27017"},{_id:1,host:"172.xxx.xxx.106:27017"},{_id:2,host:"172.xxx.xxx.105:27017"}]}
  10. {
  11. "_id" : "test",
  12. "members" : [
  13. {
  14. "_id" : 0,
  15. "host" : "172.xxx.xxx.107:27017"
  16. },
  17. {
  18. "_id" : 1,
  19. "host" : "172.xxx.xxx.106:27017"
  20. },
  21. {
  22. "_id" : 2,
  23. "host" : "172.xxx.xxx.105:27017"
  24. }
  25. ]
  26. }
  27. >  

然后,执行配置初始化,看到{ "ok" : 1 },则表明初始化成功

  1. > rs.initiate(config)
  2. { "ok" : 1 }  

使用rs.status()查看副本节点状态

  1. test:PRIMARY> rs.status()
  2. {
  3. "set" : "test",
  4. "date" : ISODate("2017-02-17T01:30:53.128Z"),
  5. "myState" : 1,
  6. "term" : NumberLong(1),
  7. "heartbeatIntervalMillis" : NumberLong(2000),
  8. "optimes" : {
  9. "lastCommittedOpTime" : {
  10. "ts" : Timestamp(1487295047, 1),
  11. "t" : NumberLong(1)
  12. },
  13. "appliedOpTime" : {
  14. "ts" : Timestamp(1487295047, 1),
  15. "t" : NumberLong(1)
  16. },
  17. "durableOpTime" : {
  18. "ts" : Timestamp(1487295047, 1),
  19. "t" : NumberLong(1)
  20. }
  21. },
  22. "members" : [
  23. {
  24. "_id" : 0,
  25. "name" : "172.xxx.xxx.107:27017",
  26. "health" : 1,
  27. "state" : 1,
  28. "stateStr" : "PRIMARY",
  29. "uptime" : 693,
  30. "optime" : {
  31. "ts" : Timestamp(1487295047, 1),
  32. "t" : NumberLong(1)
  33. },
  34. "optimeDate" : ISODate("2017-02-17T01:30:47Z"),
  35. "infoMessage" : "could not find member to sync from",
  36. "electionTime" : Timestamp(1487294966, 1),
  37. "electionDate" : ISODate("2017-02-17T01:29:26Z"),
  38. "configVersion" : 1,
  39. "self" : true
  40. },
  41. {
  42. "_id" : 1,
  43. "name" : "172.xxx.xxx.106:27017",
  44. "health" : 1,
  45. "state" : 2,
  46. "stateStr" : "SECONDARY",
  47. "uptime" : 96,
  48. "optime" : {
  49. "ts" : Timestamp(1487295047, 1),
  50. "t" : NumberLong(1)
  51. },
  52. "optimeDurable" : {
  53. "ts" : Timestamp(1487295047, 1),
  54. "t" : NumberLong(1)
  55. },
  56. "optimeDate" : ISODate("2017-02-17T01:30:47Z"),
  57. "optimeDurableDate" : ISODate("2017-02-17T01:30:47Z"),
  58. "lastHeartbeat" : ISODate("2017-02-17T01:30:52.708Z"),
  59. "lastHeartbeatRecv" : ISODate("2017-02-17T01:30:51.674Z"),
  60. "pingMs" : NumberLong(0),
  61. "syncingTo" : "172.xxx.xxx.107:27017",
  62. "configVersion" : 1
  63. },
  64. {
  65. "_id" : 2,
  66. "name" : "172.xxx.xxx.105:27017",
  67. "health" : 1,
  68. "state" : 2,
  69. "stateStr" : "SECONDARY",
  70. "uptime" : 96,
  71. "optime" : {
  72. "ts" : Timestamp(1487295047, 1),
  73. "t" : NumberLong(1)
  74. },
  75. "optimeDurable" : {
  76. "ts" : Timestamp(1487295047, 1),
  77. "t" : NumberLong(1)
  78. },
  79. "optimeDate" : ISODate("2017-02-17T01:30:47Z"),
  80. "optimeDurableDate" : ISODate("2017-02-17T01:30:47Z"),
  81. "lastHeartbeat" : ISODate("2017-02-17T01:30:52.708Z"),
  82. "lastHeartbeatRecv" : ISODate("2017-02-17T01:30:51.745Z"),
  83. "pingMs" : NumberLong(0),
  84. "syncingTo" : "172.xxx.xxx.106:27017",
  85. "configVersion" : 1
  86. }
  87. ],
  88. "ok" : 1
  89. test:PRIMARY>

  

第五步:副本集的认证

副本集总体思路是用户名、密码和keyfile文件,keyfile需要各个副本集服务启动时加载而且要是同一文件,然后在操作库是需要用户名、密码
KeyFile文件必须满足条件:

  • 至少6个字符,小于1024字节
  • 认证时候不考虑文件中空白字符
  • 连接到副本集的成员和mongos进成的keyfile文件内容必须一样
  • 必须是base64编码,但是不能有等号
  • 文件权限必须是x00,也就是说,不能分配任何权限给group成员和other成员
  1. ### 在107节点生成Keyfile
  2. [root@localhost ~]# openssl rand -base64 90 > /usr/local/mongodb/keyfiletest

  

  1. ### 然后该文件scp到105、106上面
  2.  
  3. scp /usr/local/mongodb/keyfile root@172.xxx.xxx.105[106]:/usr/local/mongodb/

  

  1. ### 修改配置文件
  2.  
  3. # vim /etc/mongod.conf
  4.  
  5. security:
  6. keyFile: /usr/local/mongodb/keyfiletest
  7. authorization: enabled

 

  1. # cat /etc/mongod.conf
  2.  
  3. # mongod.conf
  4.  
  5. # for documentation of all options, see:
  6. # http://docs.mongodb.org/manual/reference/configuration-options/
  7.  
  8. # where to write logging data.
  9. systemLog:
  10. destination: file
  11. logAppend: true
  12. path: /var/log/mongodb/mongod.log
  13.  
  14. # Where and how to store data.
  15. storage:
  16. dbPath: /var/lib/mongo
  17. journal:
  18. enabled: true
  19. # engine:
  20. # mmapv1:
  21. # wiredTiger:
  22.  
  23. # how the process runs
  24. processManagement:
  25. fork: true # fork and run in background
  26. pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
  27.  
  28. # network interfaces
  29. net:
  30. port: 27017
  31. bindIp: 0.0.0.0 # Listen to local interface only, comment to listen on all interfaces.
  32.  
  33. security:
  34. keyFile: /usr/local/mongodb/keyfiletest
  35. authorization: enabled
  36.  
  37. #operationProfiling:
  38.  
  39. replication:
  40. oplogSizeMB: 1024
  41. replSetName: test
  42.  
  43. #sharding:
  44.  
  45. ## Enterprise-Only Options
  46.  
  47. #auditLog:
  48.  
  49. #snmp: 

重启mongod服务,认证OK

转载及借鉴博客地址:

https://my.oschina.net/wangmengjun/blog/840997?from=timeline&isappinstalled=0

http://www.cnblogs.com/xiaoit/p/4522218.html

http://www.cnblogs.com/libingql/archive/2011/06/09/2076440.html

CentOS6.8部署MongoDB集群及支持auth认证的更多相关文章

  1. 在Docker中安装和部署MongoDB集群

    此文已由作者袁欢授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 在Docker中安装mongodb 采用的mongodb镜像:https://registry.hub.doc ...

  2. Centos6.6部署Redis集群

    Centos6.6部署Redis集群 1环境准备 1环境安装redis 1安装ruby 2配置redis主从环境 3部署redis sentinel服务器 5集群使用 13当前集群环境说明 13测试功 ...

  3. 在CentOS6.6上以replSet方式部署MongoDB集群

    此文已由作者袁欢授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 部署方式在3台centos6.6系统上以Replica Set方式部署mongodb3.0.2集群. 官方参考 ...

  4. centos7下安装部署mongodb集群(副本集模式)

    环境需求:Mongodb集群有三种模式:  Replica Set, Sharding,Master-Slaver.  这里部署的是Replica Set模式. 测试环境: 这里副本集(Replica ...

  5. 一键部署MongoDB集群Windows版

    由于周末在家手头没有虚拟机,所以在windows下单机完毕部署要求,并编写bat执行脚本. 1.创建配置文件及相关文件夹 总的启动脚本例如以下(startmc.bat): rem m1 start m ...

  6. Centos6.9下RabbitMQ集群部署记录

    之前简单介绍了CentOS下单机部署RabbltMQ环境的操作记录,下面详细说下RabbitMQ集群知识,RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言, ...

  7. 手把手教你用Docker部署一个MongoDB集群

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中最像关系数据库的.支持类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引 ...

  8. MongoDB集群部署 - 带访问控制的分片副本集

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

  9. [转]搭建高可用mongodb集群(二)—— 副本集

    在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...

随机推荐

  1. 在看 jquery 源码中发现的一些优化方向

    1. 避免使用 $.fn.each 或 $.each 因为它比原生的 for/while 真的会慢一些,循环次数越多差距越大. 另外,对象的 for-in 比 for 是要快一丢丢的,但数组的 for ...

  2. Kubernetes Ingress

    Kubernetes关于服务的暴露主要是通过NodePort方式,通过绑定node主机的某个端口,然后进行pod的请求转发和负载均衡,但这种方式下缺陷是 Service可能有很多个,如果每个都绑定一个 ...

  3. kubernetes liveness readiness

    Liveness Probe(存活探针):用于判断容器是否存货(running状态),如果LivenessProbe探测到容器不健康,则kubelet将杀掉该容器,并根据容器的重启策略做相应的处理.如 ...

  4. HTML文本/文字竖直方向/纵向显示

    HTML vertical text (Safari, Firefox, Chrome, and Opera) .vText { -moz-transform: rotate(-90deg) tran ...

  5. Java之File文件类

    package IoDemo; import java.io.File; import java.io.FileFilter; import java.io.IOException; import j ...

  6. JAVA题库01

    说出一些常用的类,包,接口,请各举5个 常用的类:BufferedReader  BufferedWriter  FileReader  FileWirter  String Integer java ...

  7. 天地图OGC WMTS服务规则

    图层名称 服务地址 投影类型 矢量底图 http://t0.tianditu.gov.cn/vec_c/wmts?tk=您的密钥 经纬度投影 http://t0.tianditu.gov.cn/vec ...

  8. npm全局安装

    时间长了,很多东西都忘了. 全局安装以后,在你自己的电脑任何位置都可以使用的包.直接用命令使用的: 比如:supervisor mok 还有cnpm,express之类的.gulp之类的. 剩下的我们 ...

  9. Microsoft Prism安装使用教程 搭建WPF松耦合架构框架

    Microsoft Prism安装使用教程 搭建WPF松耦合架构框架 Prism是由微软Patterns & Practices团队开发的项目,目的在于帮助开发人员构建松散耦合的.更灵活.更易 ...

  10. php实现微信扫码自动登陆与注册功能

    本文实例讲述了php实现微信扫码自动登陆与注册功能.分享给大家供大家参考,具体如下: 微信开发已经是现在程序员必须要掌握的一项基本的技术了,其实做过微信开发的都知道微信接口非常的强大做起来也非常的简单 ...