搭建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. Axure 选中同意复选框后,改变登录按钮的颜色

    登录时,当选中 同意用户协议后 复选框,登录按钮变颜色 登录按钮 设置登录按钮的选中颜色 同意协议 当同意复选框被选中后,设置 登录 的选中状态为 真,这时候触发登录按钮改变颜色, 取消勾选后,登录按 ...

  2. Kubernetes(K8S) 安装 Metrics-Server kubectl top (metrics-server) node NotFound

    kubectl top (metrics-server) node NotFound components.yaml 网上的各种方法都有问题,找到了一个完整版的 yaml apiVersion: v1 ...

  3. 🤗 Datasets 使用小贴士: 探索解决数据集无法下载的问题

    Hugging Face Hub 是强大的机器学习的数据源.相信大家在国内用 Hugging Face Datasets 都遇到过下载的问题.譬如: import datasets dataset = ...

  4. 在Windows上D盘上安装Docker

    Reference https://www.willh.cn/articles/2022/07/13/1657676401964.html Docker默认安装在C盘: "C:\Progra ...

  5. Java ConcurrentHashMap 高并发安全实现原理解析

    本文首发于 vivo互联网技术 微信公众号链接:https://mp.weixin.qq.com/s/4sz6sTPvBigR_1g8piFxug作者:vivo 游戏技术团队 一.概述 Concurr ...

  6. freeswitch自带yum源配置方式

    概述 在开发过程中,我们使用freeswitch源代码编译安装的方式比较多,这种方式适合对fs比较了解,有一定基础的研发人员. 但是,对于希望快速上手使用fs普通功能的人员来说,源代码编译的方式就过于 ...

  7. java基础数据类型-int类型-浮点型-数据类型的转换--day02

    目录 1. 变量的命名 2. 常量 3. 变量 4. 进制 4.1 进制转换 4.2 整型数据类型 5 浮点型 6. 字符串 7. 整形与字符型之间的转换 8 最常见的一个乱码问题 9. 布尔类型 1 ...

  8. configmap 和 secret 概述

    本篇文章是对 configmap 和 secret 的一个总结,详细信息可看 这里 1. configmap 和 secret 概述 在 container 的 image 中可通过 ENTRYPOI ...

  9. Hive(3)-Hive数据类型

    1. 基本数据类型 对于Hive的String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以存储2GB的字符数 Hive数据类型 ...

  10. 【SHELL】查找文件并删除

    find . -iname file-name |xargs -I % rm -rf %