MongoDB主从复制,一文打尽!

news2024/10/7 6:51:03

📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前服务于工业互联网
擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

文章目录

  • 前言
    • 📣 1.MongoDB概述
    • 📣 2.MongoDB特点
    • 📣 3.MongoDB主从复制
      • ✨ 3.1 架构介绍
      • ✨ 3.2 MongoDB副本集
    • 📣 4.主从集群部署
      • ✨ 4.1 yum源配置
      • ✨ 4.2 yum安装mongodb
      • ✨ 4.3 启动MongoDB服务
      • ✨ 4.4 相关配置
    • 📣 5.配置MongoDB主从
      • ✨ 5.1 用户认证
      • ✨ 5.2 配置副本集
    • 6.主从切换

前言

MongoDB的宗旨是构建更快速,构建更智能。借助基于领先的现代数据库构建的应用程序数据平台,更快地将您的想法推向市场。

📣 1.MongoDB概述

MongoDB的宗旨是构建更快速,构建更智能。
借助基于领先的现代数据库构建的应用程序数据平台,
更快地将您的想法推向市场。支持事务性、搜索、分析和移动使用案例,
同时采用通用查询接口和开发人员喜爱的数据模型。
官网:https://www.mongodb.com/zh-cn

📣 2.MongoDB特点

面向文档的数据模型:MongoDB是一种面向文档的数据库,这意味着它使用文档来存储数据,文档是一个键值对集合,是非常灵活的数据模型。

分布式
高性能
强大的查询语言
灵活的数据模型
可扩展性
可视化管理工具

📣 3.MongoDB主从复制

✨ 3.1 架构介绍

MongoDB主从复制是一种数据同步机制,通过该机制可以将一个 MongoDB 实例的数据复制到其他多个实例中,以提高数据的可靠性和可用性。在主从复制中,有一个主节点(也称为主服务器),负责接收写入请求并将数据同步到从节点(也称为从服务器)。从节点只能处理读操作,而不允许写入操作。

✨ 3.2 MongoDB副本集

副本集在mongodb中是是一组 mongod保持相同的数据集过程,副本集提供冗余和高可用性,并且是所有生产部署的基础。

📣 4.主从集群部署

✨ 4.1 yum源配置

首先我们需要配置yum源,这里我们使用清华源,3台服务器均安装
vi /etc/yum.repos.d/mongodb.repo
[mongodb]
name=MongoDB Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mongodb/yum/el7/
gpgcheck=0
enabled=1


检查yum仓库各镜像源状态
[root@master /]# yum repolist all |grep enable
base/7/x86_64                       CentOS-7 - Base               enabled: 10072
extras/7/x86_64                     CentOS-7 - Extras             enabled:   518
mongodb                             MongoDB Repository            enabled:   380
updates/7/x86_64                    CentOS-7 - Updates            enabled:  5527

✨ 4.2 yum安装mongodb

yum install -y mongodb-org-server mongodb-org

✨ 4.3 启动MongoDB服务

systemctl start mongod.service
systemctl enable mongod.service
systemctl status mongod

✨ 4.4 相关配置

1.master节点配置
--进入mongodb数据库
[root@master /]# mongo           
MongoDB shell version v5.0.23
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("d3869e61-4337-4a2f-bce1-bd8a04a0987b") }
MongoDB server version: 5.0.23
================
Warning: the "mongo" shell has been superseded by "mongosh",
which delivers improved usability and compatibility.The "mongo" shell has been deprecated and will be removed in
an upcoming release.
For installation instructions, see
https://docs.mongodb.com/mongodb-shell/install/
================
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        https://docs.mongodb.com/
Questions? Try the MongoDB Developer Community Forums
        https://community.mongodb.com
---
The server generated these startup warnings when booting: 
        2023-12-25T22:57:34.147+00:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
        2023-12-25T22:57:34.147+00:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
        2023-12-25T22:57:34.147+00:00: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never'
---
> 

--在mongodb内创建用户管理员admin账号
db.createUser({
  user: "admin",
  pwd: "admin",
  roles: [
  {role: "userAdminAnyDatabase",db: "admin"}
  ]
}
)

> db.createUser({
...   user: "admin",
...   pwd: "admin",
...   roles: [
...   {role: "userAdminAnyDatabase",db: "admin"}
...   ]
... }
... )
Successfully added user: {
        "user" : "admin",
        "roles" : [
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                }
        ]
}


--进入admin数据库内,使用admin账号验证登录。
>  use admin;
switched to db admin
> db.auth("admin","admin")

   
--使用admin账号连接mongodb
[root@master /]# mongo -uadmin -padmin --authenticationDatabase admin
MongoDB shell version v5.0.23
connecting to: mongodb://127.0.0.1:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("793c88ab-0bcc-4e54-a1f2-94a04cea0c28") }
MongoDB server version: 5.0.23
================
Warning: the "mongo" shell has been superseded by "mongosh",
which delivers improved usability and compatibility.The "mongo" shell has been deprecated and will be removed in
an upcoming release.
For installation instructions, see
https://docs.mongodb.com/mongodb-shell/install/
================
---
The server generated these startup warnings when booting: 
        2023-12-26T11:31:44.677+00:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
        2023-12-26T11:31:44.677+00:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
        2023-12-26T11:31:44.677+00:00: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never'
---


在mongodb内创建huawei用户,用户角色权限为"mongo"
db.createUser({user: "mongo", pwd: "Root#123", roles: [{role: "root", db: "admin"}]})

2.在主节点创建key文件
--在主节点创建key文件
mkdir -p /data/mongodb/
openssl rand -base64 666 > /data/mongodb/mongodb.key

--在两个从节点创建目录
mkdir -p /data/mongodb/

--将key文件发送两个从节点
scp  /data/mongodb/mongodb.key root@192.168.12.57:/data/mongodb/
scp  /data/mongodb/mongodb.key root@192.168.12.58:/data/mongodb/

3.所有节点配置工作
以下步骤,三个节点都需要执行。
--目录及文件授权
在三个节点服务器中,执行以下命令,对相关目录及文件进行授权操作·。

chown mongod:mongod -R /data/mongodb/
chmod 600 /data/mongodb/mongodb.key

--编辑/etc/mongod.conf文件
在三个节点服务器中,编辑/etc/mongod.conf文件。

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log
storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo
net:
  port: 27017
  bindIp: 0.0.0.0  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
security:
  authorization: enabled
  keyFile: /data/mongodb/mongodb.key
  clusterAuthMode: keyFile
replication:
  replSetName: rs0
  oplogSizeMB: 5000
  
--重启mongodb服务
三个节点服务器,重启mongodb服务。
systemctl restart mongod

📣 5.配置MongoDB主从

✨ 5.1 用户认证

--连接master节点的mongodb。
[root@master /]# mongo
MongoDB shell version v5.0.23
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("fc6ec2e8-d047-41bd-876b-9011cbc7bce1") }
MongoDB server version: 5.0.23
================
Warning: the "mongo" shell has been superseded by "mongosh",
which delivers improved usability and compatibility.The "mongo" shell has been deprecated and will be removed in
an upcoming release.
For installation instructions, see
https://docs.mongodb.com/mongodb-shell/install/
================
> 

--使用mongo账号进行认证
> use admin;
switched to db admin
> db.auth("mongo","Root#123")
1

✨ 5.2 配置副本集

执行以下命令,配置副本集。
rs.initiate({
_id : “rs0”,
members: [
{ _id: 0, host: “172.18.12.56:27017” },
{ _id: 1, host: “172.18.12.57:27017” },
{ _id: 2, host: “172.18.12.58:27017” }
]
})

6.主从切换

--停止主库的mongodb服务
systemctl stop mongod.service

--查看从库状态
其他从节点登录mongodb,查看mongodb的角色,发现auxiliary01节点已经切换为主库。

auxiliary01节点:
systemctl status mongod.service

[root@auxiliary01 /]# mongo
MongoDB shell version v5.0.23
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("613255c0-6d43-439e-bec8-1adb653c308f") }
MongoDB server version: 5.0.23
================
Warning: the "mongo" shell has been superseded by "mongosh",
which delivers improved usability and compatibility.The "mongo" shell has been deprecated and will be removed in
an upcoming release.
For installation instructions, see
https://docs.mongodb.com/mongodb-shell/install/
================
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        https://docs.mongodb.com/
Questions? Try the MongoDB Developer Community Forums
        https://community.mongodb.com
        
        

auxiliary02节点:
systemctl status mongod.service

[root@auxiliary02 /]# mongo
MongoDB shell version v5.0.23
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("a99a3533-94c2-45c8-9dda-400e3093b619") }
MongoDB server version: 5.0.23
================
Warning: the "mongo" shell has been superseded by "mongosh",
which delivers improved usability and compatibility.The "mongo" shell has been deprecated and will be removed in
an upcoming release.
For installation instructions, see
https://docs.mongodb.com/mongodb-shell/install/
================
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        https://docs.mongodb.com/
Questions? Try the MongoDB Developer Community Forums
        https://community.mongodb.com
        
注:此时启动节点1,我们发现原来的主库已经成为备库了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1341625.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hadoop安装笔记2单机/伪分布式配置_Hadoop3.1.3——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2:离线数据处理

紧接着上一篇博客:Hadoop安装笔记1: Hadoop安装笔记1单机/伪分布式配置_Hadoop3.1.3——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2:离线数据处理-CSDN博客https://blog.csdn.net/Zhiyilang/article/details/135…

K8s实战-基于LivenessProbe健康检查

LivenessProbe探针用于判断容器是否存活,如果探测到容器不健康,则kubelet将杀掉该容器,然后根据重启策略处理。 LivenessProbe的实现方式: ExecAction:在容器内部执行一个命令,如果该命令的返回码为0&…

右键菜单“以notepad++打开”,在windows文件管理器中

notepad 添加到文件管理器的右键菜单中 找到安装包,重新安装一般即可。 这里有最新版:地址 密码:f0f1 方法 在安装的时候勾选 “Context Menu Entry” 即可 Notepad的右击打开文件功能 默认已勾选 其作用是添加右键快捷键。即,对于任何…

定期修改公司数据协议的重要性

目录 ​编辑 为公司和客户数据提供更好的安全性 利用现代数据分析工具 标准化您的数据收集流程 改善数据的使用 增强您的营销和销售活动 定义数据分类指南 创建更具凝聚力和协作性的团队 遵守法律法规 结论 企业主可以使用许多对其成功至关重要的工具&#…

【UE5.1】程序化生成Nanite植被

目录 效果 步骤 一、下载Gaea软件和树林资产 二、使用Gaea生成贴图 三、 生成地形 四、生成草地 五、生成树林 六、生成湖泊 七、其它功能介绍 7.1 调整树林生成的面积 7.2 让植物随风飘动 7.3 玩家和植物互动 7.4 雪中树林 7.5 环境音效 效果 步骤 一、下载Ga…

图的操作实验

图的操作 一、 实验目的 (1)掌握图的邻接矩阵和邻接表存储结构。 (2)熟练图的邻接表的基本运算。 (3)加深图的深度优先遍历算法和广度优先遍历算法的理解。 (4)领会最小生成树和…

Spring高手之路-Spring事务的传播机制(行为、特性)

目录 含义 七种事务传播机制 1.REQUIRED(默认) 2.REQUIRES_NEW 3.SUPPORTS 4.NOT_SUPPORTED 5.MANDATORY 6.NEVER 7.NESTED 含义 事务的传播特性指的是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行? 七…

Clion 项目使用dbg-macro控制台输出ANSI转义,输出颜色文本。

#Clion如何输出ANSI转义 首先源于,引入dbg-macro后,运行发现控制台全部是 C:\Users\WuXiangGuJun\CodeSpace\ClionCodeProjects\Tina\cmake-build-debug\tests\tests.exe ?[02m[..a\tests\src\main.cpp:16 (main)] ?[0m?[36mmessage?[0m ?[01m&q…

【计算机网络实验】educoder实验八 IPV6网络及其路由 头歌

第一关 IPV6网络基础 //千万不要破坏文档原有结构与内容!!! //以下均为判断题,F:表示错误,T:表示正确 //答案必须写在相应行末尾括号内,F与T二选一,大写 // 1、ipv6协议…

element el-table实现可进行横向拖拽滚动

【问题】表格横向太长,表格横向滚动条位于最底部,需将页面滚动至最底部才可左右拖动表格,用户体验感不好 【需求】基于elment的el-table组件生成的表格,使其可以横向拖拽滚动 【实现】灵感来源于这篇文章【Vue】表格可拖拽滚动&am…

《数据库开发实践》之触发器

一、什么是触发器? 1.概念: 简单来说触发器就是一种特殊的存储过程,在数据库服务器触发事件的时候会自动执行其SQL语句集。 2.构成四要素: (1)名称:要符合标识符命名规则 (2&am…

idea 如何快速拉取新分支

方式1 (快捷键:CtrlShift~) 方式2:(快捷键:Alt9)

小梅哥Xilinx FPGA学习笔记18——专用时钟电路 PLL与时钟向导 IP

目录 一:IP核简介(具体可参考野火FPGA文档) 二: 章节导读 三:PLL电路原理 3.1 PLL基本实现框图 3.2 PLL倍频实现 3.3 PLL分频实现 四: 基于 PLL 的多时钟 LED 驱动设计 4.1 配置 Clocking Wizard 核 4.2 led …

详解结构体(包含结构体内存对齐,柔性数组,位段)【尊嘟很详细】

​ 结构体 结构体是一些值的集合,这些值称为成员变量,结构的成员可以是标量、数组、指针,甚至是其他结构体。 成员名可以与程序中其它变量同名,互不干扰。 结构体的定义 (struct结构名{}) struct books {int a;c…

Aseprite编译

官方网站 : https://www.aseprite.org/ Aseprite编译 步骤 : 1> App Store 下载安装 XCode 2> 安装 brew # /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)" 或 # /bin/zsh -c "$(curl -fsSL https://g…

处理HTTP错误响应:Go语言中的稳健之道

开场白:在Web开发中,HTTP错误响应是不可避免的一部分。当请求无法成功完成时,服务器会返回一个错误响应。今天,我们将深入探讨如何在Go语言中优雅地处理这些HTTP错误响应。 知识点一:HTTP错误响应的常见类型HTTP错误响…

初步认识API安全

一、认识API 1. 什么是API API(应用程序接口):是一种软件中介,它允许两个不相关的应用程序相互通信。它就像一座桥梁,从一个程序接收请求或消息,然后将其传递给另一个程序,翻译消息并根据 API 的程序设计执行协议。A…

使用spring boot实现异常的统一返回

在这个前后端分离的时代,一个 统一的数据格式非常重要。本次我们实现用spring boot实现一下返回给前端数据的统一格式,不再出现服务器500的错误。 新建一个spring boot项目,并导入knife4j的依赖。 写一个controller控制器,用来是…

JDK17:Java LinkedList源码解读

1. LinkedList简介 LinkedList是List接口的实现类,基于双向链表实现,继承自AbstractSequentialList类,同时也实现了Cloneable、Serializable接口。此外还实现了Queue和Deque接口,可以作为队列或双端队列使用。 LinkedList的插入删…

Starling-LM-7B与GPT-4:开源AI的新纪录

引言 在人工智能的前沿领域,Starling-LM-7B的出现标志着开源大型语言模型(LLM)的一大突破。与GPT-4的近距离竞争不仅展示了Starling-LM-7B的技术实力,也突显了开源社区在推动AI发展方面的重要作用。 模型特点 Starling-LM-7B&a…