MongoDB分片集群部署

生产系统环境:

CentOS7; MongoDB4.2

服务器规划:

生产系统环境:

CentOS7; MongoDB4.2

服务器规划:

mongoDB服务器规划.jpg
103 104 105 106 107 108
mongos mongos mongos config config config
shard1 shard2 shard3 shard4 shard5 shard6
shard6 shard1 shard2 shard3 shard4 shard5
shard5 shard6 shard1 shard2 shard3 shard4

端口分配:

以下是您提供的端口分配的Markdown表格:

服务 端口
mongos 27017
config 27018
shard1 27001
shard2 27002
shard3 27003
shard4 27004
shard5 27005
shard6 27006

服务器的安装及配置(每台服务器执行相同操作)

  1. 下载解压MongoDB,上传文件包到指定服务器,解压到/home/ysdmas/mongo,
#解压
tar -xzvf mongodb-linux-x86_64-enterprise-rhel70-4.2.2  

#改名
mv mongodb-linux-x86_64-enterprise-rhel70-4.2.2 mongodb
  1. 设置环境变量,为了后续方便操作,配置mongodb的环境变量,需要切到root用户下面
vi /etc/profile  

# 内容
export MONGODB_HOME=/home/ysdmas/mongo/mongodb  
export PATH=$MONGODB_HOME/bin:$PATH

保存后执行:

source /etc/profile

查看mongodb版本信息mongod -v 输出版本信息表明配置环境变量成功,环境配置完成后注意切换回普通账户

  1. 创建路由、配置、分片等的相关目录与文件
描述 命令
启动配置文件存放的文件夹 mkdir -p /home/ysdmas/mongo/mongodb/conf
所有日志存放目录 mkdir -p /home/ysdmas/mongo/mongodb/logs
配置服务数据存放目录 mkdir -p /home/ysdmas/mongo/mongodb/data/config
分片1服务数据存放目录 mkdir -p /home/ysdmas/mongo/mongodb/data/shard1
分片2服务数据存放目录 mkdir -p /home/ysdmas/mongo/mongodb/data/shard2
分片3服务数据存放目录 mkdir -p /home/ysdmas/mongo/mongodb/data/shard3
分片4服务数据存放目录 mkdir -p /home/ysdmas/mongo/mongodb/data/shard4
分片5服务数据存放目录 mkdir -p /home/ysdmas/mongo/mongodb/data/shard5
分片6服务数据存放目录 mkdir -p /home/ysdmas/mongo/mongodb/data/shard6
配置服务日志存放文件 touch /home/ysdmas/mongo/mongodb/logs/config.log
路由服务日志存放文件 touch /home/ysdmas/mongo/mongodb/logs/mongos.log
分片1服务日志存放文件 touch /home/ysdmas/mongo/mongodb/logs/shard1.log
分片2服务日志存放文件 touch /home/ysdmas/mongo/mongodb/logs/shard2.log
分片3服务日志存放文件 touch /home/ysdmas/mongo/mongodb/logs/shard3.log
分片4服务日志存放文件 touch /home/ysdmas/mongo/mongodb/logs/shard4.log
分片5服务日志存放文件 touch /home/ysdmas/mongo/mongodb/logs/shard5.log
分片6服务日志存放文件 touch /home/ysdmas/mongo/mongodb/logs/shard6.log

集群配置

配置服务器部署(3台服务器执行相同操作)

  1. 在/home/ysdmas/mongo/mongodb/conf目录创建config.conf:
config = {cfgsvr: true, dbpath: "/home/ysdmas/mongo/mongodb/data/config",logpath: "/home/ysdmas/mongo/mongodb/logs/config.log",replSet: "configs"}
  1. 配置复制集
    分别启动confing(106/107/108)三台服务器的配置服务:
mongod -f /home/ysdmas/mongo/mongodb/conf/config.conf

登录任意一台配置服务器,初始化配置副本集:

#连接
mongo 10.210.116.106:27018

切换数据库:
use admin

初始化复制集:
rs.initiate({_id:"configs",members:[
{_id:0,host:"10.210.116.106:27018"},
{_id:1,host:"10.210.116.107:27018"},
{_id:2,host:"10.210.116.108:27018"}]})

其中_id:"configs"的configs是上面config.conf配置文件里的复制集名称,把三台服务器的配置服务组成复制集。
查看状态:

rs.status()

等几十秒左右,执行上面的命令查看状态,三台机器的配置服务就已形成复制集,其中1台为PRIMARY,其他2台为SECONDARY。

为confing集群添加root用户

注意:1.这里必须要连接到primary节点下创建用户,在secondary节点上创建用户会报错(笔者亲测);

2.连接上primary节点后,一定要切换到admin数据库下创建root用户:

#连接
mongo 10.210.116.106:27018

#使用admin
use admin;

#创建用户
db.createUser({user: "root",pwd: "root",roles: [ { role: "root",db: "admin" }]});

待安全认证开启后连接登陆:

use admin
db.auth('root','root') #登录 返回1说明登录成功

配置分片、副本集 分片服务部署

  1. /home/ysdmas/mongo/mongodb/conf 目录创建对应的文件,内容如下:
  • 103: shard1.conf, shard2.conf, shard3.conf, mongos.conf
  • 104: shard2.conf, shard3.conf, shard4.conf, mongos.conf
  • 105: shard3.conf, shard4.conf, shard5.conf, mongos.conf
  • 106: shard4.conf, shard5.conf, shard6.conf, config.conf
  • 107: shard5.conf, shard6.conf, shard1.conf, config.conf
  • 108: shard1.conf, shard2.conf, shard6.conf, config.conf
  1. 分别启动对应的分片集
  • 103,104,105 执行
mongod -f /home/ysdmas/mongo/mongodb/conf/shard1.conf
  • 104,105,106 执行
mongod -f /home/ysdmas/mongo/mongodb/conf/shard2.conf
  • 105,106,107 执行
mongod -f /home/ysdmas/mongo/mongodb/conf/shard3.conf
  • 106,107,108 执行
mongod -f /home/ysdmas/mongo/mongodb/conf/shard4.conf
  • 103,107,108 执行
mongod -f /home/ysdmas/mongo/mongodb/conf/shard5.conf
  • 103,104,108 执行
mongod -f /home/ysdmas/mongo/mongodb/conf/shard6.conf
  1. 分别将分片配置为复制集
  • 分别连接每一个shard的mongo,只需在任意一台机器执行即可
# shard1
mongo 10.210.116.103:27001
use admin
rs.initiate({_id:"shard1",members:[
{_id:0,host:"10.210.116.103:27001"},
{_id:1,host:"10.210.116.104:27001"},
{_id:2,host:"10.210.116.105:27001"}]})
  • 以此类推,对所有分片执行相同操作
  • 查看复制集状态
rs.status()
  1. 为分片复制集群添加root用户
  • 同样要连接到primary节点下创建用户,并切换到admin数据库下创建root用户
mongo 10.210.116.103:27001  # 连接到mongod服务器,103一定是primary
use admin  # 切换到admin数据库
db.createUser({user: "root", pwd: "root", roles: [{role: "root", db: "admin"}]})
  • 待安全认证开启后连接登录
use admin
db.auth('root', 'root')  # 登录 返回1说明登录成功
  1. 对其他分片按照同样的方式创建root权限用户

路由服务部署 (3台服务器执行相同操作)

  1. /home/mongodb/conf 目录创建 mongos.conf
  • 内容如下:
  1. 启动mongos
  • 分别启动配置服务器的mongos服务 (103/104/105)
mongos -f /home/ysdmas/mongo/mongodb/conf/mongos.conf
  1. 启动分片功能
  • 登录任意一台mongos
mongo 10.210.116.103:27017
  • 切换数据库 (admin是数据库系统管理表)
use admin
  • 添加分片,只需在一台机器执行即可
sh.addShard("shard1/10.210.116.103:27001,10.210.116.104:27001,10.210.116.105:27001")
sh.addShard("shard2/10.210.116.104:27002,10.210.116.105:27002,10.210.116.106:27002")
sh.addShard("shard3/10.210.116.105:27003,10.210.116.106:27003,10.210.116.107:27003")
sh.addShard("shard4/10.210.116.106:27004,10.210.116.107:27004,10.210.116.108:27004")
sh.addShard("shard5/10.210.116.107:27005,10.210.116.108:27005,10.210.116.103:27005")
sh.addShard("shard6/10.210.116.108:27006,10.210.116.103:27006,10.210.116.104:27006")
  • 查看集群状态
sh.status()
  • 这样MongoDB的集群搭建就已经完成了
  • 但应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效
  • 由于安装完成之后没有开启安全认证,所有在登录时,是不验证需要开启安全认证
  • 注意,在开启安全认证之前,一定要提前创建好登录的用户,否则一旦开认证就无法登录

至此,MongoDB分布式集群就搭建完毕

103 104 105 106 107 108
mongos mongos mongos config config config
shard1 shard2 shard3 shard4 shard5 shard6
shard6 shard1 shard2 shard3 shard4 shard5
shard5 shard6 shard1 shard2 shard3 shard4

端口分配:

以下是您提供的端口分配的Markdown表格:

服务 端口
mongos 27017
config 27018
shard1 27001
shard2 27002
shard3 27003
shard4 27004
shard5 27005
shard6 27006

服务器的安装及配置(每台服务器执行相同操作)

  1. 下载解压MongoDB,上传文件包到指定服务器,解压到/home/ysdmas/mongo,
#解压
tar -xzvf mongodb-linux-x86_64-enterprise-rhel70-4.2.2  

#改名
mv mongodb-linux-x86_64-enterprise-rhel70-4.2.2 mongodb
  1. 设置环境变量,为了后续方便操作,配置mongodb的环境变量,需要切到root用户下面
vi /etc/profile  

# 内容
export MONGODB_HOME=/home/ysdmas/mongo/mongodb  
export PATH=$MONGODB_HOME/bin:$PATH

保存后执行:

source /etc/profile

查看mongodb版本信息mongod -v 输出版本信息表明配置环境变量成功,环境配置完成后注意切换回普通账户

  1. 创建路由、配置、分片等的相关目录与文件
描述 命令
启动配置文件存放的文件夹 mkdir -p /home/ysdmas/mongo/mongodb/conf
所有日志存放目录 mkdir -p /home/ysdmas/mongo/mongodb/logs
配置服务数据存放目录 mkdir -p /home/ysdmas/mongo/mongodb/data/config
分片1服务数据存放目录 mkdir -p /home/ysdmas/mongo/mongodb/data/shard1
分片2服务数据存放目录 mkdir -p /home/ysdmas/mongo/mongodb/data/shard2
分片3服务数据存放目录 mkdir -p /home/ysdmas/mongo/mongodb/data/shard3
分片4服务数据存放目录 mkdir -p /home/ysdmas/mongo/mongodb/data/shard4
分片5服务数据存放目录 mkdir -p /home/ysdmas/mongo/mongodb/data/shard5
分片6服务数据存放目录 mkdir -p /home/ysdmas/mongo/mongodb/data/shard6
配置服务日志存放文件 touch /home/ysdmas/mongo/mongodb/logs/config.log
路由服务日志存放文件 touch /home/ysdmas/mongo/mongodb/logs/mongos.log
分片1服务日志存放文件 touch /home/ysdmas/mongo/mongodb/logs/shard1.log
分片2服务日志存放文件 touch /home/ysdmas/mongo/mongodb/logs/shard2.log
分片3服务日志存放文件 touch /home/ysdmas/mongo/mongodb/logs/shard3.log
分片4服务日志存放文件 touch /home/ysdmas/mongo/mongodb/logs/shard4.log
分片5服务日志存放文件 touch /home/ysdmas/mongo/mongodb/logs/shard5.log
分片6服务日志存放文件 touch /home/ysdmas/mongo/mongodb/logs/shard6.log

集群配置

配置服务器部署(3台服务器执行相同操作)

  1. 在/home/ysdmas/mongo/mongodb/conf目录创建config.conf:
config = {cfgsvr: true, dbpath: "/home/ysdmas/mongo/mongodb/data/config",logpath: "/home/ysdmas/mongo/mongodb/logs/config.log",replSet: "configs"}
  1. 配置复制集
    分别启动confing(106/107/108)三台服务器的配置服务:
mongod -f /home/ysdmas/mongo/mongodb/conf/config.conf

登录任意一台配置服务器,初始化配置副本集:

#连接
mongo 10.210.116.106:27018

切换数据库:
use admin

初始化复制集:
rs.initiate({_id:"configs",members:[
{_id:0,host:"10.210.116.106:27018"},
{_id:1,host:"10.210.116.107:27018"},
{_id:2,host:"10.210.116.108:27018"}]})

其中_id:"configs"的configs是上面config.conf配置文件里的复制集名称,把三台服务器的配置服务组成复制集。
查看状态:

rs.status()

等几十秒左右,执行上面的命令查看状态,三台机器的配置服务就已形成复制集,其中1台为PRIMARY,其他2台为SECONDARY。

为confing集群添加root用户

注意:1.这里必须要连接到primary节点下创建用户,在secondary节点上创建用户会报错(笔者亲测);

2.连接上primary节点后,一定要切换到admin数据库下创建root用户:

#连接
mongo 10.210.116.106:27018

#使用admin
use admin;

#创建用户
db.createUser({user: "root",pwd: "root",roles: [ { role: "root",db: "admin" }]});

待安全认证开启后连接登陆:

use admin
db.auth('root','root') #登录 返回1说明登录成功

配置分片、副本集 分片服务部署

  1. /home/ysdmas/mongo/mongodb/conf 目录创建对应的文件,内容如下:
  • 103: shard1.conf, shard2.conf, shard3.conf, mongos.conf
  • 104: shard2.conf, shard3.conf, shard4.conf, mongos.conf
  • 105: shard3.conf, shard4.conf, shard5.conf, mongos.conf
  • 106: shard4.conf, shard5.conf, shard6.conf, config.conf
  • 107: shard5.conf, shard6.conf, shard1.conf, config.conf
  • 108: shard1.conf, shard2.conf, shard6.conf, config.conf
  1. 分别启动对应的分片集
  • 103,104,105 执行
mongod -f /home/ysdmas/mongo/mongodb/conf/shard1.conf
  • 104,105,106 执行
mongod -f /home/ysdmas/mongo/mongodb/conf/shard2.conf
  • 105,106,107 执行
mongod -f /home/ysdmas/mongo/mongodb/conf/shard3.conf
  • 106,107,108 执行
mongod -f /home/ysdmas/mongo/mongodb/conf/shard4.conf
  • 103,107,108 执行
mongod -f /home/ysdmas/mongo/mongodb/conf/shard5.conf
  • 103,104,108 执行
mongod -f /home/ysdmas/mongo/mongodb/conf/shard6.conf
  1. 分别将分片配置为复制集
  • 分别连接每一个shard的mongo,只需在任意一台机器执行即可
# shard1
mongo 10.210.116.103:27001
use admin
rs.initiate({_id:"shard1",members:[
{_id:0,host:"10.210.116.103:27001"},
{_id:1,host:"10.210.116.104:27001"},
{_id:2,host:"10.210.116.105:27001"}]})
  • 以此类推,对所有分片执行相同操作
  • 查看复制集状态
rs.status()
  1. 为分片复制集群添加root用户
  • 同样要连接到primary节点下创建用户,并切换到admin数据库下创建root用户
mongo 10.210.116.103:27001  # 连接到mongod服务器,103一定是primary
use admin  # 切换到admin数据库
db.createUser({user: "root", pwd: "root", roles: [{role: "root", db: "admin"}]})
  • 待安全认证开启后连接登录
use admin
db.auth('root', 'root')  # 登录 返回1说明登录成功
  1. 对其他分片按照同样的方式创建root权限用户

路由服务部署 (3台服务器执行相同操作)

  1. /home/mongodb/conf 目录创建 mongos.conf
  • 内容如下:
  1. 启动mongos
  • 分别启动配置服务器的mongos服务 (103/104/105)
mongos -f /home/ysdmas/mongo/mongodb/conf/mongos.conf
  1. 启动分片功能
  • 登录任意一台mongos
mongo 10.210.116.103:27017
  • 切换数据库 (admin是数据库系统管理表)
use admin
  • 添加分片,只需在一台机器执行即可
sh.addShard("shard1/10.210.116.103:27001,10.210.116.104:27001,10.210.116.105:27001")
sh.addShard("shard2/10.210.116.104:27002,10.210.116.105:27002,10.210.116.106:27002")
sh.addShard("shard3/10.210.116.105:27003,10.210.116.106:27003,10.210.116.107:27003")
sh.addShard("shard4/10.210.116.106:27004,10.210.116.107:27004,10.210.116.108:27004")
sh.addShard("shard5/10.210.116.107:27005,10.210.116.108:27005,10.210.116.103:27005")
sh.addShard("shard6/10.210.116.108:27006,10.210.116.103:27006,10.210.116.104:27006")
  • 查看集群状态
sh.status()
  • 这样MongoDB的集群搭建就已经完成了
  • 但应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效
  • 由于安装完成之后没有开启安全认证,所有在登录时,是不验证需要开启安全认证
  • 注意,在开启安全认证之前,一定要提前创建好登录的用户,否则一旦开认证就无法登录

至此,MongoDB分布式集群就搭建完毕

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容