MongoDB-部署PSA(一主一从一仲裁)架构复制集群

2024-09-02 16:36

本文主要是介绍MongoDB-部署PSA(一主一从一仲裁)架构复制集群,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

    • 环境信息
    • 环境准备
    • mongoDB配置&部署
    • 复制集群搭建

环境信息

IP端口节点
10.0.0.127017
10.0.0.227017
10.0.0.327017仲裁

环境准备

1.关闭THP

  • Transparent Huge Pages 简称 THP。透明大页面(THP)是一种Linux内存管理系统,通过使用更大的内存页面,可以减少具有大量内存的计算机上的Translation Lookaside Buffer(TLB)查找的开销。但是,数据库工作负载通常在THP上表现不佳,因为它们往往具有稀疏而不是连续的内存访问模式。 您应该在Linux机器上禁用THP以确保使用MongoDB获得最佳性能。
# 创建规则目录
root # mkdir /etc/tuned/no-thp
#创建规则配置文件
root # vim /etc/tuned/no-thp/tuned.conf
[main]
include=virtual-guest
[vm]
transparent_hugepages=never
#启动该规则(重启后可生效)
root # tuned-adm profile no-thp
#临时生效方法
root # echo 'never' >/sys/kernel/mm/transparent_hugepage/enabled
root # echo 'never' >/sys/kernel/mm/transparent_hugepage/defrag
#查看当前THP是否关闭(necer表示关闭)
root # cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
root # cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]

2.创建MongoDB用户,并禁止登录。

root # groupadd mongodb 
root # useradd  -r -g mongodb -s /bin/false mongodb

3.设置mongodb用户的ulimit

cat> /etc/security/limits.d/mongodb.conf <<EOF
mongodb soft nofile 65535
mongodb hard nofile 65535
mongodb soft nproc 65535
mongodb hard nproc 65535
mongodb soft memlock unlimited 
mongodb hardmemlock unlimited
EOF

4.安装MongoDB所需要的依赖包

root # yum install cyrus-sasl cyrus-sasl-gssapi cyrus-sasl-plain krb5-libs libcurl libpcap lm_sensors-libs net-snmp net-snmp-agent-libs openldap openssl rpm-libs tcp_wrappers-libs -y

mongoDB配置&部署

1.创建MongoDB目录

root # mkdir /data/mongodb
root # mkdir /data/mongodb/base
root # mkdir /data/mongodb/{data,conf,log}
root # mkdir /data/mongodb/data/27017
root # mkdir /data/mongodb/conf/27017
root # mkdir /data/mongodb/log/27017
#目录结构
root # tree /data/mongodb/
/data/mongodb/
├── base
├── conf
│   ├── 27017
├── data
│   ├── 27017
└── log├── 27017

2.下载并解压mongodb安装包

root # wget https://downloads.mongodb.com/linux/mongodb-linux-x86_64-enterprise-rhel70-5.0.28.tgz
root # tar xf mongodb-linux-x86_64-enterprise-rhel70-5.0.28.tgz  -C /data/mongodb/base/ --strip-components=1
#对mongodb目录进行授权
root # chown -R mongodb.mongodb /data/mongodb/

3.添加mongodb环境变量

[root@MongoDB~]# vim /etc/profile
export MONGODB_HOME=/data/mongodb/base
export PATH=$MONGODB_HOME/bin:$PATH
[root@MongoDB~]# source /etc/profile

4.添加mongodb的keyfile文件

#进入到conf目录
root # cd /data/mongodb/conf/27017
#生成keyfile文件
root # openssl rand -base64 756 >keyfile
#对keyfile文件进行授权
root # chmod 400 keyfile 
#将keyfile文件传输到其他两个节点的conf目录,三个节点的keyfile文件需保持一致
root # scp keyfile root@10.0.0.2: /data/mongodb/conf/27017
root # scp keyfile root@10.0.0.3: /data/mongodb/conf/27017

5.配置mongodb的conf文件

  • 配置文件需要修改项
    • 复制集群名称:replSetName: test
    • 监听地址:bindIp
主:
cat > /data/mongodb/conf/27017/mongodb.conf << EOF
systemLog:destination: filepath: "/data/mongodb/log/27017/mongodb.log"logAppend: true
storage:dbPath: "/data/mongodb/data/27017"directoryPerDB: true					#设置为true,修改数据目录存储模式,每个数据库的文件存储在DBPATH指定目录的不同的文件夹中。使用此选项,可以配置的MongoDB将数据存储在不同的磁盘设备上,以提高写入吞吐量或磁盘容量。默认为falsejournal:enabled: true						#启用操作日志,以确保写入持久性和数据的一致性,会在dbpath目录下创建journal目录commitIntervalMs: 100
operationProfiling:slowOpThresholdMs: 200mode: slowOpslowOpSampleRate: 1
processManagement:fork: truepidFilePath: "data/mongodb/data/27017/mongod.pid"
net:port: 27017bindIp: 127.0.0.1,10.0.0.1 #填写本地地址以及本机ip
replication:oplogSizeMB: 20480replSetName: test	#复制集名称
security:authorization: enabledkeyFile: "/data/mongodb/conf/27017/keyfile"
EOF副本:
cat > /data/mongodb/conf/27017/mongodb.conf << EOF
systemLog:destination: filepath: "/data/mongodb/log/27017/mongodb.log"logAppend: true
storage:dbPath: "/data/mongodb/data/27017"directoryPerDB: truejournal:enabled: truecommitIntervalMs: 100
operationProfiling:slowOpThresholdMs: 200mode: slowOpslowOpSampleRate: 1
processManagement:fork: truepidFilePath: "data/mongodb/data/27017/mongod.pid"
net:port: 27017bindIp: 127.0.0.1,10.0.0.2 
replication:oplogSizeMB: 20480replSetName: test
security:authorization: enabledkeyFile: "/data/mongodb/conf/27017/keyfile"
EOF仲裁:
cat > /data/mongodb/conf/27017/mongodb.conf << EOF
systemLog:destination: filepath: "/data/mongodb/log/27017/mongodb.log"logAppend: true
storage:dbPath: "/data/mongodb/data/27017"directoryPerDB: truejournal:enabled: truecommitIntervalMs: 100
operationProfiling:slowOpThresholdMs: 200mode: slowOpslowOpSampleRate: 1
processManagement:fork: truepidFilePath: "data/mongodb/data/27017/mongod.pid"
net:port: 27017bindIp: 127.0.0.1,10.0.0.3
replication:oplogSizeMB: 20480replSetName: test
security:authorization: enabledkeyFile: "/data/mongodb/conf/27017/keyfile"
EOF

6.启动MongoDB

#分别启动三台mongodb,先启动主,再到从,再到仲裁。
root # mongod --config /data/mongodb/conf/27017/mongodb.conf 

复制集群搭建

1.初始化主节点,登录mongodb的10.0.0.1:27017节点

root # mongo 127.0.0.1 -port 27017
#执行初始化主节点SQL
> rs.initiate()
test:SECONDARY> rs.isMaster().ismaster
#查看复制集状态
test:PRIMARY> rs.status().members

2.配置用户认证

  • 创建用户规范
    • 管理用户为admin,密码为admin,认证库默认为admin
#登录mongodb的27017节点
root # mongo 127.0.0.1 -port 27017
#进入admin库
test:PRIMARY> use admin
#创建admin用户,密码为admin,认证库为admin
test:PRIMARY> db.createUser({user:"admin",pwd:"admin",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
#认证这个用户
test:PRIMARY> db.auth("admin","admin")
#为admin这个用户授予最高权限
test:PRIMARY>  db.grantRolesToUser("admin",[{role:"root",db:"admin"}])
#查看admin用户的权限信息
test:PRIMARY> db.getUser("admin")
#退出登录
cpos:PRIMARY> exit

3.添加副本和仲裁节点,添加副本以及仲裁节点,必须使用管理员权限的用户进行登录执行。

#使用admin用户登录
[root@MongoDB/data/mongodb/conf/27017]# mongo -port 27017 -u "admin" -p "admin" --authenticationDatabase "admin"
#添加副本
test:PRIMARY> rs.add("10.0.0.2:27017")
#添加仲裁节点
test:PRIMARY> rs.addArb("10.0.0.3:27017")
#查看集群状态
test:PRIMARY> rs.status().members
[{"_id" : 0,"name" : "10.0.0.1:27017","health" : 1,"state" : 1,"stateStr" : "PRIMARY","uptime" : 1304,"optime" : {"ts" : Timestamp(1638327035, 1),"t" : NumberLong(1)},"optimeDate" : ISODate("2024-09-01T02:50:35Z"),"syncSourceHost" : "","syncSourceId" : -1,"infoMessage" : "","electionTime" : Timestamp(1638326325, 2),"electionDate" : ISODate("2024-09-01T02:38:45Z"),"configVersion" : 3,"configTerm" : 1,"self" : true,"lastHeartbeatMessage" : ""},{"_id" : 1,"name" : "10.0.0.2:27017","health" : 1,"state" : 2,"stateStr" : "SECONDARY","uptime" : 72,"optime" : {"ts" : Timestamp(1638327025, 1),"t" : NumberLong(1)},"optimeDurable" : {"ts" : Timestamp(1638327025, 1),"t" : NumberLong(1)},"optimeDate" : ISODate("2024-09-01T02:50:25Z"),"optimeDurableDate" : ISODate("2024-09-01T02:50:25Z"),"lastHeartbeat" : ISODate("2024-09-01T02:50:35.324Z"),"lastHeartbeatRecv" : ISODate("2024-09-01T02:50:35.421Z"),"pingMs" : NumberLong(0),"lastHeartbeatMessage" : "","syncSourceHost" : "10.0.0.1:27017","syncSourceId" : 0,"infoMessage" : "","configVersion" : 3,"configTerm" : 1},{"_id" : 2,"name" : "10.0.0.3:27017","health" : 1,"state" : 7,"stateStr" : "ARBITER","uptime" : 30,"lastHeartbeat" : ISODate("2024-09-01T02:50:35.401Z"),"lastHeartbeatRecv" : ISODate("2024-09-01T02:50:35.661Z"),"pingMs" : NumberLong(0),"lastHeartbeatMessage" : "","syncSourceHost" : "","syncSourceId" : -1,"infoMessage" : "","configVersion" : 3,"configTerm" : 1}
]

这篇关于MongoDB-部署PSA(一主一从一仲裁)架构复制集群的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130491

相关文章

C#文件复制异常:"未能找到文件"的解决方案与预防措施

《C#文件复制异常:未能找到文件的解决方案与预防措施》在C#开发中,文件操作是基础中的基础,但有时最基础的File.Copy()方法也会抛出令人困惑的异常,当targetFilePath设置为D:2... 目录一个看似简单的文件操作问题问题重现与错误分析错误代码示例错误信息根本原因分析全面解决方案1. 确保

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

MySQL 临时表与复制表操作全流程案例

《MySQL临时表与复制表操作全流程案例》本文介绍MySQL临时表与复制表的区别与使用,涵盖生命周期、存储机制、操作限制、创建方法及常见问题,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小... 目录一、mysql 临时表(一)核心特性拓展(二)操作全流程案例1. 复杂查询中的临时表应用2. 临时

MySQL实现多源复制的示例代码

《MySQL实现多源复制的示例代码》MySQL的多源复制允许一个从服务器从多个主服务器复制数据,这在需要将多个数据源汇聚到一个数据库实例时非常有用,下面就来详细的介绍一下,感兴趣的可以了解一下... 目录一、多源复制原理二、多源复制配置步骤2.1 主服务器配置Master1配置Master2配置2.2 从服

Linux部署中的文件大小写问题的解决方案

《Linux部署中的文件大小写问题的解决方案》在本地开发环境(Windows/macOS)一切正常,但部署到Linux服务器后出现模块加载错误,核心原因是Linux文件系统严格区分大小写,所以本文给大... 目录问题背景解决方案配置要求问题背景在本地开发环境(Windows/MACOS)一切正常,但部署到

MySQL配置多主复制的实现步骤

《MySQL配置多主复制的实现步骤》多主复制是一种允许多个MySQL服务器同时接受写操作的复制方式,本文就来介绍一下MySQL配置多主复制的实现步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 环境准备2. 配置每台服务器2.1 修改每台服务器的配置文件3. 安装和配置插件4. 启动组复制4.

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

使用Go实现文件复制的完整流程

《使用Go实现文件复制的完整流程》本案例将实现一个实用的文件操作工具:将一个文件的内容完整复制到另一个文件中,这是文件处理中的常见任务,比如配置文件备份、日志迁移、用户上传文件转存等,文中通过代码示例... 目录案例说明涉及China编程知识点示例代码代码解析示例运行练习扩展小结案例说明我们将通过标准库 os

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5