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.数据冗余及可用性 复制技术提供数据冗余及可用性,在不同的数据库服务器上使用多个数据副本,复制技术防止单个数据库服务器出现数据故障而出现数 ...
随机推荐
- Java对象与Json字符串的转换
Java对象与Json字符串的转换 JSON是一种轻量级的数据交换格式,常用于前后端的数据交流 后端 : 前端 Java对象 > JsonString Java对象 < jsonStrin ...
- Unity-ECS-实践
Archetypes原型 (它的存在使得遍历组件的命中率非常高) Archetype是一个容器,Unity规定每个ArcheType的大小16kb,不够就再开.始终保存内存的连续性 World 世界 ...
- 全栈的自我修养: 003Axios 的简单使用
全栈的自我修养: Axios 的简单使用 You should never judge something you don't understand. 你不应该去评判你不了解的事物. 全栈的自我修养: ...
- JVM系列-方法调用的原理
JVM系列-方法调用的原理 最近重新看了一些JVM方面的笔记和资料,收获颇丰,尤其解决了长久以来心中关于JVM方法管理的一些疑问.下面介绍一下JVM中有关方法调用的知识. 目的 方法调用,目的是选择方 ...
- ajax配合art-template模板引擎的使用
最近才接触js的模板引擎听说相比以前使用的js foreach加载后台返回的json数据简便很多而且效率方面也很不错.今天自己玩了一下 后台使用的是.net mvc,数据库脚本就不提供了,返回的Jso ...
- 关于Mint-UI中loadmore组件的兼容性问题
源代码 遇到的问题 写完了之后数据加载,渲染等等都是没有问题的,但是测试总是提上滑刷新不能用,因为是远程开发,测试提就得改,看代码看文档,看半天看不出来问题,想到了兼容性问题,发现也有人遇到这个坑.安 ...
- Spring常见问题大全
Spring 概述 1. 什么是spring? Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring ...
- 信不信?各种红包App最后都会整合游戏!App+游戏的变现模式分析
最近两个月「晓衡在线猿码微服」商城上出现了一类需求特别的客户: 我们有个 App,日活用户达到 XXX万,计划在 App 中嵌入游戏增加用户留存和利用流量变现,还有... 看你们这里游戏不少,想了解一 ...
- Qt-可视化数据库操作
1 简介 参考视频:https://www.bilibili.com/video/BV1XW411x7NU?p=89 说明:Qt可使用QSqlTableModel来进行数据库的可视化操作,将mode ...
- iconfont - 好用免费的图标库
某里出品 打开首页???????搜索框在哪里 网站:点我