第一步:准备

1.安装包

mongodb-linux-x86_64-rhel70-3.4.2.tgz

2. 架构:

本文为 1-primary、1-secondary、1-arbiter 的 mongoDB 集群:

名称 IP 端口
mongodb 192.168.6.128 27017
mongodb 192.168.6.129 27017
mongodb 192.168.6.130 27017

3. 安装 MongoDB

根据架构信息,参照 MongoDB【第一篇】安装 来安装架构中的实例。

第二步:配置集群

1. 登录至任意主机,执行 mongodb/bin/mongo,进入 mongo shell 客户端

# cd mongodb/bin
# ./mongo

2. 在 mongo shell中,定义集群配置对象

> config = {
... "_id" : "rs1",
... "members" : [
... {"_id":,"host":" 192.168.6.128:27017"},
... {"_id":,"host":" 192.168.6.129:27017"},
... {"_id":,"host":" 192.168.6.130:27017", "arbiterOnly":true}
... ]
...}

其中,"_id" : "rs1"应与配置文件中配置的 replicaction.replSetName 一致,"members" 中的 "host" 为三个节点的 ip 和 port,第三个节点的 "arbiterOnly":true 代表其为仲裁节点。

3. 初始化集群配置

在mongo shell中执行

> rs.initiate(config)

返回信息:

4. 查看集群状态

在mongo shell中执行

> rs.status()

返回信息:

{
"set" : "rs1",
"date" : ISODate("2017-02-27T10:02:17.320Z"),
"myState" : ,
"term" : NumberLong(),
"heartbeatIntervalMillis" : NumberLong(),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"appliedOpTime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"durableOpTime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
}
},
"members" : [
{
"_id" : ,
"name" : "192.168.6.128:27017",
"health" : ,
"state" : ,
"stateStr" : "PRIMARY",
"uptime" : ,
"optime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"optimeDate" : ISODate("2017-02-27T10:02:15Z"),
"electionTime" : Timestamp(, ),
"electionDate" : ISODate("2017-02-27T09:59:54Z"),
"configVersion" : ,
"self" : true
},
{
"_id" : ,
"name" : "192.168.6.129:27017",
"health" : ,
"state" : ,
"stateStr" : "SECONDARY",
"uptime" : ,
"optime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"optimeDurable" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"optimeDate" : ISODate("2017-02-27T10:02:15Z"),
"optimeDurableDate" : ISODate("2017-02-27T10:02:15Z"),
"lastHeartbeat" : ISODate("2017-02-27T10:02:16.990Z"),
"lastHeartbeatRecv" : ISODate("2017-02-27T10:02:15.681Z"),
"pingMs" : NumberLong(),
"syncingTo" : "192.168.6.128:27017",
"configVersion" :
},
{
"_id" : ,
"name" : "192.168.6.130:27017",
"health" : ,
"state" : ,
"stateStr" : "ARBITER",
"uptime" : ,
"lastHeartbeat" : ISODate("2017-02-27T10:02:16.808Z"),
"lastHeartbeatRecv" : ISODate("2017-02-27T10:02:15.766Z"),
"pingMs" : NumberLong(),
"configVersion" :
}
],
"ok" :
}

关注 stateStr 字段,如集群配置正确,3个节点应有一个 PRIMARY,一个 SECONDARY,一个 ARBITER 。

如果stateStr字段显示为 STARTUP 或 RECOVERING,说明集群状态还在同步中,稍等几秒后再次运行 rs.status() 即可。

5. 配置集群安全认证

1)使用 mongo shell 连接到 PRIMARY 库

2)创建admin权限用户

> use admin
> db.createUser({
... user:"username",
... pwd:"password",
... roles:[
... {role:"clusterAdmin", db:"admin"},
... {role:"dbAdminAnyDatabase", db:"admin"},
... {role:"readWriteAnyDatabase", db:"admin"},
... {role:"userAdminAnyDatabase", db:"admin"}
... ]
... })

返回信息:

上面的命令创建了一个具备集群管理者权限、所有数据库dba权限、所有数据库读写权限、所有数据库用户管理权限的超级用户。

3)停止所有 mongodb 服务

# ps -ef|grep mongod |grep -v grep
# kill - <pid>

注意:必须使用 kill -2 命令杀死 mongod 进程,否则会导致数据文件异常,致使 mongod 无法再次正常启动。

4)生成集群内部认证key

# openssl rand -base64  > keyfile
# chmod keyfile

将 keyfile 拷贝至三台 mongodb 主机中。

5)修改mongodb配置文件

security:
keyFile: /root/mongodb/keyfile # 此处配置key文件的绝对路径

6)依次启动3个 mongod 实例

注意:启动前注意检查 ulimit 配置

7)身份认证

使用 mongo shell 登入任意 mongod 实例

> use admin
> db.auth(“username”,”password”)

认证通过后,再次查看集群状态:

> rs.status()

应返回正确的集群状态。

如果需要创建其他用户,先使用超级用户登录,再执行 db.createUser 命令即可。

第三步:测试

1. 测试同步功能

1)由于从节点默认是不可读的,为验证数据同步,首先要将从节点设为可读:

> rs.slaveOk()

2)登录主节点,执行以下命令:

> db.test1.insert({"test" : "ok"})

返回信息:

3)登录从节点,查找数据

> db.test1.findOne();

返回信息:

说明数据同步成功。

2. 测试故障自动回复功能

1)停止当前的主节点进程,然后连接从节点,执行命令:

> rs.status();

从输出中可以看到,原来的主节点已经不可用:

同时,原来的从节点已经升级为主节点:

说明故障自动恢复成功。

2)此时在当前主节点上插入一条新数据

> db.test1.insert({"test1":"ok"});

返回信息:

3)将先前停止的节点启动,并用mongo shell连接

此时新启动的实例应为从节点,从其中查找数据:

> db.test1.find()

验证故障节点恢复后,会自动从当前主节点同步增量数据

至此,mongodb 高可用集群的配置已经完成。

MongoDB【第二篇】集群搭建的更多相关文章

  1. mongodb 3.4 集群搭建升级版 五台集群

    最新版mongodb推荐使用yaml语法来做配置,另外一些旧的配置在最新版本中已经不在生效,所以我们在生产实际搭建mongodb集群的时候做了一些改进.如果大家不熟悉什么是分片.副本集.仲裁者的话请先 ...

  2. (转)MongoDB分片实战 集群搭建

    环境准备 Linux环境 主机 OS 备注 192.168.32.13 CentOS6.3 64位 普通PC 192.168.71.43 CentOS6.2 64位 服务器,NUMA CPU架构 Mo ...

  3. MongoDB高可用集群搭建(主从、分片、路由、安全验证)

    目录 一.环境准备 1.部署图 2.模块介绍 3.服务器准备 二.环境变量 1.准备三台集群 2.安装解压 3.配置环境变量 三.集群搭建 1.新建配置目录 2.修改配置文件 3.分发其他节点 4.批 ...

  4. mongodb 3.4 集群搭建:分片+副本集

    mongodb是最常用的nodql数据库,在数据库排名中已经上升到了前六.这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群. 在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置 ...

  5. mongodb 3.6 集群搭建:分片+副本集

    mongodb是最常用的nosql数据库,在数据库排名中已经上升到了前六.这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群. 在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置 ...

  6. mongodb之 3.4.0 mongodb sharing 副本集群搭建

    系统系统 centos6.5三台服务器:10.100.25.42/43/44安装包: mongodb-linux-x86_64-rhel62-3.4.0.tgz 服务器规划:mongos mongos ...

  7. mongodb高可用集群搭建

    集群构架图如下: 集群大致文件结构:(192.168.137.101节点) 先搭建3个副本集 rs1/mongod.conf rs1/start.sh rs2/mongod.conf 后面类似.... ...

  8. MongoDB 高可用集群搭建(3.4)

      一.架构概况192.168.56.101192.168.56.102192.168.56.103OS为centos 7.2 架构图: 规划5个组件对应的端口号,由于每台机器均需要同时部署 mong ...

  9. MongoDB的分片集群搭建

    MongoDB的最为自豪的一个特色之一,分片. 参考官方文档: https://docs.mongodb.com/manual/sharding/  单机压力,高频查询CPU,IO 单表压力,百万千万 ...

  10. kubernetes第二章--集群搭建

随机推荐

  1. Microsoft Visual 的变态

    Microsoft Visual 里面使用指针 的时候, 声明要放在函数开始的位置,否则报错,真变态啊 刚刚发现,C的变量必须在语块开始声明,后面声明会报错,太不灵活了

  2. Android项目文件结构

    一.Project项目结构 app/build/ app模块build编译输出的目录 app/build.gradle app模块的gradle编译文件 app/app.iml app模块的配置文件 ...

  3. Html5 touch event

    HTML5 for the Mobile Web: Touch Events POSTED BY RUADHAN - 15 AUG 2013 See also... Touch-friendly Dr ...

  4. 7.广播和多播,IGMP协议

    1.单播,多播,广播的介绍 1.1.单播(unicast) 单播是说,对特定的主机进行数据传送.例如给某一个主机发送IP数据包.这时候,数据链路层给出的数据头里面是非常具体的目的地址,对于以太网来 说 ...

  5. iOS 之 线程和进程

    进程是系统调度单位,拥有自己的资源 线程是CPU调度的基本单位 进程的同步机制: 原子操作.信号量机制.自旋锁.分布式系统

  6. vmwvare 网卡设置讲解

  7. redis 实例

    打redis模块打开官网 http://www.redis.io/  进入clients 找到PHP的选项 然后进入phpredis 这就是redis for php的扩展模块 phpize ./co ...

  8. HTML 表单元素、 输入类型、Input 属性

    <input> 元素 最重要的表单元素是 <input> 元素. <input> 元素根据不同的 type 属性,可以变化为多种形态. 注释:下一章讲解所有 HTM ...

  9. css3模拟jq点击事件

    还是这个梗,收好冷.今天是一个css3模拟jq点击事件,因为我发现,css3中没有类似于,js的点击事件,那么,可不可以仿照 jq的效果,类似的做一个呢?主要用到,input里面的radio 单选按钮 ...

  10. jmeter测试计划

    测试计划配置 用户定义的变量: 测试计划上可以添加用户定义的变量.一般添加一些系统常用的配置.如果测试过程中想切换环境,切换配置,一般不建议在测试计划上添加变量,因为不方便启用和禁用,一般是直接添加用 ...