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

实验目的:

  配置MongoDB的3节点副本集

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

第一步 - 准备环境

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

虚拟机信息如下:

    Primary:172.xx.xx.107 

    Secondary:172.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

[mongodb-org-3.4]

name=MongoDB Repository

baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/

gpgcheck=1

enabled=1

gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

  

### 然后

# yum repolist
# yum install mongodb-org  

第三步 - 配置副本集

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

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

# vim /etc/mongod.conf

replication:

    oplogSizeMB: 1024

    replSetName: test 

查看mongod.conf文件配置

# cat /etc/mongod.conf

# mongod.conf

# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/ # where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log # Where and how to store data.
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger: # how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile # network interfaces
net:
port: 27017
bindIp: 0.0.0.0 # Listen to local interface only, comment to listen on all interfaces. #security: #operationProfiling: replication:
oplogSizeMB: 1024
replSetName: test #sharding: ## Enterprise-Only Options #auditLog: #snmp:   
注意:

    3台虚拟机,MongoDB配置文件mongod.conf中的replSetName名字要保持一致,

    在本例中,replSetName的名字为test,这个名字可以随便取  

 

第四步 - 启动

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

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

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

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

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

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

注:

_id:"test", test是副本集中取得名字。

members中添加每个副本集Mongod的_id和host信息

> 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"}]}
{
"_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"
}
]
}
>  

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

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

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

test:PRIMARY> rs.status()
{
"set" : "test",
"date" : ISODate("2017-02-17T01:30:53.128Z"),
"myState" : 1,
"term" : NumberLong(1),
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1487295047, 1),
"t" : NumberLong(1)
},
"appliedOpTime" : {
"ts" : Timestamp(1487295047, 1),
"t" : NumberLong(1)
},
"durableOpTime" : {
"ts" : Timestamp(1487295047, 1),
"t" : NumberLong(1)
}
},
"members" : [
{
"_id" : 0,
"name" : "172.xxx.xxx.107:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 693,
"optime" : {
"ts" : Timestamp(1487295047, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-02-17T01:30:47Z"),
"infoMessage" : "could not find member to sync from",
"electionTime" : Timestamp(1487294966, 1),
"electionDate" : ISODate("2017-02-17T01:29:26Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 1,
"name" : "172.xxx.xxx.106:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 96,
"optime" : {
"ts" : Timestamp(1487295047, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1487295047, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-02-17T01:30:47Z"),
"optimeDurableDate" : ISODate("2017-02-17T01:30:47Z"),
"lastHeartbeat" : ISODate("2017-02-17T01:30:52.708Z"),
"lastHeartbeatRecv" : ISODate("2017-02-17T01:30:51.674Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "172.xxx.xxx.107:27017",
"configVersion" : 1
},
{
"_id" : 2,
"name" : "172.xxx.xxx.105:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 96,
"optime" : {
"ts" : Timestamp(1487295047, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1487295047, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-02-17T01:30:47Z"),
"optimeDurableDate" : ISODate("2017-02-17T01:30:47Z"),
"lastHeartbeat" : ISODate("2017-02-17T01:30:52.708Z"),
"lastHeartbeatRecv" : ISODate("2017-02-17T01:30:51.745Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "172.xxx.xxx.106:27017",
"configVersion" : 1
}
],
"ok" : 1
test:PRIMARY>

  

第五步:副本集的认证

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

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

  

### 然后该文件scp到105、106上面

scp  /usr/local/mongodb/keyfile root@172.xxx.xxx.105[106]:/usr/local/mongodb/

  

###  修改配置文件

# vim /etc/mongod.conf

security:
keyFile: /usr/local/mongodb/keyfiletest
authorization: enabled

 

# cat /etc/mongod.conf

# mongod.conf

# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/ # where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log # Where and how to store data.
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger: # how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile # network interfaces
net:
port: 27017
bindIp: 0.0.0.0 # Listen to local interface only, comment to listen on all interfaces. security:
keyFile: /usr/local/mongodb/keyfiletest
authorization: enabled #operationProfiling: replication:
oplogSizeMB: 1024
replSetName: test #sharding: ## Enterprise-Only Options #auditLog: #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. 【HackerRank】Cut the tree

    题目链接:Cut the tree 题解:题目要求求一条边,去掉这条边后得到的两棵树的节点和差的绝对值最小. 暴力求解会超时. 如果我们可以求出以每个节点为根的子树的节点之和,那么当我们去掉一条边(a ...

  2. 一句white-space:nowrap解决IE6,IE7下浮动元素不自动换行

    一句white-space:nowrap解决IE6,IE7下浮动元素不自动换行

  3. CentOS 6.5 下vim 配置

    1. 登录并进入你常用的用户名下,查看其主目录 命令: # su xxx $ cd xxx $ ls -a 2.查看并建立目录和文件 首先看你的主目录~/ 下是否有.vimrc文件,没有就输入指令 $ ...

  4. 吴恩达深度学习笔记(九) —— FaceNet

    主要内容: 一.FaceNet人脸识别简介 二.使用神经网络对人脸进行编码 三.代价函数triple loss 四.人脸库 五.人脸认证与人脸识别 一.FaceNet简介 1.FaceNet是一个深层 ...

  5. Ubuntu或Linux搭建网站环境常见问题详解

    本屌丝常见的问题已经全部记录如下,如大家有其他问题欢迎随时跟我进行交流. 1.无法进行软件源安装  提示信息:Package has no installation candidate 具体信息如下: ...

  6. Hadoop心跳机制源码分析

    正文: 一.体系背景 首先和大家说明一下:hadoop的心跳机制的底层是通过RPC机制实现的,这篇文章我只介绍心跳实现的代码,对于底层的具体实现,大家可以参考我的另几篇博客: 1. hadoop的RP ...

  7. HDU 2419 Boring Game(并查集+map)

    感觉做得有点复杂了,但是AC了还是...爽... 题意:给你n个点每个点有一个价值,接下来有m条边,然后是q个操作,每个操作有三种情况: F X K:寻找与X点直接或间接相连的不小于价值K的最小价值, ...

  8. http 常见的错误码

    翻译自:https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 常见错误码 一.信息 1XX (Information 1xx) ——这一类的状 ...

  9. Codeforces Round #373 (Div. 2) E. Sasha and Array 矩阵快速幂+线段树

    E. Sasha and Array time limit per test 5 seconds memory limit per test 256 megabytes input standard ...

  10. neutron 虚拟机网络问题调试

    1. Security Group全部打开,这是最基本的,但是很多人容易忘记 2. 通过界面查看虚拟机的log,也可以在compute节点上查看console.log文件,看看里面是否有DHCP获取I ...