mongodb 4.0副本集搭建
近期有同学问mongodb副本集难不难部署,我的回答是不难,很快,几分钟搞定,比mysql MHA简单的不止一点半点。 那么到底如何部署呢?请看下文。
1. 准备工作
1.1 下载软件
选择版本并下载mongodb的软件,注意操作系统版本等。本次我选用的是percona分支的mongodb 4.2.8版本搭建,操作系统为centos6
cd /usr/local/
wget https://www.percona.com/downloads/percona-server-mongodb-LATEST/percona-server-mongodb-4.2.8-8/binary/tarball/percona-server-mongodb-4.2.8-8-centos6-x86_64.tar.gz
tar -zxvf percona-server-mongodb-4.2.8-8-centos6-x86_64.tar.gz
ln -s percona-server-mongodb-4.2.8-8 mongodb
1.2 规划各节点角色
各节点角色如下
| IP | port | role |
| 192.168.128.208 | 27017 | PRIMARY |
| 192.168.128.209 | 27017 | SECONDARY |
| 192.168.128.209 | 28017 | ARBITER |
2 部署
2.1 创建各节点相关目录
创建数据目录、日志目录等相关目录
[root@m1 ~]# mkdir -p /data/mongodb//{data,logs,tmp,etc,keyfile}
[root@m1 ~]# cd /data/mongodb//
[root@m1 ]# ll
总用量
drwxr-xr-x root root 8月 : data
drwxr-xr-x root root 8月 : etc
drwxr-xr-x root root 8月 : keyfile
drwxr-xr-x root root 8月 : logs
drwxr-xr-x root root 8月 : tmp
2.2 配置文件
创建配置文件,并添加对应的配置信息,注意仲裁节点的端口
[root@m1 ]# cd /data/mongodb//etc/
[root@m1 etc]# vim mongod.conf
添加如下内容 storage:
dbPath: /data/mongodb//data
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /data/mongodb//logs/mongod.log
processManagement:
fork: true
pidFilePath: /data/mongodb//tmp/mongod.pid
net:
port:
bindIp: 0.0.0.0
replication:
replSetName: "test1" # 副本集名称
2.3 启动各节点
以其中一个节点为例,其他节点修改对应配置文件即可
[root@m1 local]# /usr/local/mongodb/bin/mongod -f /data/mongodb//etc/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process:
child process started successfully, parent exiting
2.4 初始化副本集
初始化副本集,指定各节点id及角色,注意副本集的名称和配置文件里一致。
在任意节点执行如下语句
> use admin
switched to db admin
> rs.initiate( {
... _id: "test1",
... members: [
... { _id: , host: "192.168.128.208:27017" },
... { _id: , host: "192.168.128.209:27017" },
... { _id: , host: "192.168.128.209:28017",arbiterOnly:true }
... ] })
{
"ok" : ,
"$clusterTime" : {
"clusterTime" : Timestamp(, ),
"signature" : {
"hash" : BinData(,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong()
}
},
"operationTime" : Timestamp(, )
}
完成后可以查看各集群状态,如下,可见当前192.168.128.208:27017 为PRIMARY节点
test1:PRIMARY> rs.status()
{
"set" : "test1",
"date" : ISODate("2020-08-07T11:09:24.454Z"),
"myState" : ,
"term" : NumberLong(),
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -,
"heartbeatIntervalMillis" : NumberLong(),
"majorityVoteCount" : ,
"writeMajorityCount" : ,
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"lastCommittedWallTime" : ISODate("2020-08-07T11:09:23.663Z"),
"readConcernMajorityOpTime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"readConcernMajorityWallTime" : ISODate("2020-08-07T11:09:23.663Z"),
"appliedOpTime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"durableOpTime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"lastAppliedWallTime" : ISODate("2020-08-07T11:09:23.663Z"),
"lastDurableWallTime" : ISODate("2020-08-07T11:09:23.663Z")
},
"lastStableRecoveryTimestamp" : Timestamp(, ),
"lastStableCheckpointTimestamp" : Timestamp(, ),
"electionCandidateMetrics" : {
"lastElectionReason" : "electionTimeout",
"lastElectionDate" : ISODate("2020-08-07T09:31:33.409Z"),
"electionTerm" : NumberLong(),
"lastCommittedOpTimeAtElection" : {
"ts" : Timestamp(, ),
"t" : NumberLong(-)
},
"lastSeenOpTimeAtElection" : {
"ts" : Timestamp(, ),
"t" : NumberLong(-)
},
"numVotesNeeded" : ,
"priorityAtElection" : ,
"electionTimeoutMillis" : NumberLong(),
"numCatchUpOps" : NumberLong(),
"newTermStartDate" : ISODate("2020-08-07T09:31:33.444Z"),
"wMajorityWriteAvailabilityDate" : ISODate("2020-08-07T09:31:34.050Z")
},
"members" : [
{
"_id" : ,
"name" : "192.168.128.208:27017",
"health" : ,
"state" : ,
"stateStr" : "PRIMARY",
"uptime" : ,
"optime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"optimeDate" : ISODate("2020-08-07T11:09:23Z"),
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -,
"infoMessage" : "",
"electionTime" : Timestamp(, ),
"electionDate" : ISODate("2020-08-07T09:31:33Z"),
"configVersion" : ,
"self" : true,
"lastHeartbeatMessage" : ""
},
{
"_id" : ,
"name" : "192.168.128.209:27017",
"health" : ,
"state" : ,
"stateStr" : "SECONDARY",
"uptime" : ,
"optime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"optimeDurable" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"optimeDate" : ISODate("2020-08-07T11:09:23Z"),
"optimeDurableDate" : ISODate("2020-08-07T11:09:23Z"),
"lastHeartbeat" : ISODate("2020-08-07T11:09:23.672Z"),
"lastHeartbeatRecv" : ISODate("2020-08-07T11:09:22.804Z"),
"pingMs" : NumberLong(),
"lastHeartbeatMessage" : "",
"syncingTo" : "192.168.128.208:27017",
"syncSourceHost" : "192.168.128.208:27017",
"syncSourceId" : ,
"infoMessage" : "",
"configVersion" :
},
{
"_id" : ,
"name" : "192.168.128.209:28017",
"health" : ,
"state" : ,
"stateStr" : "ARBITER",
"uptime" : ,
"lastHeartbeat" : ISODate("2020-08-07T11:09:23.672Z"),
"lastHeartbeatRecv" : ISODate("2020-08-07T11:09:22.952Z"),
"pingMs" : NumberLong(),
"lastHeartbeatMessage" : "",
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -,
"infoMessage" : "",
"configVersion" :
}
],
"ok" : ,
"$clusterTime" : {
"clusterTime" : Timestamp(, ),
"signature" : {
"hash" : BinData(,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong()
}
},
"operationTime" : Timestamp(, )
}
test1:PRIMARY>
3 修改为认证模式
为考虑安全性等,需要开启认证模式(需要通过用户名/密码方式登录)
3.1 创建用户
创建超级管理员账号
test1:PRIMARY> db.createUser({user: "root", pwd: "Root#123", roles: [{role: "root", db: "admin"}]})
Successfully added user: {
"user" : "root",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
3.2 创建key文件
在主库上执行脚本生成key文件,然后将结拷贝到另外2个节点
[root@m1 mongodb]# cd /data/mongodb//keyfile/
[root@m1 keyfile]# openssl rand -base64 > mongo.key
[root@m1 keyfile]# chmod mongo.key # 必须修改为600权限,否则无法启动
以上完成后,将文件复制到另外2个节点
3.3 修改配置文件
配置文件中 添加如下内容,注意不同节点的文件路径
security:
authorization: enabled
clusterAuthMode: keyFile
keyFile: /data/mongodb//keyfile/mongo.key
3.4 重启后并用认证模式登陆
# 关闭mongodb
[root@m1 keyfile]# /usr/local/mongodb/bin/mongod -f /data/mongodb//etc/mongod.conf -shutdown
killing process with pid:
# 启动mongodb
[root@m1 keyfile]# /usr/local/mongodb/bin/mongod -f /data/mongodb//etc/mongod.conf about to fork child process, waiting until server is ready for connections.
forked process: child process started successfully, parent exiting # 认证模式登陆
[root@m1 keyfile]#
[root@m1 keyfile]# /usr/local/mongodb/bin/mongo -u root -p 'Root#123' --authenticationDatabase admin
至此,mongodb 副本集搭建完毕,你会了吗?
想了解更多内容或参与技术交流可以关注微信公众号【数据库干货铺】或进技术交流群沟通。

mongodb 4.0副本集搭建的更多相关文章
- mongodb安装及副本集搭建
mongodb下载地址:https://www.mongodb.com/dr/fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.7.tg ...
- mongodb中的副本集搭建实践
准备运行1个主节点,2个从节点,从节点中其中是一个是仲裁节点(Arb). --oplogSize --oplogSize --oplogSize 其中application是副本集的名称,节点必须相同 ...
- mongodb3.0副本集搭建补充~~非admin数据库的用户权限
之前有搭建mongodb3.0的副本集,不过当时直接使用的admin数据库,用户也是直接给的root. 链接:http://blog.csdn.net/tuzongxun/article/detail ...
- MongoDB副本集搭建及备份恢复
一.MongoDB副本集(repl set)介绍 早起版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主: 目前已经淘汰了ma ...
- mongodb副本集搭建过程中的问题和解决技巧
在我以往的认知中,一个系统一旦正式上线,多半不会轻易的迁移服务器,尤其是那种涉及到多个关联应用,涉及到多台硬件服务器的系统,因为这种迁移将是牵一发而动全身的. 但是,却仍然有这种情况存在,就如我这几天 ...
- windows版本 MongoDB副本集搭建及开启身份验证
------------恢复内容开始------------ ------------恢复内容开始------------ MongoDB副本集搭建 我搭建的是一个主节点,两个副节点 构建目录结构如下 ...
- mongo副本集搭建及服务器复用方案
比较常见的mongodb副本集搭建是有:常规节点.数据副本.仲裁节点组成,也就是需要三台服务器组建.常规节点即数据的主存储节点,数据副本是主存储节点的从属节点,它定期去主节点获取更新日志来更新自己.仲 ...
- MongoDB主从复制和副本集
MongoDB有主从复制和副本集两种主从复制模式,主从复制最大的问题就是无法自动故障转移,MongoDB副本集解决了主从模式无法自动故障转义的特点,因此是复制的首选.对于简单的主从复制无法自动故障转移 ...
- 【六】MongoDB管理之副本集
一.复制介绍 所谓的复制就是在多个主机之间同步数据的过程. 1.数据冗余及可用性 复制技术提供数据冗余及可用性,在不同的数据库服务器上使用多个数据副本,复制技术防止单个数据库服务器出现数据故障而出现数 ...
随机推荐
- C#中String与byte[]的相互转换
从文件中读取字符串 string filePath = @"C:\Temp.xml"; string xmlString= File.ReadAllText(filePath); ...
- typedef struct 指针结构体使用方法
A>>>>>>>>>>>>>>>>>>>>>>>> ty ...
- (数据科学学习手札90)Python+Kepler.gl轻松制作时间轮播图
本文示例代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 Kepler.gl作为一款强大的开源地理信 ...
- 【SpringBoot】 中时间类型 序列化、反序列化、格式处理
[SpringBoot] 中时间类型 序列化.反序列化.格式处理 Date yml全局配置 spring: jackson: time-zone: GMT+8 date-format: yyyy-MM ...
- noi linux gedit 配置(c++环境)
基本配置 方法一 查看所有命令: gsettings list-recursively | grep -i gedit 命令解释 gsettings set org.gnome.gedit.prefe ...
- vue : 使用stylus less (包括sublime插件支持)
版本: vue 2.5.2 webpack 3.6.0 先说stylus. 用npm装个包. npm install stylus stylus-loader --save-dev 然后在.vue文件 ...
- var 的一个坑,以及 let
选自 Typescript 中文教程. 快速的猜一下下面的代码会返回什么: for (var i = 0; i < 10; i++) { setTimeout(function() { cons ...
- 使用ImpromptuInterface反射库方便的创建自定义DfaGraphWriter
在本文中,我为创建的自定义的DfaGraphWriter实现奠定了基础.DfaGraphWriter是公开的,因此您可以如上一篇文章中所示在应用程序中使用它,但它使用的所有类均已标记为internal ...
- ant design pro/前端/JS:实现本地运行https
工具:github---mkcert 用于生成本地证书 ant p版本:1.0.0 这里我只说如何给antp部署https,以及会遇到的问题解决,其他请看原文参考 1.用mkcert生成证书,去git ...
- Netty 学习笔记(4) ------ EventLoopGroup
EventLoopGroup负责管理Channel的事件处理任务,继承自java.util.concurrent包下的Executor,所以其结构类似与线程池,管理多个EventLoop. 而一个Ev ...