MongoDB 4.4.4分片集群配置全流程
- MongoDB安装
- 基本配置
- 初始化配置
- 配置集群
- 生成分片集群密钥
- 运行分片实例
- 进行集群配置
- 进行配置中心节点配置
- 进行路由器节点配置
- 分片配置
- 权限配置
- 启动顺序
MongoDB安装
配置集群之前,我们需要先找到需要的程序包,下载地址:
由于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
启动顺序
然后,重启所有实例,此处需要注意,启动顺序如下:
- 启动config配置中心
- 启动分片集群服务器
- 启动路由服务器
至此,配置已全部结束,我们只需要连接路由服务器的地址就可以操作分片集群。