如何在CentOS 7上部署MongoDB Sharded Cluster

本教程将向您介绍如何在CentOS 7上安装MongoDB Sharded Cluster。Sharding是一个用于在不同计算机上存储数据集的MongoDB进程。

如何在CentOS 7上部署MongoDB Sharded Cluster

Sharding是一个在不同机器上存储数据集的MongoDB过程。 它允许您执行数据的水平缩放比例,并在独立实例之间划分所有数据。 Sharding允许您将基于数据增长的更多机器添加到您的。

分片和复制

让我们简单一点。 当您收藏音乐时,“分片”将保存并将音乐收藏保存在不同实例或副本集的不同文件夹中,而“复制”只是将音乐收藏同步到其他实例。

三个分片组件

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

配置服务器 - 用于存储群集元数据,并包含群集数据集和分片的映射。 mongos / query服务器使用此数据来执行操作。 建议在生产中使用3个以上的实例。

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

先决条件

  • 2 centOS 7服务器作为配置副本集
      • 10.0.15.31 configsvr1
      • 10.0.15.32 configsvr2
  • 4 CentOS 7服务器作为碎片副本集
      • 10.0.15.21 shardsvr1
      • 10.0.15.22 shardsvr2
      • 10.0.15.23 shardsvr3
      • 10.0.15.24 shardsvr4
  • 1个CentOS 7服务器作为mongos /查询路由器
      • 10.0.15.11 mongos
  • 根特权
  • 每台服务器连接到另一台服务器

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

在本教程中,我们将禁用SELinux。 将SELinux配置从“执行”更改为“禁用”。

通过OpenSSH连接到所有节点。

ssh root@SERVERIP

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

vim /etc/sysconfig/selinux

将SELINUX值更改为“禁用”。

SELINUX=disabled

保存并退出。

接下来,编辑每个服务器上的hosts文件。

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命令重新启动所有服务器。

reboot

第2步 - 在所有实例上安装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

检查MongoDB版本

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

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

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

systemctl stop mongod

使用Vim编辑器编辑默认的mongodb配置“ mongod.conf ”。

vim /etc/mongod.conf

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

storage:
  dbPath: /data/db1

将“bindIP”行的值更改为内部网络地址 - “configsvr1”,IP地址为10.0.15.31,第二台服务器的值为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

配置MongoDB

Configsvr1和Configsvr2已准备好用于副本集。 连接到'configsvr1'服务器并访问mongo shell。

ssh root@configsvr1
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()

查看哪个节点是主节点,哪个节点是次节点

配置服务器副本集的配置完成。

第4步 - 创建碎片副本集

在这个步骤中,我们将配置4个“centos 7”服务器作为“Shard”服务器,带有2个“Replica Set”。

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

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

systemctl stop mongod
vim /etc/mongod.conf

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

storage:
  dbPath: /data/db1

在“绑定IP”行上,更改值以使用您的内部网络地址。

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正在本地网络地址上运行。

MongoDB在本地网络地址上运行

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

ssh root@shardsvr1
mongo --host shardsvr1 --port 27017

启动名为“ shardreplica01 ”的副本集,成员为“ shardsvr1 ”和“ shardsvr2 ”。

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

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

来自shardsvr3shardsvr4的结果,副本集名称为“ shardreplica02 ”。

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

对具有不同副本集名称“ shardreplica02 ”的shardsvr3shardsvr4服务器重新执行此步骤。

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

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

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

登录到mongos服务器并停止MongoDB服务。

ssh root@mongos 
systemctl stop mongod

使用命令行运行mongos,如下所示。

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

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

您应该看到类似于以下的结果。

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

mongos实例正在运行。

配置mongos /查询路由器

第6步 - 添加碎片mongos /查询路由器

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

ssh root@mongos
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()

您将看到类似于以下屏幕截图显示的分片状态。

向mongos /查询路由器添加分片

我们有2个分片复制集和1个mongos实例在我们的上运行。

第7步 - 测试

要测试设置,请访问mongos服务器mongo shell。

ssh root@mongos
mongo --host mongos --port 27017

为数据库启用分片

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

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

为数据库启用分片

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

为集合启用分片

接下来,使用分片支持将新集合添加到数据库。 我们将添加一个名为'stack'的新集合,其中包含shard集合'name',然后查看数据库和集合的状态。

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

为集合启用分片

已经添加了具有分片集合“名称”的新集合“”。

将文档添加到集合的“”。

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

在下面的例子中,我们使用分片键“ name ”,正如我们在为集合启用分片时添加的那样。

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

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

将文档添加到集合的“”。

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

ssh root@shardsvr2
mongo --host shardsvr2 --port 27017

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

show dbs
use lemp
db.stack.find()

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

CentOS 7上的MongoDB Sharded Cluster已成功安装和部署。

CentOS 7上的MongoDB Sharded Cluster已成功安装和部署。

参考


分享按钮