Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >mongodb副本集搭建

mongodb副本集搭建

原创
作者头像
shirley
修改于 2019-07-09 02:31:57
修改于 2019-07-09 02:31:57
3.7K0
举报
文章被收录于专栏:进击的全栈进击的全栈
mongodb集群的副本集和sharding模式目前是用的最广的方案,通常这2种方案的选择通过数据量和并发数来权衡。在GB级别的基本上副本集方案可满足,TB级别或以上采用sharding模式,解决单机容量和单机并发能力。这两种既有自己的优势也有自己的缺点,比如sharding模式分片越多,性能自然下降越多。

摘自:Mongodb 集群keyFile认证

  • 环境、安装包版本
  • 一、安装、配置
  • 二、更改服务器节点
  • 三、mongodb.conf文件配置
  • 四、参考资料
mongodb 副本集理论请移步mongoDB复制(译 v4.0)
环境、安装包版本
操作系统:CentOS 7.2
MongoDB版本:4.0.10

安装软件包

安装 mongodb 的服务器

服务器端口地址

默认角色

10.13.8.232:27017

primary

10.5.101.8:27017

secondary

10.16.4.200:27110

arbiter

一、安装、配置
1. 分别在3台机器上都创建文件夹
代码语言:txt
AI代码解释
复制
# mkdir -p /data/mongodb/data
# mkdir -p /data/mongodb/log
# mkdir -p /data/mongodb/keyfile
2. 分别在3台机器上安装mongodb,安装目录统一为/usr/local/
代码语言:txt
AI代码解释
复制
1.去官网上下载mongodb 版本:
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.10.tgz
2.分别上传到3台机器上,并解压,修改目录名,删除安装包:
[/usr/local/]$ tar -xzvf mongodb-linux-x86_64-rhel70-4.0.10.tgz
[/usr/local/]$ mv mongodb-linux-x86_64-rhel70-4.0.10 mongodb-4.0.10
[/usr/local/]$ rm -rf mongodb-linux-x86_64-rhel70-4.0.10.tgz
3. 分别在3台机器上上传同一份 mongodb.conf 文件,放在/usr/local/mongodb-4.0.10目录下(具体配置文件见文末)
代码语言:txt
AI代码解释
复制
/usr/local/mongodb-4.0.10/]$ mkdir conf
[/usr/local/mongodb-4.0.10/]$ cd conf
[/usr/local/mongodb-4.0.10/conf/]$ rz
4. 分别在3台机器上都启动mongodb,在路径/usr/local/mongodb-4.0.10/bin下启动
代码语言:txt
AI代码解释
复制
[/usr/local/mongodb-4.0.10/bin/]$ ./mongod -f /usr/local/mongodb-4.0.10/conf/mongodb.conf

可通过 ps -aux|grep mongo 或者 lsof -i:27017来查看是否启动成功

5. 进入其中一个节点(主节点)的mongo控制台, 配置集群(务必保证节点防火墙关闭或开放mongo服务端口)
代码语言:txt
AI代码解释
复制
[/usr/local/mongodb-4.0.10/bin/]$ ./mongo
// 下面配置中的_id:"mongors"要与mongodb.conf文件中的replSetName一致。priority 参数的值决定了选举中该节点的优先级。值越高,优先级越高
> config = { _id: "mongors", members: [
{_id: 0, host: "10.13.8.232:27017", priority:2},
{_id: 2, host: "10.5.101.8:27017", priority:1},
{_id: 1, host: "10.16.4.200:27110",arbiterOnly:true}]
}
 // 初始化副本集,配置成功:"ok" : 1
> rs.initiate(config)
 // 查看副本集状态,确认主节点
> rs.status()
// 查看副本同步状态
> db.printSlaveReplicationInfo()
6. 创建相关用户及权限,只在其中一个节点上(主节点)操作即可
代码语言:txt
AI代码解释
复制
//在主节点上
> use admin
> db.createUser({user: 'root', pwd: 'pwd', roles: ['root']})
> db.auth('root','pwd')
> use ApiHub
> db.createUser({user: 'test', pwd: 'testpwd', roles: ['readWrite']})
> db.auth('test', 'testpwd')

//查看创建的用户
> use admin
> db.system.users.find().pretty()
7. 关闭所有节点(先关闭仲裁和从节点, 再关闭主节点, 避免主节点切换)
代码语言:txt
AI代码解释
复制
> use admin
> db.shutdownServer()       #关闭mongo后台进程
8. 开启用户认证

(1)创建 keyfile 文件。在其中1台机器上执行以下命令生成 keyfile 文件(修改权限的chmod命令使用方法):

代码语言:txt
AI代码解释
复制
//生成key
[/usr/local/]$ openssl rand -base64 745 > /data/mongodb/keyfile/keyfile
[/usr/local/]$ chmod 600 /data/mongodb/keyfile/keyfile

(2)将这份keyfile文件拷贝到另外2台机器上的相同路径下:/data/mongodb/keyfile/。

(3)分别在三个节点的 mongod.conf 文件中添加以下配置:

代码语言:txt
AI代码解释
复制
security:
		keyFile: "/data/mongodb/keyfile/keyfile"
		authorization: enabled

(4)重新启动3个节点

代码语言:txt
AI代码解释
复制
./mongod -f /usr/local/mongodb-4.0.10/conf/mongodb.conf

(4)进行认证(因为已启用身份认证功能):

代码语言:txt
AI代码解释
复制
> use admin
> db.auth('root','pwd')
10. 副本集更改权重模拟主宕机,验证配置是否成功。

若验证主从节点切换成功,则配置 OK。

二、更改服务器节点

根据实际情况,需要将10.5.101.8:27017变成10.5.101.9:27017。

策略:先添加从节点再删除不再使用的从节点,避免出错。
1. 按“一、安装、配置”的方法在10.5.101.9上安装同一版本的 mongodb、创建相关文件夹、同步上面生成的 keyfile 和 mongodb.conf 文件,并用 mongod 命令启动数据库。
2. 在主节点(10.13.8.232)上进入数据库
代码语言:txt
AI代码解释
复制
[/usr/local/mongodb-4.0.10/bin]$ ./mongo
mongors:PRIMARY> use admin
mongors:PRIMARY> db.auth('root','pwd')
mongors:PRIMARY> rs.add("10.5.101.9:27017")
// 使用 rs.printReplicationInfo() 来确认复制集的oplog状态。
mongors:PRIMARY> rs.printReplicationInfo()
// 删除不再使用的从节点
mongors:PRIMARY> rs.remove("10.5.101.8:27017")
//使用rs.status()或者 rs.conf()来确认配置
3. 使用第二步中的第10点来验证节点变更是否成功。
三、mongodb.conf文件配置

mongodb配置字段说明

为了安全,bindIp需要配置具体的 ip,只允许特定 ip 接入,避免暴露在公网上。
代码语言:txt
AI代码解释
复制
systemLog:
   destination: file
   path: "/data/mongodb/log/mongodb.log"
   logAppend: true
storage:
   dbPath: "/data/mongodb/data/"
   journal:
      enabled: true
   wiredTiger:
      engineConfig:
         cacheSizeGB: 6
replication:
    oplogSizeMB: 10000
    replSetName: "mongors"
processManagement:
   fork: true
   pidFilePath: "/data/mongodb/mongodb.pid"
net:
   bindIp: 127.0.0.1,10.13.8.232,10.5.101.8,10.16.4.200
   port: 27017
setParameter:
   enableLocalhostAuthBypass: false
四、参考资料
  1. MongoDB 副本集部署-3.6版本
  2. Mongodb 集群keyFile认证
  3. CentOS7.4搭建基于用户认证的MongoDB4.0三节点副本集集群详细文档

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【SpringBoot WEB 系列】AsyncRestTemplate 之异步非阻塞网络请求介绍篇
AsyncRestTemplate 发起异步网络请求,由 Spring4.0 引入,但是在 5.0 就被表上了删除注解,官方推荐使用基于 React 的 WebClient 来代替。
一灰灰blog
2020/07/07
6.2K0
【SpringBoot WEB 系列】AsyncRestTemplate 之异步非阻塞网络请求介绍篇
SpringBoot使用RestTemplate访问第三方接口
相信大家都知道如何在自己的项目里面调用自己的接口,只需要调用自己项目里面接口特定的URL地址就行了,但是如果是调用其他项目的接口呢,这时候如果是直接调用的话,很明显我们是不能够调用的.肯定是要通过某个工具才能够进行访问的.我们可以通过下面这张图来理解.
萌萌哒的瓤瓤
2021/01/13
3.8K0
SpringBoot使用RestTemplate访问第三方接口
Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解)
RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。
Java_老男孩
2019/12/02
11.5K1
RestTemplate的使用和原理你都烂熟于胸了吗?【享学Spring MVC】
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
YourBatman
2019/09/18
2.2K0
RestTemplate的使用和原理你都烂熟于胸了吗?【享学Spring MVC】
SpringCloud客户端负载均衡器Ribbon
cheese
2023/10/25
4090
SpringCloud客户端负载均衡器Ribbon
Spring之RestTemplate中级使用篇
前面一篇介绍了如何使用RestTemplate发起post和get请求,然而也只能满足一些基本的场景,对于一些特殊的如需要设置请求头,添加认证信息等场景,却没有提及可以怎么做,这一篇则相当于进阶版,将主要介绍
一灰灰blog
2018/08/15
2.6K0
Spring之RestTemplate中级使用篇
springBoot集成RestTemplate
文章目录 1. SpringBoot集成RestTemplate 1.1. 构造restful风格的api 1.2. 注入 1.3. 详解 1.3.1. GET(获取数据) 1.3.1.1. 生产 1.3.1.2. 消费 1.3.2. POST(新建、添加) 1.3.3. PUT(更新) 1.3.4. DELETE(删除) 1.4. 参考文章 SpringBoot集成RestTemplate 构造restful风格的api @RestController public class DepetContro
爱撒谎的男孩
2019/12/31
1.1K0
SpringBoot系列之RestTemplate使用示例
博主之前经常对接一些接口,所以发现写一些http请求比较麻烦,学习springboot的过程知道可以用RestTemplate来做http请求,RestTemplate是Spring Framework框架封装的基于模板方法设计模式的一个工具类,带有同步模板方法 API 的原始 Spring REST 客户端类,下面博主分析一些对接过程的一些经验,RestTemplate基本使用可以参考官网文档:https://docs.spring.io/spring-framework/docs/5.1.6.RELEASE/spring-framework-reference/integration.html#rest-client-access
SmileNicky
2022/05/07
1.5K0
SpringBoot系列之RestTemplate使用示例
Spring RestTemplate中几种常见的请求方式
当我们从服务消费端去调用服务提供者的服务的时候,使用了一个很好用的对象,叫做RestTemplate,当时我们只使用了RestTemplate中最简单的一个功能getForEntity发起了一个get请求去调用服务端的数据,同时,我们还通过配置@LoadBalanced注解开启客户端负载均衡,RestTemplate的功能不可谓不强大,那么今天我们就来详细的看一下RestTemplate中几种常见请求方法的使用。
田维常
2019/07/16
3.5K0
Spring RestTemplate中几种常见的请求方式
手把手讲解Spring中的Http请求神器RestTemplate
Java 中关于 Http 请求的工具实际上非常多,自带的 HttpUrlConnection,古老的 HttpClient,后起之秀 OkHttp 等,除了这些之外,还有一个好用的工具--RestTemplate,这是 Spring 中就开始提供的 Http 请求工具,不过很多小伙伴们可能是因为 Spring Cloud 才听说它。今天我们就来聊一聊这个 RestTemplate。
江南一点雨
2020/02/21
2.8K0
手把手讲解Spring中的Http请求神器RestTemplate
Spring Cloud Ribbon负载均衡
Spring Cloud Ribbon负载均衡一、简介二、客户端负载均衡三、RestTemplate详解GET请求POST请求PUT请求DELETE请求
cxuan
2019/06/03
6700
RestTemplate学习
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
2019/08/29
9710
springcloud3-服务到服务调用ribbon及openfeign
1,课程回顾 2,本章重点 ribbon (负载均衡器)如何实现服务到服务的调用 feign 服务到服务的调用 3,具体内容 3.1 ribbon 3.1.1 概念 Ribbon是一种客户端负载平衡器,可让您对HTTP和TCP客户端的行为进行大量控制(借助spring封装类RestTemplate,所有的入参,请求URL及出参数都是自己配置)。Feign已使用Ribbon,因此,如果使用@FeignClient,则本节也适用。 Ribbon中的中心概念是指定客户的概念。每个负载均衡器都是组件的一部分,这些组件可以一起工作以按需联系远程服务器,并且该组件具有您作为应用程序开发人员提供的名称(指定远程调用的服务名称,例如,使用@FeignClient批注)。根据需要,Spring Cloud通过使RibbonClientConfiguration为每个命名的客户端创建一个新的集合作为ApplicationContext。其中包含ILoadBalancer,RestClient和ServerListFilter。
张哥编程
2024/12/13
1300
springcloud3-服务到服务调用ribbon及openfeign
SpringBoot 调用外部接口的三种方式
SpringBoot不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。在Spring-Boot项目开发中,存在着本模块的代码需要访问外面模块接口,或外部url链接的需求, 比如在apaas开发过程中需要封装接口在接口中调用apaas提供的接口(像发起流程接口submit等等)下面也是提供了三种方式(不使用dubbo的方式)供我们选择
闻说社
2024/08/05
2260
SpringBoot 调用外部接口的三种方式
总结:使用 RestTemplate 发送HTTP请求
一般发送HTTP请求是使用 Apache的HttpClient,它比较灵活。在 spring cloud 中往往提供的 REST 风格的服务。RestTemplate 提供了一种简单便捷的模板类来进行HTTP操作的方式。
张云飞Vir
2021/05/18
3.1K0
一看就会的Spring的resetTemplate的使用方法
作为一名Java开发者,我们怎么都绕不开调用外部接口的场景,调用的方式要么是通过Http协议来调用,要么是通过RPC协议来调用,通过Http协议调用的话我们就需要用到Http的Api。比较常用的有Apache的HttpClient和原生的HttpURLConnection。这些Api都比较好用,但是我们今天要介绍一种更加好用API,Spring自带的RestTemplate,能力更强,使用更方便。
码农飞哥
2021/08/18
1.8K0
重学springboot系列番外篇之RestTemplate
RestTemplate是执行HTTP请求的同步阻塞式的客户端,它在HTTP客户端库(例如JDK HttpURLConnection,Apache HttpComponents,okHttp等)基础封装了更加简单易用的模板方法API。也就是说RestTemplate是一个封装,底层的实现还是java应用开发中常用的一些HTTP客户端。但是相对于直接使用底层的HTTP客户端库,它的操作更加方便、快捷,能很大程度上提升我们的开发效率。
大忽悠爱学习
2021/12/15
4.7K0
重学springboot系列番外篇之RestTemplate
Spring3 RestTemplate
RestTemplate是执行HTTP请求的同步阻塞式的客户端,它在HTTP客户端库(例如JDK HttpURLConnection,Apache HttpComponents,okHttp等)基础封装了更加简单易用的模板方法API。也就是说RestTemplate是一个封装,底层的实现还是java应用开发中常用的一些HTTP客户端。但是相对于直接使用底层的HTTP客户端库,它的操作更加方便、快捷,能很大程度上提升我们的开发效率。
HLee
2021/04/25
3.3K0
Spring3 RestTemplate
Spring-RestTemplate之urlencode参数解析异常全程分析
对接外部的一个接口时,发现一个鬼畜的问题,一直提示缺少某个参数,同样的url,通过curl命令访问ok,但是改成RestTemplate请求就不行;因为提供接口的是外部的,所以也无法从服务端着手定位问题,特此记录下这个问题的定位以及解决过程
一灰灰blog
2019/03/27
2.9K0
Spring-RestTemplate之urlencode参数解析异常全程分析
Spring Cloud Ribbon:负载均衡的服务调用
在微服务架构中,很多服务都会部署多个,其他服务去调用该服务的时候,如何保证负载均衡是个不得不去考虑的问题。负载均衡可以增加系统的可用性和扩展性,当我们使用RestTemplate来调用其他服务时,Ribbon可以很方便的实现负载均衡功能。
macrozheng
2019/09/17
7980
推荐阅读
相关推荐
【SpringBoot WEB 系列】AsyncRestTemplate 之异步非阻塞网络请求介绍篇
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档