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

文章目录

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文件,内容如下:

    bash 复制代码
     [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的相关包:

    bash 复制代码
    sudo yum install -y mongodb-org
  3. 启动MongoDB服务

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

    bash 复制代码
    sudo systemctl start mongod
    sudo systemctl enable mongod
  4. 验证安装

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

    bash 复制代码
    sudo systemctl status mongod

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

步骤2:配置副本集

  1. 配置mongod.conf

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

    yaml 复制代码
    replication:
      replSetName: rs0

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

  2. 开放端口

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

    bash 复制代码
    sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent
    sudo firewall-cmd --reload
  3. 启动MongoDB

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

    bash 复制代码
    sudo systemctl restart mongod
  4. 检查MongoDB日志

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

步骤3:初始化副本集

  1. 连接到MongoDB实例

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

    bash 复制代码
    mongo --host 192.168.1.100
  2. 初始化副本集

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

    javascript 复制代码
    rs.initiate()

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

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

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

    javascript 复制代码
    rs.add("192.168.1.101:27017")

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

    javascript 复制代码
    rs.status()

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

步骤4:验证副本集配置

  1. 查看副本集状态

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

    bash 复制代码
    mongo --host 192.168.1.100

    在Mongo shell中运行:

    javascript 复制代码
    rs.status()
  2. 进行数据写入测试

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

    javascript 复制代码
    use test
    db.testCollection.insert({name: "test"})

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

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

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

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

yaml 复制代码
security:
  authorization: "enabled"

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

bash 复制代码
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:

    bash 复制代码
    sudo yum install -y mongodb-org
  2. 配置mongod.conf

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

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

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

    bash 复制代码
    sudo systemctl start mongod
    sudo systemctl enable mongod
  4. 检查MongoDB状态

    确保MongoDB服务正常运行:

    bash 复制代码
    sudo systemctl status mongod

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

  1. 连接到一个数据节点

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

    bash 复制代码
    mongo --host 192.168.1.100
  2. 添加仲裁节点

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

    javascript 复制代码
    rs.addArb("192.168.1.102:27017")  // 假设仲裁节点的IP是192.168.1.102

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

  3. 验证副本集状态

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

    javascript 复制代码
    rs.status()

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

    json 复制代码
    {
        "host" : "192.168.1.102:27017",
        "arbiterOnly" : true,
        "stateStr" : "ARBITER",
        "state" : 7,
        "uptime" : 100
    }

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

  1. 测试选举功能

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

  2. 验证数据同步

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

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

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

相关推荐
A ?Charis1 小时前
k8s-对接NFS存储
linux·服务器·kubernetes
DC_BLOG5 小时前
Linux-GlusterFS进阶配置
linux·运维·服务器
我们的五年5 小时前
MAC地址是如何在局域网中工作的?
linux
浮华落定7 小时前
Centos开机自启动
linux·运维·centos
去看日出7 小时前
CentOS 7 企业级Redis 7部署指南
linux·redis·centos
End9288 小时前
如何安装虚拟机cenos7系统
大数据·linux·运维
果汁分你一半l9 小时前
c++标准io与线程,互斥锁
linux·开发语言·c++·算法·vim
WineMonk9 小时前
CentOS查看IP地址
linux·centos
5:009 小时前
Linux:进程间通信(一.初识进程间通信、匿名管道与命名管道、共享内存)
linux·运维·服务器
ARM+FPGA+AI工业主板定制专家10 小时前
Software PLC Solution for RK3568+Codesys ARM+LINUX Hardware Platform
linux·plc·rk3568·codesys