当前位置: 首页 > news >正文

CentOS 7.8 安装MongoDB 7 副本集(Replica Set)

文章目录

  • 1 环境假设
    • 步骤1:在两台服务器上安装MongoDB
    • 步骤2:配置副本集
    • 步骤3:初始化副本集
    • 步骤4:验证副本集配置
    • 步骤5:设置安全性(可选)
      • 扩展
      • 配置示例:
      • 最佳实践:
      • 仲裁节点
      • 步骤1:在一台服务器上安装MongoDB(仲裁节点)
      • 步骤2:将仲裁节点加入副本集
      • 步骤3:验证仲裁节点的功能
        • 总结

1 环境假设

  • 服务器1:server1(IP: 192.168.1.100
  • 服务器2:server2(IP: 192.168.1.101
  • MongoDB版本:4.x(可以根据需要选择其他版本)

步骤1:在两台服务器上安装MongoDB

  1. 配置YUM源

    在每台服务器上添加MongoDB的YUM源。编辑/etc/yum.repos.d/mongodb.repo文件,内容如下:

     [mongodb-org-7.0]
     name=MongoDB Repository
     baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/7.0/x86_64/
     gpgcheck=1
     enabled=1
     gpgkey=https://www.mongodb.org/static/pgp/server-7.0.asc
    

    如果是其他Linux发行版,请根据系统版本选择合适的源。

  2. 安装MongoDB

    安装MongoDB的相关包:

    sudo yum install -y mongodb-org
    
  3. 启动MongoDB服务

    启动MongoDB服务并设置为开机启动:

    sudo systemctl start mongod
    sudo systemctl enable mongod
    
  4. 验证安装

    使用以下命令检查MongoDB是否正常运行:

    sudo systemctl status mongod
    

    或使用mongo客户端连接到MongoDB实例,确认是否可以连接。

步骤2:配置副本集

  1. 配置mongod.conf

    在每台服务器上编辑MongoDB的配置文件/etc/mongod.conf,启用副本集配置。修改如下:

    replication:
      replSetName: rs0
    

    rs0是副本集的名字,你可以根据需要修改。

  2. 开放端口

    确保MongoDB端口(默认是27017)在防火墙中开放。你可以使用以下命令来开放该端口:

    sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent
    sudo firewall-cmd --reload
    
  3. 启动MongoDB

    启动或重新启动MongoDB使配置生效:

    sudo systemctl restart mongod
    
  4. 检查MongoDB日志

    检查mongod日志(/var/log/mongodb/mongod.log)确认是否有错误。

步骤3:初始化副本集

  1. 连接到MongoDB实例

    server1上,使用mongo客户端连接到MongoDB:

    mongo --host 192.168.1.100
    
  2. 初始化副本集

    在MongoDB shell中运行以下命令来初始化副本集:

    rs.initiate()
    

    你应该会看到类似以下输出:

    {
        "info2" : "no configuration has been given yet",
        "me" : "192.168.1.100:27017",
        "ok" : 1
    }
    
  3. 添加副本集成员

    之后,向副本集中添加第二台服务器server2

    rs.add("192.168.1.101:27017")
    

    运行以下命令检查副本集状态:

    rs.status()
    

    如果一切正常,你应该会看到两个成员(server1server2)都已经加入副本集。

步骤4:验证副本集配置

  1. 查看副本集状态

    使用以下命令查看副本集的状态,确保两个节点都在运行:

    mongo --host 192.168.1.100
    

    在Mongo shell中运行:

    rs.status()
    
  2. 进行数据写入测试

    在主节点上插入数据并检查是否同步到从节点:

    use test
    db.testCollection.insert({name: "test"})
    

    你可以在从节点上验证该数据是否已同步。

步骤5:设置安全性(可选)

为了确保MongoDB副本集的安全性,可以启用身份验证和加密。你可以在配置文件中启用auth选项并创建管理员用户。

编辑/etc/mongod.conf文件,添加:

security:
  authorization: "enabled"

然后在主节点上创建管理员用户:

mongo --host 192.168.1.100
use admin
db.createUser({
   user: "admin",
   pwd: "adminpassword",
   roles: [{ role: "root", db: "admin" }]
})

这样,其他成员在加入副本集时需要提供管理员的用户名和密码。

扩展

MongoDB副本集的最低配置需要 3台服务器。虽然可以在2台服务器上搭建副本集,但为了确保高可用性和避免“脑裂”(split-brain)问题,3台服务器是推荐的配置。

具体原因如下:

  1. 选举机制:MongoDB副本集需要一个“选举”机制来决定哪个节点作为主节点。如果只有2个节点,出现网络分区时,这两个节点可能无法达成一致,从而导致副本集无法正常工作。

  2. 高可用性:3个节点可以确保即使1个节点出现故障,副本集依然可以正常工作。在3个节点的配置中,如果其中1个节点宕机,另一个节点可以通过选举成为新的主节点,保证系统的高可用性。

  3. 仲裁节点:如果你有2个数据节点,可以增加一个仲裁节点(Arbiter),这个节点只参与选举,不保存数据。这样可以避免“脑裂”问题,同时仍然保持副本集的选举功能。仲裁节点不需要存储数据,只要保证选举时可以参与投票。

配置示例:

  • 2个数据节点(primarysecondary
  • 1个仲裁节点(arbiter

这样配置可以确保副本集有3个投票节点,但不需要额外的存储负担。

最佳实践:

  • 3个数据节点 + 1个仲裁节点 是一个常见的高可用副本集配置。
  • 4个数据节点 可以提供更强的故障恢复能力,但通常会增加管理和维护的复杂性。

总之,虽然最少可以配置2个节点,但为了确保高可用性和防止“脑裂”,建议使用3个节点。

仲裁节点

是的,仲裁节点(Arbiter)在搭建过程中的配置与数据节点相似,但它有一些特别的配置,主要是为了参与副本集选举而不存储数据。以下是如何在MongoDB副本集中设置仲裁节点的步骤:

步骤1:在一台服务器上安装MongoDB(仲裁节点)

你可以选择在已经有的服务器上安装MongoDB,或者在另一台新服务器上安装。这里假设你已经安装了MongoDB,并且副本集已经创建了2个数据节点。

  1. 安装MongoDB(如果尚未安装)

    在仲裁节点服务器上,按照之前的步骤使用YUM安装MongoDB:

    sudo yum install -y mongodb-org
    
  2. 配置mongod.conf

    在仲裁节点的MongoDB配置文件/etc/mongod.conf中,进行如下配置:

    replication:
      replSetName: rs0   # 确保与副本集名称一致
    security:
      authorization: "enabled"  # 可选:启用认证
    
  3. 启动MongoDB

    启动MongoDB服务并设置为开机启动:

    sudo systemctl start mongod
    sudo systemctl enable mongod
    
  4. 检查MongoDB状态

    确保MongoDB服务正常运行:

    sudo systemctl status mongod
    

步骤2:将仲裁节点加入副本集

  1. 连接到一个数据节点

    使用mongo命令连接到你的主节点(假设主节点IP是192.168.1.100):

    mongo --host 192.168.1.100
    
  2. 添加仲裁节点

    在Mongo shell中运行以下命令,将仲裁节点加入副本集:

    rs.addArb("192.168.1.102:27017")  // 假设仲裁节点的IP是192.168.1.102
    

    这样,MongoDB将会把192.168.1.102添加为仲裁节点。

  3. 验证副本集状态

    运行以下命令检查副本集状态,确保仲裁节点已加入并且状态正常:

    rs.status()
    

    在输出中,你应该会看到仲裁节点的状态类似于以下:

    {
        "host" : "192.168.1.102:27017",
        "arbiterOnly" : true,
        "stateStr" : "ARBITER",
        "state" : 7,
        "uptime" : 100
    }
    

步骤3:验证仲裁节点的功能

  1. 测试选举功能

    你可以通过在主节点上停止mongod服务来模拟节点故障。然后检查副本集是否能自动选举新的主节点。如果有仲裁节点,副本集应该能够正常进行选举,保证系统的高可用性。

  2. 验证数据同步

    仲裁节点不存储数据,它只是参与选举过程,因此你不需要验证数据同步。你只需要验证它是否正确参与选举并保持副本集的健康状态。

总结
  • 仲裁节点的搭建和数据节点类似,唯一的区别是仲裁节点配置不存储数据,且配置文件中不需要启用数据存储的设置。
  • 使用rs.addArb()将仲裁节点添加到副本集中,不需要额外的数据同步过程。
  • 仲裁节点的作用是保证选举过程的顺利进行,确保即使在数据节点故障时,副本集仍然能够正常选举出新的主节点。

对于测试环境,如果你有2个数据节点,可以使用1个仲裁节点来模拟高可用性,而不需要额外的数据存储。

相关文章:

  • Datablau产品全面接入DeepSeek
  • DeepSeek 服务器繁忙的全面解决方案
  • Firebase详解及使用方法
  • openGauss 3.0 数据库在线实训课程18:学习视图管理
  • SpringBoot3.x整合WebSocket
  • remix中为什么Dev -Ganache Provider没有了; remix中区块链常见的链接方式有哪些
  • 开源工具推荐--思维导图、流程图等绘制
  • 轮播图html
  • javascript安全解码base64
  • Xorp架构下的XRL,Unix_TCP_ Socket与异步IO回调函数技术
  • Vulhub靶机 MinIO信息泄露漏洞(CVE-2023-28432)(渗透测试详解)
  • MySQL深度剖析-InnoDB索引与B+树
  • QEMU源码全解析 —— 内存虚拟化(12)
  • Python 基础-循环
  • WebGPU顶点插槽进阶优化指南:释放GPU渲染性能
  • Spring Cloud Gateway中断言路由和过滤器的使用
  • Oracle启动与关闭(基础操作)
  • Spring Boot(快速上手)
  • hive全量迁移脚本
  • 淘宝商品详情API数据解析接口的深度解析,涵盖接口调用流程、核心数据字段
  • 复旦一校友捐赠1亿元,却不留名
  • 以色列在加沙发起新一轮强攻,同步与哈马斯展开“无条件谈判”
  • 义乌至迪拜“铁海快线+中东快航”首发,物流成本降低18%
  • 雅安市纪委监委回应黄杨钿甜耳环事件:相关政府部门正在处理
  • 广西等地旱情缓解,水利部针对甘肃启动干旱防御Ⅳ级响应
  • 张广智︱“编年事辑”:打开学人心路历程的窗户