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分布式集群就搭建完毕

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容