部署monggodb副本集详细文档

chatgpt/2023/9/26 14:23:12

部署monggodb副本集

MongoDB有多种高可用性架构可以选择,以下是其中几种常见的高可用性架构:

副本集(Replica Set):副本集是MongoDB中最基本的高可用性架构。它由多个节点组成,其中有一个主节点(Primary),其余节点为从节点(Secondary)。主节点负责处理所有的写操作,从节点用于提供读取操作的负载均衡和容错能力。如果主节点发生故障,副本集会进行自动选举产生新的主节点,以保证系统的可用性。

分片集群(Sharded Cluster):分片集群是一种可扩展性和高可用性的架构。该架构将数据划分为多个分片(Shard),每个分片存储部分数据。每个分片有自己的副本集,以提供高可用性。一个分片集群还包括多个路由节点(Router),它们负责将数据请求路由到正确的分片上,实现负载均衡。

复制集群(Replica Set Cluster):复制集群是一种将多个副本集组合在一起形成的高可用性架构。每个副本集都是独立的,负责存储一部分数据并提供读写能力。复制集群通过在不同的数据中心或服务器上分布副本集来提高系统的容错性和可用性。

部署monggodb三节点副本集

首先修改主机名

192.168.197.136    hostnamectl set-hostname monggodb-1

192.168.197.137    hostnamectl set-hostname monggodb-2

192.168.197.138   hostnamectl set-hostname monggodb-3

下载安装包(三台节点都操作)

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.19.tgz --no-check-certificate

安装monggodb(三台节点都操作)

tar -zxvf mongodb-linux-x86_64-rhel70-5.0.19.tgz  

mv mongodb-linux-x86_64-rhel70-5.0.19  /data/mongodb

配置环境变量(三台节点都操作)

vim /etc/profile    最底部添加

MONGODB_HOME=/data/mongodb

export PATH=$PATH:$MONGODB_HOME/bin

source /etc/profile

创建数据库目录(三台节点都操作)

mkdir mongodb/data   数据存储目录

mkdir mongodb/log 日志存储目录

chown tom.tom /data/mongodb -R

三台节点做host解析

vim /etc/hosts

192.168.197.136 monggodb-1

192.168.197.137 monggodb-2

192.168.197.138 monggodb-3

scp /etc/hosts monggodb-2:/etc/hosts

scp /etc/hosts monggodb-3:/etc/hosts

运行monggodb使用root或者普通用户看需求

mongodb-1节点

mongod --replSet monggodb --dbpath /data/mongodb/data/ --logpath /data/mongodb/log/mongod.log --port 27017 --bind_ip monggodb-1 --logappend --fork

mongodb-2节点

mongod --replSet monggodb --dbpath /data/mongodb/data/ --logpath /data/mongodb/log/mongod.log --port 27017 --bind_ip monggodb-2 --logappend --fork

mongodb-3 节点

mongod --replSet monggodb --dbpath /data/mongodb/data/ --logpath /data/mongodb/log/mongod.log --port 27017 --bind_ip monggodb-3 --logappend --fork

启动命令参数

--replSet  是设定副本集的名字

--dbpath  是指定存储目录路径

--logpath 是指定日志文件路径

--port  是指定运行端口

--bind_ip   是monggodb服务监听的ip

--logappend  是将新的日志信息追加到现有的日志文件中(不加的话默认覆盖之前的日志)

--fork  是后台运行的方式启动

Monggodb副本集初始化

在monggodb-1登录客户端

mongo --host monggodb-1 --port 27017    

执行副本集初始化命令

rs.initiate()

添加monggodb-2、monggodb-3节点到副本集

rs.add("monggodb-2:27017")

rs.add("monggodb-3:27017")

查看当前副本集所有角色

rs.status().members或者rs.status()

初次添加节点到副本集时有的从节点可能因为网络原因选举另一个从节点当做主节点

在主节点指向异常的时候我们可以使用命令来手动指定主节点

来到节点3执行下面命令

rs.syncFrom("monggodb-1:27017")

可以看到主节点手动指定为节点1了

删除副本集角色的命令

rs.remove("mongodb:27017")

在副本集中添加完角色启动另外两个节点(在各自节点启动)

mongo --host monggodb-2 --port 27017

mongo --host monggodb-3 --port 27017

到这mongodb就部署完成了

在monggodb-3或者-2节点输入rs.status()  可以查看副本集状态

rs.status()回显信息的每个参数的含义:

- set: 副本集的名称。

- date: 运行状态报告生成的时间。

- myState: 代表当前节点的状态。2表示该节点为主节点。

- term: 当前副本集选举的期数。NumberLong(1)表示当前为第1个选举期。

- syncSourceHost: 主节点的地址。在此示例中,主节点为"mongodb-1:27017"。

- syncSourceId: 主节点在副本集中的成员ID。在此示例中,主节点的成员ID为0。

- heartbeatIntervalMillis: 副本集成员之间进行心跳检测的间隔时间(以毫秒为单位)。

- majorityVoteCount: 副本集中需要达成多数意见的成员数量。

- writeMajorityCount: 执行写操作所需的成员数量。

- votingMembersCount: 副本集中有投票权的成员数量。

- writableVotingMembersCount: 副本集中有投票权且可写的成员数量。

- optimes: 包含与操作时间相关的信息。

- lastCommittedOpTime: 最后已提交的操作时间。ts表示时间戳,t表示选举期。

- lastCommittedWallTime: 最后已提交的操作的墙钟时间戳。

- readConcernMajorityOpTime: 在多数态度下进行读取操作的操作时间。

- appliedOpTime: 最后已应用的操作时间。

- durableOpTime: 最后持久化的操作时间。

- lastAppliedWallTime: 最后已应用操作的墙钟时间戳。

- lastDurableWallTime: 最后持久化操作的墙钟时间戳。

- lastStableRecoveryTimestamp: 上次稳定恢复的时间戳。

测试一下当前主节点挂掉后是否会自动选举主节点

ps -ef |grep mongod

kill -9 101886   杀掉monggodb-1节点

来到monggodb-2节点查看当前副本集信息

mongo --host mongodb-2 --port 27017

rs.status()

可以看到mongodb-3被自动选举为主节点,到这副本集就部署完成了

 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

Linux NameSpace 虚拟化 资源隔离

NameSpace NameSpace介绍 在操作系统中命名空间命名空间提供的是系统资源的隔离,其中系统资源包括了:进程、网络、文件系统等等 实际上linux系统实现命名空间主要目的之一就是为了实现轻量级虚拟化服务,也就是我们说的容器,在同…

socket 基础

Socket是什么呢? ① Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。 ② Socket是连接运行在网络上的两个程序间的双向通信的端点。 ③ 网络通讯其实指…

基于SWAT-MODFLOW地表水与地下水耦合教程

详情点击链接:基于SWAT-MODFLOW地表水与地下水耦合教程 前沿 耦合模型被应用到很多科学和工程领域来改善模型的性能、效率和结果,SWAT作为一个地表水模型可以较好的模拟主要的水文过程,包括地表径流、降水、蒸发、风速、温度、渗流、侧向径流…

数据结构-链表结构-单向链表

链表结构 说到链表结构就不得不提起数据结构,什么是数据结构?就是用来组织和存储数据的某种结构。那么到底是某种结构呢? 数据结构分为: 线性结构 数组,链表,栈,队列 树形结构 二叉树&#x…

Java并发编程实战——基础知识

文章目录 1 基础知识1.3 线程带来的风险1.3.1 安全性问题1.3.2 活跃性问题 2 线程安全性2.2 原子性2.2.1 竞态条件2.2.1 数据竞争 2.3 加锁机制2.3.1 内置锁 2.4 用锁来保护状态 3 对象的共享3.1 可见性3.1.1 失效数据3.1.2 非原子的64位操作3.1.3 加锁与可见性3.1.4 volatile变…

正泰电力携手图扑:VR 变电站事故追忆反演

VR(Virtual Reality,虚拟现实)技术作为近年来快速发展的一项新技术,具有广泛的应用前景,支持融合人工智能、机器学习、大数据等技术,实现更加智能化、个性化的应用。在电力能源领域,VR 技术在高性能计算机和专有设备支…

AppCompatActivity.setContentView(与activity.setContentView区别)方法解读

AppCompatActivity.setContentView()与Activity.setContentView()主要的区别,Activity.setContentView直接将视图添加到Window上,AppCompatActivity.setContentView()借助AppCompatActivity的Delegate代理类,将要显示的视图加入到代理层视图&…

selenium如何打开浏览器,等待用户输入完成后,再运行

selenium如何打开浏览器,等待用户输入完成后,再运行 一、在脚本中,等待用户输入 在使用 Selenium 打开浏览器后等待用户输入完成,可以使用 Python 编写一个简单的脚本来实现。首先,确保你已经安装了 Selenium 和对应的…
推荐文章