搭建mongo的replica set

前言

准备三台机器,相互可以访问的。处理思路,先构建无需认证的集群,然后进入主节点,初始化集群的账号密码。然后开启所有机器的认证。

安装

mongo1

安装mongo

// 下载
# wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.1.tgz
# tar zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgz
# mv mongodb-linux-x86_64-rhel70-4.2.1 /usr/local/mongodb // 创建db的data目录
# cd /usr/local/mongodb/
# mkdir data
// 存放数据
# mkdir data/db
// 存放log
# mkdir data/logs
# touch data/mongodb.log
# cd data
# mv mongdb.log logs

写入配置文件,vi mongodb.cof

// 端口
port = 27018
bind_ip = 0.0.0.0
#集群名字
replSet = mongos
#数据目录(自己刚才设置的位置)
dbpath = /usr/local/mongodb/data/db
#日志目录(自己刚才设置的位置))
logpath = /usr/local/mongodb/data/logs/mongodb.log
#设置后台运行
fork = true
#日志输出方式
logappend = true
#开启认证
#auth = true
#安全文件地址
#keyFile = /usr/local/mongodb/data/mongodb.key

关于ip

  • bind_ip = 192.168.0.136    #如果修改成本机Ip,那除了本机外的机器都可以连接(就是自己连不了、哈哈、蛋疼)
  • bind_ip = 0.0.0.0           #改成0,那么大家都可以访问(共赢)
  • bind_ip = 127.0.0.1         #改成127,那就只能自己练了(独吞)

所以为了方便其他服务器和自己连接,就把bind_ip改成0.0.0.0

启动

# ./bin/mongod -f  ./data/mongodb.conf

三台机器都安装下

构建副本集

进去其中一台机器

./bin/mongo 192.168.56.101:27018

查看副本集的状态

rs.status()
{
"operationTime" : Timestamp(0, 0),
"ok" : 0,
"errmsg" : "no replset config has been received",
"code" : 94,
"codeName" : "NotYetInitialized",
"$clusterTime" : {
"clusterTime" : Timestamp(0, 0),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}

发现没有初始化,然后我们来初始化

 rs.initiate({
_id: "mongos",
members: [
{ _id : 0, host : "192.168.56.101:27018" },
{ _id : 1, host : "192.168.56.102:27018" },
{ _id : 2, host : "192.168.56.103:27018" }
]
});

再次查看状态

rs.status()
{
"set" : "mongos",
"date" : ISODate("2020-07-19T14:49:52.387Z"),
"myState" : 1,
"term" : NumberLong(1),
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"heartbeatIntervalMillis" : NumberLong(2000),
"majorityVoteCount" : 2,
"writeMajorityCount" : 2,
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1595170188, 2),
"t" : NumberLong(1)
},
"lastCommittedWallTime" : ISODate("2020-07-19T14:49:48.999Z"),
"readConcernMajorityOpTime" : {
"ts" : Timestamp(1595170188, 2),
"t" : NumberLong(1)
},
"readConcernMajorityWallTime" : ISODate("2020-07-19T14:49:48.999Z"),
"appliedOpTime" : {
"ts" : Timestamp(1595170188, 2),
"t" : NumberLong(1)
},
"durableOpTime" : {
"ts" : Timestamp(1595170188, 2),
"t" : NumberLong(1)
},
"lastAppliedWallTime" : ISODate("2020-07-19T14:49:48.999Z"),
"lastDurableWallTime" : ISODate("2020-07-19T14:49:48.999Z")
},
"lastStableRecoveryTimestamp" : Timestamp(1595170187, 3),
"lastStableCheckpointTimestamp" : Timestamp(1595170187, 3),
"electionCandidateMetrics" : {
"lastElectionReason" : "electionTimeout",
"lastElectionDate" : ISODate("2020-07-19T14:49:47.525Z"),
"termAtElection" : NumberLong(1),
"lastCommittedOpTimeAtElection" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
},
"lastSeenOpTimeAtElection" : {
"ts" : Timestamp(1595170176, 1),
"t" : NumberLong(-1)
},
"numVotesNeeded" : 2,
"priorityAtElection" : 1,
"electionTimeoutMillis" : NumberLong(10000),
"numCatchUpOps" : NumberLong(269553681),
"newTermStartDate" : ISODate("2020-07-19T14:49:47.939Z"),
"wMajorityWriteAvailabilityDate" : ISODate("2020-07-19T14:49:48.897Z")
},
"members" : [
{
"_id" : 0,
"name" : "192.168.56.101:27018",
"ip" : "192.168.56.101",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1492,
"optime" : {
"ts" : Timestamp(1595170188, 2),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2020-07-19T14:49:48Z"),
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "could not find member to sync from",
"electionTime" : Timestamp(1595170187, 1),
"electionDate" : ISODate("2020-07-19T14:49:47Z"),
"configVersion" : 1,
"self" : true,
"lastHeartbeatMessage" : ""
},
{
"_id" : 1,
"name" : "192.168.56.102:27018",
"ip" : "192.168.56.102",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 15,
"optime" : {
"ts" : Timestamp(1595170188, 2),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1595170188, 2),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2020-07-19T14:49:48Z"),
"optimeDurableDate" : ISODate("2020-07-19T14:49:48Z"),
"lastHeartbeat" : ISODate("2020-07-19T14:49:51.552Z"),
"lastHeartbeatRecv" : ISODate("2020-07-19T14:49:50.817Z"),
"pingMs" : NumberLong(1),
"lastHeartbeatMessage" : "",
"syncingTo" : "192.168.56.101:27018",
"syncSourceHost" : "192.168.56.101:27018",
"syncSourceId" : 0,
"infoMessage" : "",
"configVersion" : 1
},
{
"_id" : 2,
"name" : "192.168.56.103:27018",
"ip" : "192.168.56.103",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 15,
"optime" : {
"ts" : Timestamp(1595170188, 2),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1595170188, 2),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2020-07-19T14:49:48Z"),
"optimeDurableDate" : ISODate("2020-07-19T14:49:48Z"),
"lastHeartbeat" : ISODate("2020-07-19T14:49:51.555Z"),
"lastHeartbeatRecv" : ISODate("2020-07-19T14:49:50.830Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncingTo" : "192.168.56.101:27018",
"syncSourceHost" : "192.168.56.101:27018",
"syncSourceId" : 0,
"infoMessage" : "",
"configVersion" : 1
}
],
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1595170188, 2),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1595170188, 2)
}

发现已经初始化好了

加入认证

进去到PRIMARY节点初始化集群的登录账号和密码信息

# ./bin/mongo 192.168.56.101:27018
# use admin
# db.createUser({user: 'handle', pwd: '123456', roles: ['root']})

生成keyfile

  • MongoDB使用keyfile认证,副本集中的每个mongod实例使用keyfile内容作为认证其他成员的共享密码。mongod实例只有拥有正确的keyfile才可以加入副本集。
  • keyFile的内容必须是6到1024个字符的长度,且副本集所有成员的keyFile内容必须相同。
  • 有一点要注意是的:在UNIX系统中,keyFile必须没有组权限或完全权限(也就是权限要设置成X00的形式)。Windows系统中,keyFile权限没有被检查。
  • 可以使用任意方法生成keyFile。例如,如下操作使用openssl生成复杂的随机的1024个字符串。然后使用chmod修改文件权限,只给文件拥有者提供读权限。
# 400权限是要保证安全性,否则mongod启动会报错
openssl rand -base64 756 > mongodb.key
chmod 400 mongodb.key

然后放到mongodb中的data目录,三台机器keyfile要一致。我是在一台中生成,然后传到其他的服务器中。

打开认证,三台机器都要执行

#开启认证
auth = true
#安全文件地址
keyFile = /usr/local/mongodb/data/mongodb.key

之后重启mongo

# ./bin/mongo 192.168.56.102:27018
rs.status()
{
"operationTime" : Timestamp(1595212820, 1),
"ok" : 0,
"errmsg" : "command replSetGetStatus requires authentication",
"code" : 13,
"codeName" : "Unauthorized",
"$clusterTime" : {
"clusterTime" : Timestamp(1595212820, 1),
"signature" : {
"hash" : BinData(0,"7N/yM+2RounFZVTIzjbW+rEcZNs="),
"keyId" : NumberLong("6851374857561571330")
}
}
}

不带账号密码登录,提示Unauthorized

# ./bin/mongo 192.168.56.102:27018 -u "handle" -p "123456" --authenticationDatabase "admin"
rs.status()
{
"set" : "mongos",
"date" : ISODate("2020-07-20T02:44:20.836Z"),
"myState" : 1,
"term" : NumberLong(3),
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"heartbeatIntervalMillis" : NumberLong(2000),
"majorityVoteCount" : 2,
"writeMajorityCount" : 2,
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1595213060, 1),
"t" : NumberLong(3)
},
"lastCommittedWallTime" : ISODate("2020-07-20T02:44:20.154Z"),
"readConcernMajorityOpTime" : {
"ts" : Timestamp(1595213060, 1),
"t" : NumberLong(3)
},
"readConcernMajorityWallTime" : ISODate("2020-07-20T02:44:20.154Z"),
"appliedOpTime" : {
"ts" : Timestamp(1595213060, 1),
"t" : NumberLong(3)
},
"durableOpTime" : {
"ts" : Timestamp(1595213060, 1),
"t" : NumberLong(3)
},
"lastAppliedWallTime" : ISODate("2020-07-20T02:44:20.154Z"),
"lastDurableWallTime" : ISODate("2020-07-20T02:44:20.154Z")
},
"lastStableRecoveryTimestamp" : Timestamp(1595213010, 1),
"lastStableCheckpointTimestamp" : Timestamp(1595213010, 1),
"electionCandidateMetrics" : {
"lastElectionReason" : "electionTimeout",
"lastElectionDate" : ISODate("2020-07-20T01:56:39.170Z"),
"termAtElection" : NumberLong(3),
"lastCommittedOpTimeAtElection" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
},
"lastSeenOpTimeAtElection" : {
"ts" : Timestamp(1595210160, 1),
"t" : NumberLong(2)
},
"numVotesNeeded" : 2,
"priorityAtElection" : 1,
"electionTimeoutMillis" : NumberLong(10000),
"numCatchUpOps" : NumberLong(808464432),
"newTermStartDate" : ISODate("2020-07-20T01:56:39.976Z"),
"wMajorityWriteAvailabilityDate" : ISODate("2020-07-20T01:56:40.667Z")
},
"members" : [
{
"_id" : 0,
"name" : "192.168.56.101:27018",
"ip" : "192.168.56.101",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 2871,
"optime" : {
"ts" : Timestamp(1595213050, 1),
"t" : NumberLong(3)
},
"optimeDurable" : {
"ts" : Timestamp(1595213050, 1),
"t" : NumberLong(3)
},
"optimeDate" : ISODate("2020-07-20T02:44:10Z"),
"optimeDurableDate" : ISODate("2020-07-20T02:44:10Z"),
"lastHeartbeat" : ISODate("2020-07-20T02:44:19.053Z"),
"lastHeartbeatRecv" : ISODate("2020-07-20T02:44:20.779Z"),
"pingMs" : NumberLong(1),
"lastHeartbeatMessage" : "",
"syncingTo" : "192.168.56.102:27018",
"syncSourceHost" : "192.168.56.102:27018",
"syncSourceId" : 1,
"infoMessage" : "",
"configVersion" : 1
},
{
"_id" : 1,
"name" : "192.168.56.102:27018",
"ip" : "192.168.56.102",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 2873,
"optime" : {
"ts" : Timestamp(1595213060, 1),
"t" : NumberLong(3)
},
"optimeDate" : ISODate("2020-07-20T02:44:20Z"),
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"electionTime" : Timestamp(1595210199, 1),
"electionDate" : ISODate("2020-07-20T01:56:39Z"),
"configVersion" : 1,
"self" : true,
"lastHeartbeatMessage" : ""
},
{
"_id" : 2,
"name" : "192.168.56.103:27018",
"ip" : "192.168.56.103",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 2831,
"optime" : {
"ts" : Timestamp(1595213050, 1),
"t" : NumberLong(3)
},
"optimeDurable" : {
"ts" : Timestamp(1595213050, 1),
"t" : NumberLong(3)
},
"optimeDate" : ISODate("2020-07-20T02:44:10Z"),
"optimeDurableDate" : ISODate("2020-07-20T02:44:10Z"),
"lastHeartbeat" : ISODate("2020-07-20T02:44:19.069Z"),
"lastHeartbeatRecv" : ISODate("2020-07-20T02:44:19.689Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncingTo" : "192.168.56.101:27018",
"syncSourceHost" : "192.168.56.101:27018",
"syncSourceId" : 0,
"infoMessage" : "",
"configVersion" : 1
}
],
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1595213060, 1),
"signature" : {
"hash" : BinData(0,"vWZEW8RyQOU7IwSaLMmrEancUio="),
"keyId" : NumberLong("6851374857561571330")
}
},
"operationTime" : Timestamp(1595213060, 1)
}

账号密码设置成功了

备份数据

备份(mongodump)与恢复(mongorestore)

备份数据到本地

mongodump -h 192.168.56.101:27018 -u handle -p 123456 -o /home/liz/Desktop/mongo-bei

数据恢复

新的集群安装完成之后,恢复数据到Primary节点,集群会自动同步到副本集中

mongorestore -h 192.168.56.101:27018 -u handle -p 123456  /home/liz/Desktop/mongo-bei

注意:更换自己服务器上面的ip和mongo对应的账号密码

搭建mongo的replica set的更多相关文章

  1. 【MongoDB】windows平台搭建Mongo数据库复制集(类似集群)(转)

    原文链接:[MongoDB]windows平台搭建Mongo数据库复制集(类似集群)(一) Replica  Sets(复制集)是在mongodDB1.6版本开始新增的功能,它可以实现故障自动切换和自 ...

  2. MongoDB:搭建三节点 Replica Set 环境

    今天学习了搭建 MongDB 复制环境,实验环境是在虚拟机上同一系统,并搭建三节点 Replica Set,根据文档上的描述,mongodb 复制配置简单,并且能够自动 failover,这些高级特性 ...

  3. 【MongoDB】windows平台搭建Mongo数据库复制集(相似集群)(三)

    关于windows平台搭建Mongo数据库复制集这个话题,我已经在前面写了两篇博客 第一篇: 怎样在windows平台搭建Mongo数据库复制集 第二篇: 数据同步和故障自适应測试 在本篇里面,咱们重 ...

  4. Mongodb集群搭建之 Sharding+ Replica Sets集群架构(2)

    参考http://blog.51cto.com/kaliarch/2047358 一.概述 1.1 背景 为解决mongodb在replica set每个从节点上面的数据库均是对数据库的全量拷贝,从节 ...

  5. Mongodb集群搭建之 Sharding+ Replica Sets集群架构

    1.本例使用1台Linux主机,通过Docker 启动三个容器 IP地址如下: docker run -d -v `pwd`/data/master:/mongodb -p 27017:27017 d ...

  6. Mongo的Replica Sets (复制集)的配置全过程和心得体会

    http://blog.csdn.net/bloggongchang/article/details/7272403 一.MongoDB Replica Sets(副本集)简单的说就是有自动故障恢复功 ...

  7. 从零搭建mongo分片集群的简洁方法

    一.目录 1.mongo路径,config数据路径,shard数据路径

  8. 【MongoDB】windows平台搭建Mongo数据库复制集(相似集群)(一)

    Replica  Sets(复制集)是在mongodDB1.6版本号開始新增的功能.它能够实现故障自己主动切换和自己主动修复功能成员节点的功能,各个DB之间的数据全然一致,大大减少了单点故障的风险. ...

  9. mongo 原理 Replica Set Oplog

    [客户的写请求全部发送至主节点] Primary. The primary receives all write operations. Secondaries. Secondaries replic ...

  10. windows平台搭建Mongo数据库复制集(类似集群)(三)

    在本篇里面,咱们重点总结一下复制集,以及分析一下它的工作原理 一.常见场景 应用程序和数据库之间的网络连接丢失 计划停机.断电.数据库服务硬盘故障等等 复制可以进行故障转移,复制能让你在副本间均衡读负 ...

随机推荐

  1. PPT 画册风格

    图片嵌入 图片填充 图片裁剪 字体 PPT 关掉再打开. 排列对齐 图片下载 https://www.pexels.com http://www.500px.com http://www.bing.c ...

  2. 手把手教你在 Windows 环境中搭建 MQTT 服务器

    前言 前些天要对接一家硬件商的设备数据,对方使用的 MQTT 协议点对点透传,所以又赶紧搭建 MQTT 服务器,写 .NET 程序接收数据等等,今天分享一下如何搭建 MQTT 服务器. MQTT 协议 ...

  3. 单位:MB、GB与MiB、GiB

    MB.GB与MiB.GiB的区别在于标准不同,MB使用的是十进制标准(SI标准),MiB使用的是二进制标准(IEC标准) 在工作中最好是先确定使用什么标准,防止出错 换算表: 1KB = 10^3 = ...

  4. MB51增强

    一.在MB51报表中新增列 包含文件RM07DOCS_GENERATED的itab结构中,新增字段 在RM07DOCS中的detail_list子例程中添加查询逻辑 在子例程build_fieldca ...

  5. MPI Maelstrom POJ - 1502 ⭐⭐ 【Dijkstra裸题】

    MPI Maelstrom POJ - 1502 实验室有很多台计算机,由于每个人计算机的性能不同,导致计算机之间发送信息的速度不同,所以花费时间不同. 消息从第一台电脑发送到第二台电脑后,这两台电脑 ...

  6. Goolge Kick Start Round A 2020 (A ~ D题题解)

    比赛链接:kick start Round A 2020 A. Allocation 题目链接 题意 给出 \(N\) 栋房子的价格,第 \(i\) 栋房子的价格为 \(A_i\),你有 \(B\) ...

  7. 一、@Configuration、@Conponent 、@ComponentScan 注解等

    一句话概括 区别: @Configuration 中所有带 @Bean 注解的方法都会被动态代理,因此调用该方法返回的都是同一个实例.2. 可以直接调用方法,不需要 @Autowired 注入后使用. ...

  8. vue用qrcodejs2生成二维码,解决多个二维码追加的问题

    vue使用qrcodejs2生成二维码 1.安装qrcodejs2 npm install qrcodejs2 2.代码 //导入组件 import QRCode from 'qrcodejs2' / ...

  9. SpringBoot AOP 记录操作日志、异常日志

    使用SpringBoot AOP 记录操作日志.异常日志 我们在做项目时经常需要对一些重要功能操作记录日志,方便以后跟踪是谁在操作此功能.在操作某些功能时也有可能会发生异常,但是每次发生异常要定位原因 ...

  10. 基于AHB_BUS的eFlash控制器的微架构设计

    eFlash微架构设计 1.回顾架构设计 2.Flash时序仿真 2.1 ahb_flashc项目目录 docs rtl sim tb model 2.2 docs 架构设计文档 微架构设计文档 集成 ...