MongoDB【第二篇】集群搭建
第一步:准备
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【第二篇】集群搭建的更多相关文章
- mongodb 3.4 集群搭建升级版 五台集群
最新版mongodb推荐使用yaml语法来做配置,另外一些旧的配置在最新版本中已经不在生效,所以我们在生产实际搭建mongodb集群的时候做了一些改进.如果大家不熟悉什么是分片.副本集.仲裁者的话请先 ...
- (转)MongoDB分片实战 集群搭建
环境准备 Linux环境 主机 OS 备注 192.168.32.13 CentOS6.3 64位 普通PC 192.168.71.43 CentOS6.2 64位 服务器,NUMA CPU架构 Mo ...
- MongoDB高可用集群搭建(主从、分片、路由、安全验证)
目录 一.环境准备 1.部署图 2.模块介绍 3.服务器准备 二.环境变量 1.准备三台集群 2.安装解压 3.配置环境变量 三.集群搭建 1.新建配置目录 2.修改配置文件 3.分发其他节点 4.批 ...
- mongodb 3.4 集群搭建:分片+副本集
mongodb是最常用的nodql数据库,在数据库排名中已经上升到了前六.这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群. 在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置 ...
- mongodb 3.6 集群搭建:分片+副本集
mongodb是最常用的nosql数据库,在数据库排名中已经上升到了前六.这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群. 在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置 ...
- 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 ...
- mongodb高可用集群搭建
集群构架图如下: 集群大致文件结构:(192.168.137.101节点) 先搭建3个副本集 rs1/mongod.conf rs1/start.sh rs2/mongod.conf 后面类似.... ...
- MongoDB 高可用集群搭建(3.4)
一.架构概况192.168.56.101192.168.56.102192.168.56.103OS为centos 7.2 架构图: 规划5个组件对应的端口号,由于每台机器均需要同时部署 mong ...
- MongoDB的分片集群搭建
MongoDB的最为自豪的一个特色之一,分片. 参考官方文档: https://docs.mongodb.com/manual/sharding/ 单机压力,高频查询CPU,IO 单表压力,百万千万 ...
- kubernetes第二章--集群搭建
随机推荐
- java设计模式笔记(1)-适配器模式
适配器的定义 适配器就是一个接口转换器,它可以是一个独立的硬件接口设备,允许硬件或电子接口与其它硬件或电子接口相连,也可以是信息接口.比如:电源适配器.三角架基座转接部件.USB与串口的转接设备等. ...
- bzoj3052
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题目大意:自己看看,懒得写 题解:带修改的树上莫队,经典爆评测机的题 代码: #inc ...
- javascript 备忘录
JS语法 javascript 对象: var cars=new Array("Audi","BMW","Volvo"); 声明变量类型 当 ...
- python 自动化之路 day 14
今日内容 http://www.cnblogs.com/wupeiqi/articles/5699254.html 群共享 s15Html课件 1. paramiko模块 https://github ...
- Vim 第一天
记得第一次接触vi编辑器,好像是在海尔的机房吧,那是时候还是没有毕业的小菜鸟一只(PS:现在也是菜鸟),记得是测试一个云存储的产品.看着他们用vi编辑器,当时也没有感觉有什么(现在也没感觉……),只是 ...
- Spring AOP代理时 ClassCastException: $Proxy0 cannot be cast to (类型转换错误)
Spring AOP代理时 ClassCastException: $Proxy0 cannot be cast to (类型转换错误) 问题: 今天在用AfterReturningAdvice时,a ...
- 1.4.2.5. 测试(Core Data 应用程序实践指南)
测试的方法也很简单: 首先,在AppDelegate.h里面引用CoreDataHelper @property (strong, nonatomic, readonly)CoreDateHelper ...
- linux:基本命令
1.显示日期与时间:date 显示2009/08/17形式的格式:date +%Y/%m/%d 显示17:04时间格式:date +%H/%M 2.显示日历:cal 常用的命令:cal 2009:ca ...
- WInform 创建一个简单的WPF应用
(一)创建一个简单的WPF应用 首先,在这里我要说明的是:这里的例子,都是通过控制台程序来创建WPF应用,而非使用现成的WPF模版.因为WPF模版封装了创建WPF应用所需要的各种基本元素,并不利于我们 ...
- DEVTMPFS
devtmpfs选项保证了系统启动使用临时文件系统.不选会启动出现readonly ,无法启动