搭建mongo的replica set
搭建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的更多相关文章
- 【MongoDB】windows平台搭建Mongo数据库复制集(类似集群)(转)
原文链接:[MongoDB]windows平台搭建Mongo数据库复制集(类似集群)(一) Replica Sets(复制集)是在mongodDB1.6版本开始新增的功能,它可以实现故障自动切换和自 ...
- MongoDB:搭建三节点 Replica Set 环境
今天学习了搭建 MongDB 复制环境,实验环境是在虚拟机上同一系统,并搭建三节点 Replica Set,根据文档上的描述,mongodb 复制配置简单,并且能够自动 failover,这些高级特性 ...
- 【MongoDB】windows平台搭建Mongo数据库复制集(相似集群)(三)
关于windows平台搭建Mongo数据库复制集这个话题,我已经在前面写了两篇博客 第一篇: 怎样在windows平台搭建Mongo数据库复制集 第二篇: 数据同步和故障自适应測试 在本篇里面,咱们重 ...
- Mongodb集群搭建之 Sharding+ Replica Sets集群架构(2)
参考http://blog.51cto.com/kaliarch/2047358 一.概述 1.1 背景 为解决mongodb在replica set每个从节点上面的数据库均是对数据库的全量拷贝,从节 ...
- Mongodb集群搭建之 Sharding+ Replica Sets集群架构
1.本例使用1台Linux主机,通过Docker 启动三个容器 IP地址如下: docker run -d -v `pwd`/data/master:/mongodb -p 27017:27017 d ...
- Mongo的Replica Sets (复制集)的配置全过程和心得体会
http://blog.csdn.net/bloggongchang/article/details/7272403 一.MongoDB Replica Sets(副本集)简单的说就是有自动故障恢复功 ...
- 从零搭建mongo分片集群的简洁方法
一.目录 1.mongo路径,config数据路径,shard数据路径
- 【MongoDB】windows平台搭建Mongo数据库复制集(相似集群)(一)
Replica Sets(复制集)是在mongodDB1.6版本号開始新增的功能.它能够实现故障自己主动切换和自己主动修复功能成员节点的功能,各个DB之间的数据全然一致,大大减少了单点故障的风险. ...
- mongo 原理 Replica Set Oplog
[客户的写请求全部发送至主节点] Primary. The primary receives all write operations. Secondaries. Secondaries replic ...
- windows平台搭建Mongo数据库复制集(类似集群)(三)
在本篇里面,咱们重点总结一下复制集,以及分析一下它的工作原理 一.常见场景 应用程序和数据库之间的网络连接丢失 计划停机.断电.数据库服务硬盘故障等等 复制可以进行故障转移,复制能让你在副本间均衡读负 ...
随机推荐
- Axure 母版与元件
需要重复使用的元件,建议创建成母版: 如果修改了母版,所有页面中的母版元件将会被同步修改 元件:添加后,所有的 Axure 都可以使用 母版:只适用当前的 Axure 原型 拖放行为: 任意位置:可以 ...
- 设置MySQL 创建数据库,默认为UTF-8
Windows 安装 MySQL 5.7 x64 位 MySQL 8.0及以上默认为utf8,所以不需要设置 mysql> show variables like 'character_%' m ...
- Intellij Java JNI 调用 C++
也可以用 JNA,但性能没有 JNI 好.JNA的Demo没有做,可以参考(https://www.bilibili.com/video/BV1xU4y1F7Ep/?spm_id_from=autoN ...
- M-SOLUTIONS Programming Contest 2020 游记 (AB水题,CD模拟,E题DFS)
A - Kyu in AtCoder 水题 B - Magic 2 题意很好理解,但写的时候注意一下边界 void solve() { int a, b, c, k; cin >> a & ...
- 2012年第三届蓝桥杯【C++省赛B组】
第一题:微生物增殖 假设有两种微生物 X 和 Y X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍). 一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1 ...
- 2021 VDC :vivo 互联网服务亿级用户的技术架构演进之路
关注公众号[vivo互联网技术]--回复[2021VDC]获取大会PPT. 2021年12月16日,vivo 开发者大会圆满落幕.在互联网技术专场中,来自vivo 互联网技术的6位研发专家,从基础架构 ...
- 推荐收藏!年度Top20开源许可证风险等级
开源许可现状 开发人员经常在软件中引入开源的代码片段.函数.方法和操作代码.因此,软件代码中经常会包含各种声明不同许可证的子组件.这些子组件的许可证条款和条件与项目整体主许可证的条款和条件冲突时,就会 ...
- myeclipse过期问题
安装myeclipse后就会遇到过期问题.如下代码永久解决过期问题. import java.io.BufferedReader; import java.io.IOException; import ...
- 三、java连接mongo数据库
系列导航 一.linux单机版mongo安装(带密码验证) 二.mongo集群搭建 三.java连接mongo数据库 四.java对mongo数据库增删改查操作 五.mongo备份篇 mongoexp ...
- element-china-area-data
https://blog.csdn.net/xiejnpeng/article/details/111400199