如何在 CentOS 7 上安装 MongoDB 分片集群如何在 CentOS 7 上安装 MongoDB 分片集群如何在 CentOS 7 上安装 MongoDB 分片集群如何在 CentOS 7 上安装 MongoDB 分片集群
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 CentOS 7 上安装 MongoDB 分片集群

在此页

  1. 分片和复制
  2. 三个分片组件
  3. 第 1 步 - 禁用 SELinux 并配置主机
  4. 第 2 步 - 在所有实例上安装 MongoDB
  5. 第 3 步 - 创建配置服务器副本集
  6. 第 4 步 - 创建分片副本集
  7. 第 5 步 - 配置 mongos/查询路由器
  8. 第 6 步 - 将分片添加到 mongos/查询路由器
  9. 第 7 步 - 测试
  10. 参考资料

分片是一个 MongoDB 进程,用于跨不同机器存储数据集。它允许你做数据的水平扩展,跨独立实例分区数据,它可以是 Replica Sets。 Sharding 上的数据集分区使用分片键。分片允许您根据堆栈上的数据增长添加更多机器。

分片和复制

让我们简单点。当您有音乐收藏时,Sharding 会将您的音乐收藏保存并保存到不同的文件夹中。另一方面,复制只是将您的音乐收藏同步到其他实例。

三个分片组件

Shard - 用于存储所有数据,在生产环境中,每个分片都是副本集。提供高可用性和数据一致性。

Config Server - 用于存储集群元数据,包含集群数据集和分片的映射。 mongos/查询服务器使用此数据来交付操作。建议在生产中使用 3 个以上的实例。

Mongos/Query Router - 这只是作为应用程序接口运行的 mongo 实例。应用程序将向 mongos 实例发出请求,然后 mongos 将使用分片键将请求传递到分片副本集。

先决条件

  • 2 台 centOS 7 服务器作为配置副本集
      • 10.0.15.31 configsvr1
      • 10.0.15.32 configsvr2

        • 10.0.15.21 shardsvr1
        • 10.0.15.22 shardsvr2
        • 10.0.15.23 shardsvr3
        • 10.0.15.24 shardsvr4

          • 10.0.15.11 mongos

          第 1 步 - 禁用 SELinux 并配置主机

          对于本教程,我们将禁用 SELinux。将 SELinux 配置从强制更改为禁用。

          通过 OpenSSH 连接到所有节点。

          ssh 

          通过编辑配置文件禁用 SELinux。

          vim /etc/sysconfig/selinux

          将 SELinux 值更改为已禁用。

          SELINUX=disabled

          保存并退出。

          接下来,编辑每台服务器上的主机文件。

          vim /etc/hosts

          粘贴以下主机配置:

              10.0.15.31      configsvr1
              10.0.15.32      configsvr2
              10.0.15.11      mongos
              10.0.15.21      shardsvr1
              10.0.15.22      shardsvr2
              10.0.15.23      shardsvr3
              10.0.15.24      shardsvr4

          保存并退出。

          现在重启所有服务器:

          reboot

          第 2 步 - 在所有实例上安装 MongoDB

          我们将为所有实例使用最新的 MongoDB (MongoDB 3.4)。通过执行以下命令添加新的 MongoDB 存储库:

          cat <<'EOF' >> /etc/yum.repos.d/mongodb.repo
          [mongodb-org-3.4]
          name=MongoDB Repository
          baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
          gpgcheck=1
          enabled=1
          gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
          EOF

          现在使用下面的 yum 命令从 mongodb 存储库安装 mongodb 3.4。

          sudo yum -y install mongodb-org

          mongodb安装完成后,使用mongo或mongod命令如下方式查看版本详情。

          mongod --version

          第 3 步 - 创建配置服务器副本集

          在先决条件部分,我们已经用 2 台机器 configsvr1 和 configsvr2 定义了配置服务器。在这一步中,我们将把它配置为一个副本集。

          如果服务器上正在运行 mongod 服务,请使用以下 systemctl 命令将其停止。

          systemctl stop mongod

          编辑默认的 mongodb 配置 mongod.conf。

          vim /etc/mongod.conf

          将数据库存储路径更改为您自己的目录。我们将为第一台服务器使用 /data/db1,为第二台配置服务器使用 /data/db2 目录。

          storage:
            dbPath: /data/db1

          将行 bindIP 的值更改为您的内部网络地址。 configsvr1 的 IP 地址为 10.0.15.31,第二台服务器的 IP 地址为 10.0.15.32。

          bindIP: 10.0.15.31

          在复制部分中,设置复制名称。

          replication:
            replSetName: "replconfig01"

          在分片部分下,定义实例的角色。我们将使用这两个实例作为 configsvr。

          sharding:
            clusterRole: configsvr

          保存并退出。

          接下来,我们必须为 MongoDB 数据创建一个新目录,然后将该目录的所有权权限更改为 mongod 用户。

          mkdir -p /data/db1
          chown -R mongod:mongod /data/db1

          接下来,使用以下命令启动 mongod 服务。

          mongod --config /etc/mongod.conf

          您可以使用 netstat 命令检查 mongod 服务是否在端口 27017 上运行。

          netstat -plntu

          Configsvr1 和 Configsvr2 已准备好复制集。连接到 configsvr1 服务器并访问 mongo shell。

          ssh 
          mongo --host configsvr1 --port 27017

          使用下面的查询为所有 configsvr 成员启动副本集名称。

          rs.initiate(
            {
              _id: "replconfig01",
              configsvr: true,
              members: [
                { _id : 0, host : "configsvr1:27017" },
                { _id : 1, host : "configsvr2:27017" }
              ]
            }
          )

          如果你得到一个结果 { \ok\ : 1 },这意味着 configsvr 已经配置了副本集。

          您将能够看到哪个节点是主节点,哪个节点是辅助节点。

          rs.isMaster()
          rs.status()

          Config Server 副本集配置完成。

          第 4 步 - 创建分片副本集

          在这一步中,我们将配置 4 个 centos 7 服务器作为具有 2 个副本集的 Shard 服务器。

          • 2 服务器 - shardsvr1 和 shardsvr2,副本集名称:shardreplica01
          • 2 服务器 - shardsvr3 和 shardsvr4,副本集名称:shardreplica02

          连接到每个服务器并停止 mongod 服务(如果该服务正在运行),并编辑 MongoDB 配置文件。

          systemctl stop mongod
          vim /etc/mongod.conf

          将默认存储更改为您的特定目录。

          storage:
            dbPath: /data/db1

          在 bindIP 行中,将值更改为您的内部网络地址。

          bindIP: 10.0.15.21

          在复制部分,您可以将 shardreplica01 用于第一个和第二个实例。第三个和第四个分片服务器使用 shardreplica02。

          replication:
            replSetName: "shardreplica01"

          接下来,定义服务器的角色。我们将使用所有这些作为 shardsvr 实例。

          sharding:
            clusterRole: shardsvr

          保存并退出。

          现在为 MongoDB 数据创建一个新目录。

          mkdir -p /data/db1
          chown -R mongod:mongod /data/db1

          启动 mongod 服务。

          mongod --config /etc/mongod.conf

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

          netstat -plntu

          您将看到 MongoDB 正在本地网络地址上运行。

          接下来,为这 2 个分片实例创建一个新的副本集。连接到 shardsvr1 并访问 mongo shell。

          ssh 
          mongo --host shardsvr1 --port 27017

          初始化副本集,名称为shardreplica01,成员为shardsvr1和shardsvr2。

          rs.initiate(
            {
              _id : "shardreplica01",
              members: [
                { _id : 0, host : "shardsvr1:27017" },
                { _id : 1, host : "shardsvr2:27017" }
              ]
            }
          )

          如果没有错误,您将看到如下所示的结果。

          来自 shardsvr3 和 shardsvr4 的结果,副本集名称为 shardreplica02。

          在具有不同副本集名称 shardreplica02 的 shardsvr3 和 shardsvr4 服务器上重做此步骤。

          现在我们已经创建了 2 个副本集作为分片 - shardreplica01 和 shardreplica02。

          第 5 步 - 配置 mongos/查询路由器

          查询路由器或 mongos 只是运行 mongos 的实例。您可以使用配置文件运行 mongos,或者仅使用命令行运行它。

          登录mongos服务器,停止MongoDB服务。

          ssh   
          systemctl stop mongod

          使用以下命令运行 mongos。

          mongos --configdb "replconfig01/configsvr1:27017,configsvr2:27017"

          使用 --configdb 选项定义配置服务器。如果您在生产环境中,请至少使用 3 个配置服务器。

          您将在下面看到结果。

          Successfully connected to configsvr1:27017
          Successfully connected to configsvr2:27017

          mongos 实例正在运行。

          第 6 步 - 将分片添加到 mongos/查询路由器

          从步骤 5 打开另一个 shell,再次连接到 mongos 服务器并访问 mongo shell。

          ssh 
          mongo --host mongos --port 27017

          使用 sh mongodb 查询添加分片服务器。

          对于 shardreplica01 实例。

          sh.addShard( "shardreplica01/shardsvr1:27017")
          sh.addShard( "shardreplica01/shardsvr2:27017")

          对于 shardreplica02 实例。

          sh.addShard( "shardreplica02/shardsvr3:27017")
          sh.addShard( "shardreplica02/shardsvr4:27017")

          确保没有错误并检查分片状态。

          sh.status()

          您将分片状态如下面的屏幕截图所示。

          我们有 2 个分片副本集和 1 个 mongos 实例在我们的堆栈上运行。

          第 7 步 - 测试

          现在通过启用分片来测试 MongoDB 服务器,然后添加文档。

          访问 mongos 服务器 mongo shell。

          ssh 
          mongo --host mongos --port 27017

          为数据库启用分片

          创建一个新数据库并为新数据库启用分片。

          use lemp
          sh.enableSharding("lemp")
          sh.status()

          现在查看数据库的状态 - 它已被分区到副本集 shardreplica01。

          为集合启用分片

          接下来,使用分片支持将新集合添加到数据库中。我们将使用分片集合名称添加名为 stack 的新集合,然后查看数据库和集合状态。

          sh.shardCollection("lemp.stack", {"name":1})
          sh.status()

          添加了具有分片集合名称的新集合堆栈。

          将文档添加到集合堆栈。

          现在将文档插入到集合中。当我们将文档添加到分片集群上的集合时,我们必须包括分片键。

          您可以使用下面的示例。我们正在使用分片键名,正如我们在为集合启用分片时添加的那样。

          db.stack.save({
              "name": "LEMP Stack",
              "apps": ["Linux", "Nginx", "MySQL", "PHP"],
          })

          文档已成功添加到集合中,如以下屏幕截图所示。

          如果要测试数据库,可以连接到副本集shardreplica01 PRIMARY服务器,打开mongo shell。我正在登录到 shardsvr2 主服务器。

          ssh 
          mongo --host shardsvr2 --port 27017

          检查副本集上可用的数据库。

          show dbs
          use lemp
          db.stack.find()

          您将看到数据库、集合和文档在副本集中可用。

          CentOS 7 上的MongoDB 分片集群成功安装部署。

          参考

          • https://docs.mongodb.com/manual/tutorial/deploy-shard-cluster/

©2015-2025 艾丽卡 support@alaica.com