生产系统环境:
CentOS7; MongoDB4.2
服务器规划:
生产系统环境:
CentOS7; MongoDB4.2
服务器规划:
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 |
服务器的安装及配置(每台服务器执行相同操作)
- 下载解压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
- 设置环境变量,为了后续方便操作,配置mongodb的环境变量,需要切到root用户下面
vi /etc/profile
# 内容
export MONGODB_HOME=/home/ysdmas/mongo/mongodb
export PATH=$MONGODB_HOME/bin:$PATH
保存后执行:
source /etc/profile
查看mongodb版本信息mongod -v
输出版本信息表明配置环境变量成功,环境配置完成后注意切换回普通账户
- 创建路由、配置、分片等的相关目录与文件
描述 | 命令 |
---|---|
启动配置文件存放的文件夹 | 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台服务器执行相同操作)
- 在/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"}
- 配置复制集
分别启动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说明登录成功
配置分片、副本集 分片服务部署
- 在
/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
- 分别启动对应的分片集
- 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
- 分别将分片配置为复制集
- 分别连接每一个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()
- 为分片复制集群添加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说明登录成功
- 对其他分片按照同样的方式创建root权限用户
路由服务部署 (3台服务器执行相同操作)
- 在
/home/mongodb/conf
目录创建mongos.conf
- 内容如下:
- 启动mongos
- 分别启动配置服务器的mongos服务 (103/104/105)
mongos -f /home/ysdmas/mongo/mongodb/conf/mongos.conf
- 启动分片功能
- 登录任意一台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 |
服务器的安装及配置(每台服务器执行相同操作)
- 下载解压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
- 设置环境变量,为了后续方便操作,配置mongodb的环境变量,需要切到root用户下面
vi /etc/profile
# 内容
export MONGODB_HOME=/home/ysdmas/mongo/mongodb
export PATH=$MONGODB_HOME/bin:$PATH
保存后执行:
source /etc/profile
查看mongodb版本信息mongod -v
输出版本信息表明配置环境变量成功,环境配置完成后注意切换回普通账户
- 创建路由、配置、分片等的相关目录与文件
描述 | 命令 |
---|---|
启动配置文件存放的文件夹 | 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台服务器执行相同操作)
- 在/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"}
- 配置复制集
分别启动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说明登录成功
配置分片、副本集 分片服务部署
- 在
/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
- 分别启动对应的分片集
- 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
- 分别将分片配置为复制集
- 分别连接每一个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()
- 为分片复制集群添加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说明登录成功
- 对其他分片按照同样的方式创建root权限用户
路由服务部署 (3台服务器执行相同操作)
- 在
/home/mongodb/conf
目录创建mongos.conf
- 内容如下:
- 启动mongos
- 分别启动配置服务器的mongos服务 (103/104/105)
mongos -f /home/ysdmas/mongo/mongodb/conf/mongos.conf
- 启动分片功能
- 登录任意一台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路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效
- 由于安装完成之后没有开启安全认证,所有在登录时,是不验证需要开启安全认证
- 注意,在开启安全认证之前,一定要提前创建好登录的用户,否则一旦开认证就无法登录