MongoDB 4.4.4分片集群配置全流程

MongoDB安装

配置集群之前,我们需要先找到需要的程序包,下载地址:

https://www.mongodb.com/try/download/community

由于linux发行版太多,软件包的安装形式也有一大堆,所以这里不可能把每种安装方式都说一遍,特别是一些比较区分平台的安装方式,比如Debian/Ubuntu的deb、CentOS的rpm这些,如果使用这类包安装的,如果是在正式环境下配置,应该没什么问题,如果是在开发或测试环境下使用此类包(比如单机上配置集群)在后续配置分片的时候要注意,你需要在启动的时候手工指定配置文件路径以便加载不同实例下的不同配置。本文将采用更加通用的tgz包进行讲解,具体情况请大家自行决定。
在这里插入图片描述

本文用到的软件包和配置文件全部在下面的地址有提供,你可以选择去官网自行下载,并按照后续流程手工配置自己的配置文件,也可以直接下载我提供的软件包和配置,对配置进行修改后直接使用。

链接:https://pan.baidu.com/s/1oVCFhF6Hr_ICY_0S2Kys1Q#r696
提取码:r696

基本配置

首先,本教程配置了4组分片集群,每组集群中4台机器。4组集群分部在4台虚拟机上,而每个分组实例集群的4台机器在每台虚拟机中。构成了如下的mongodb服务器群:

Router(路由器) { 10.20.1.156:27000 }
Config(配置中心) { 10.20.1.156:27010, 10.20.1.157:27010, 10.20.1.158:27010 }
Shard1(分片1) { 10.20.1.156:27017(权重10), 10.20.1.156:27018, 10.20.1.156:27019, 10.20.1.156:27020(仲裁节点) }
Shard2(分片2) { 10.20.1.157:27017(权重10), 10.20.1.157:27018, 10.20.1.157:27019, 10.20.1.157:27020(仲裁节点) }
Shard3(分片3) { 10.20.1.158:27017(权重10), 10.20.1.158:27018, 10.20.1.158:27019, 10.20.1.158:27020(仲裁节点) }
Shard4(分片4) { 10.20.1.159:27017(权重10), 10.20.1.159:27018, 10.20.1.159:27019, 10.20.1.159:27020(仲裁节点) }

下面我将其中一组分片的配置流程写一下,其他的都一样。

我的软件包部署在 /opt 目录下,将tgz包解压并改名为 mongodb-4.4.4,今后需要做版本升级的时候直接解压新版本包即可,不会冲掉旧版本程序。而MongoDB的数据、日志和配置存放在 /opt/mongodb 目录下,具体目录结构如下:

/opt/mongodb-4.4.4/ (主程序)
以下为分片节点路径
/opt/mongodb/data/27017/ (节点1数据目录)
/opt/mongodb/data/27018/ (节点2数据目录)
/opt/mongodb/data/27019/ (节点3数据目录)
/opt/mongodb/data/27020/ (节点4数据目录)
/opt/mongodb/conf/mongo-27017.conf (节点1配置文件)
/opt/mongodb/conf/mongo-27018.conf (节点2配置文件)
/opt/mongodb/conf/mongo-27019.conf (节点3配置文件)
/opt/mongodb/conf/mongo-27020.conf (节点4配置文件)
/opt/mongodb/logs/mongod-27017.log (节点1日志文件)
/opt/mongodb/logs/mongod-27018.log (节点2日志文件)
/opt/mongodb/logs/mongod-27019.log (节点3日志文件)
/opt/mongodb/logs/mongod-27020.log (节点4日志文件)
以下为路由配置路径
/opt/mongodb/conf/mongo-router.conf (路由配置文件)
/opt/mongodb/logs/router.log (路由器日志)
以下为配置中心路径
/opt/mongodb/conf/mongo-config.conf (配置中心配置文件)
/opt/mongodb/config/ (配置中心数据目录)
/opt/mongodb/logs/config.log (配置中心日志)
以下为分片密钥路径
/opt/mongodb/sharding-sync-key.file (分片集群密钥文件)

我们先建立好上述的目录即可,文件可以先不用管。 (你也可以不按照我的路径安排方式,但请自行调整其中的差异。)

mkdir -p /opt/mongodb/conf
mkdir -p /opt/mongodb/config
mkdir -p /opt/mongodb/data/27017
mkdir -p /opt/mongodb/data/27018
mkdir -p /opt/mongodb/data/27019
mkdir -p /opt/mongodb/data/27020
mkdir -p /opt/mongodb/logs

初始化配置

然后,将前面下载的配置文件拷贝到conf目录,按照自己的情况修改配置文件的名称、端口即可。

配置文件示例,如无特殊需求本示例可直接使用。前面提供的百度网盘地址当中已提供,该实例中只配置了关键参数,其他的个性化参数,请参考官网说明:

官网地址:http://docs.mongodb.org/manual/reference/configuration-options/

# mongod.conf

storage:
  # 数据库文件存储路径
  dbPath: /opt/mongodb/data/27017
  # journal日志是否开启(true:是,false:否)
  journal:
    enabled: true

systemLog:
  # 日志保存方式
  destination: file
  # 是否以追加的方式写入日志(true:是,false:否)
  logAppend: true
  # 日志保存路径
  path: /opt/mongodb/logs/mongod-27017.log

net:
  # mongodb的端口
  port: 27017
  # mongodb的主机地址
  bindIp: 0.0.0.0

processManagement:
  # mongodb使用的时区
  timeZoneInfo: /usr/share/zoneinfo
  # 是否以后台驻留进程运行(true:是,false:否)
  fork: true

security:
  # 分片集群同步密钥文件路径
  keyFile: /opt/mongodb/sharding-sync-key.file
  # 是否启用权限登陆(enabled:启用,disabled:禁用)该节点在成功增加root账号权限之前,请勿开启,否则会无法访问
  authorization: disabled

replication:
  # 集群名称,如果不是同一个集群内的机器,请不要配置重复
  replSetName: shard4

sharding:
  # 分片集群中当前实例的角色(configsvr:配置中心实例,shardsvr:分片实例)
  clusterRole: shardsvr

配置集群

生成分片集群密钥

生成分片集群密钥文件

openssl rand -base64 756 > /opt/mongodb/sharding-sync-key.file
chmod 600 /opt/mongodb/sharding-sync-key.file  (密钥文件的权限必须是600,否则在程序启动时会报错。)

下面开始调整各个文件和目录的文件权限

chmod 755 /opt/mongodb-4.4.4/bin/*
chmod 755 /opt/mongodb/conf/*

运行分片实例

接着就可以尝试运行分片实例了,执行如下指令:

cd /opt/mongodb-4.4.4/bin
./mongod --config=/opt/mongodb/conf/mongo-27017.conf
./mongod --config=/opt/mongodb/conf/mongo-27018.conf
./mongod --config=/opt/mongodb/conf/mongo-27019.conf
./mongod --config=/opt/mongodb/conf/mongo-27020.conf

执行完以后,如果看到如下提示,就证明启动成功了。
在这里插入图片描述

进行集群配置

接着,我们执行mongo命令行程序,进去配置集群。

# 此处无需指定端口和主机名,因为配置中默认就是以27017作为primary节点,默认也是进入这个节点。
./mongo

进入mongo控制台以后,编写js代码进行集群节点注册和初始化。

var config = {
	"_id":"shard4",
	"protocolVersion":1,
	"members":[
		{"_id":1,"host":"10.20.1.159:27017","priority":10},
		{"_id":2,"host":"10.20.1.159:27018"},
		{"_id":3,"host":"10.20.1.159:27019"},
		{"_id":4,"host":"10.20.1.159:27020","arbiterOnly":true}
	]
}
rs.initiate(config)

当看到下图以后,就证明已配置成功。
在这里插入图片描述
稍后片后,再输入以下指令查看复制集的配置结果。

rs.status()

当看到下图时就证明已经注册成功。
在这里插入图片描述
按照上述的过程,将另外3台复制集环境配完,至此,我们就完成了4个分片节点的配置,下面要开始进行 配置中心集群 的配置。配置的大体上和 复制集集群 流程一致,只是启动的时候配置文件加载和注册配置中心集群的IP有差异,其他的都一致。下文只列出差异配置,其他地方都参考上述的操作。

进行配置中心节点配置

在4台机器上分别执行下列语句启动 配置中心 实例,请在你期望作为主节点的机器上运行./mongo,并执行下列配置。
注意:配置中心集群你可以选择配置单例或者任意台,不一定要和我一样每台上都配置一个节点。

# 启动服务
./mongod --config=/opt/mongodb/conf/mongo-config.conf
# 进入mongo命令行
./mongo --port 27010

之后,执行如下配置:

var config = {
	"_id":"configsvr",
	"members":[
		{"_id":1,"host":"10.20.1.156:27010","priority":10},
		{"_id":2,"host":"10.20.1.157:27010"},
		{"_id":3,"host":"10.20.1.158:27010"},
		{"_id":4,"host":"10.20.1.159:27010"}
	]
}
rs.initiate(config)

至此配置中心就配置结束了。下面开始进行路由配置,路由的配置和其他的有所不同,具体如下:

# mongo-router.conf

systemLog:
  destination: file
  logAppend: true
  path: /opt/mongodb/logs/router.log

net:
  port: 27000
  bindIp: 0.0.0.0

processManagement:
  timeZoneInfo: /usr/share/zoneinfo
  fork: true

security:
  keyFile: /opt/mongodb/sharding-sync-key.file

sharding:
  # 配置中心地址,你有几台就配置几台
  configDB: configsvr/10.20.1.156:27010,10.20.1.157:27010,10.20.1.158:27010,10.20.1.159:27010

进行路由器节点配置

下面可以启动路由了,启动路由使用的不是mongod,而是mongos,进入bin目录以后执行:

# 启动路由后台进程
./mongos --config=/opt/mongodb/conf/mongo-router.conf
# 进入mongo命令行
./mongo --port 27000

等待提示成功以后,下面开始进行分片集群的注册操作。执行下列语句:

sh.addShard("shard1/10.20.1.156:27017,10.20.1.156:27018,10.20.1.156:27019,10.20.1.156:27020");
sh.addShard("shard2/10.20.1.157:27017,10.20.1.157:27018,10.20.1.157:27019,10.20.1.157:27020");
sh.addShard("shard3/10.20.1.158:27017,10.20.1.158:27018,10.20.1.158:27019,10.20.1.158:27020");
sh.addShard("shard4/10.20.1.159:27017,10.20.1.159:27018,10.20.1.159:27019,10.20.1.159:27020");

如果这里有错误,请检查错误信息,一般这里有错的话肯定是前面配置的集群名称和这里不匹配。
添加成功的提示如下:
在这里插入图片描述

分片配置

下面,需要设置启用分片,并配置分片规则。这里只以demo数据库和account表为例,根据账户表的用户名字段进行hash分片:

sh.enableSharding("demo")
// demo库、account文档、name字段,进行hash分片
sh.shardCollection("demo.account", {"name": "hashed"})

在这里插入图片描述

权限配置

至此,分片就配置成功了。下面开始进行权限配置,权限配置可以选择性配置,如果你不想开启权限可以跳过。

read:允许用户读取指定数据库 readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:超级权限(只在admin数据库中可用)

db.createUser({user:"root",pwd:passwordPrompt(),roles:[{role:"root",db:"admin"},{role:"clusterAdmin",db:"admin"}]})
// 根据自己实际情况指定自定义账户需要开启的权限
db.createUser({user:"richie696",pwd:passwordPrompt(),roles:[
{role:"readWrite",db:"demo1"},
{role:"readWrite",db:"demo2"},
{role:"readWrite",db:"demo...N"}
]})

权限配置完以后,可以关闭所有机器上的mongod实例,简单一点的做法

killall mongo
# 如果上述命令执行不了请安装 psmisc 后再执行

然后打开conf目录下的所有配置文件,将其中的

authorization: disabled
修改为
authorization: enabled

启动顺序

然后,重启所有实例,此处需要注意,启动顺序如下:

  1. 启动config配置中心
  2. 启动分片集群服务器
  3. 启动路由服务器

至此,配置已全部结束,我们只需要连接路由服务器的地址就可以操作分片集群。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
MongoDB分片集群是一种用于处理大规模数据的解决方案,它将数据分布在多个服务器上,以实现数据的水平扩展和负载均衡。下面是关于MongoDB分片集群的介绍和演示[^1]: 1. 分片集群架构:MongoDB分片集群由以下组件组成: - Shard:每个Shard是一个独立的MongoDB实例,负责存储部分数据。 - Config Server:Config Server存储了分片集群的元数据,包括数据的分片规则和Chunk的位置信息。 - Mongos:Mongos是客户端与分片集群交互的接口,它将客户端的请求路由到正确的Shard上。 2. 分片策略:MongoDB使用分片键将数据分布到不同的Shard上。分片键是一个用于划分数据的字段,例如根据用户ID进行分片MongoDB提供了多种分片策略,包括范围分片、哈希分片和标签分片。 3. 分片集群的配置和部署:配置一个MongoDB分片集群需要以下步骤: - 部署Shard:在多台服务器上安装和配置MongoDB实例,并将它们作为Shard加入到集群中。 - 部署Config Server:安装和配置Config Server实例,并将它们作为Config Server加入到集群中。 - 配置Mongos:安装和配置Mongos实例,并将它们作为Mongos加入到集群中。 - 配置分片规则:使用MongoDB的命令行工具或驱动程序,配置分片规则和分片键。 4. 演示:以下是一个简单的MongoDB分片集群演示: - 部署3个Shard服务器和2个Config Server服务器。 - 配置Mongos实例并启动。 - 创建一个数据库和集合。 - 配置分片规则,将数据根据分片键进行分片。 - 向集合中插入数据,观察数据如何分布在不同的Shard上。 - 运行查询,观察Mongos如何将查询路由到正确的Shard上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值