如何在CentOS 7上安装MongoDB Sharded Cluster

如何在CentOS 7上安装MongoDB Sharded Cluster

Sharding是一个在不同机器上存储数据集的MongoDB过程。 它允许您执行横向数据分区,跨独立实例分区数据,并且可以是“副本集”。 'Sharding'上的数据集分区使用分片键。 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

保存并退出。

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

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

将DB存储路径更改为您自己的目录。 我们将为第一个服务器使用'/ 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 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()

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

第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

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

接下来,为这两个分片实例创建一个新的副本集。 连接到'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 ”。

在具有不同副本集名称“ 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实例正在运行。

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

从第5步打开另一个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()

您将按照以下屏幕截图所示分割状态。

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

第7步 - 测试

现在我们将通过启用分片并添加文档来测试MongoDB服务器。

访问mongos服务器mongo shell。

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

为数据库启用分片

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

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

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

为集合启用分片

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

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

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

将文档添加到集合''。

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

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

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分片群集成功安装和部署。

参考

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏