MongoDB分片集群搭建

MongoDB分片集群包含以下组件:

 1、分片(存储):每个分片包含分片数据的子集。每个分片都可以部署为副本集

2、mongos(路由):mongos充当查询路由器,在客户端应用程序和分片集群之间提供接口。

3、config servers(“调度”的配置):配置服务器存储群集的元数据和配置设置。从mongoDB3.4开始必须将配置服务器部署为副本集(CSRS)

下图描述了分片集群中组件的交互:

MongoDB分片集群搭建_第1张图片

按照以下结构搭建分片集群 (192.168.1.118主机上,端口号不同):

1个 路由服务(2个mongs服务)+1个配置服务(3个mongod服务)+2个分片服务(共6个mongod服务)

MongoDB分片集群搭建_第2张图片

 

一、搭建分片1服务

1、创建配置文件

shard01_27016.yaml

systemLog:
   #MongoDB发送所有日志输出的目标指定为文件
   destination: file
   #指定日志文件路径
   path: "/usr/local/mongodb4/datasource/log/myshardrs01_27016.log"
   logAppend: true


storage:
   #存储数据库的数据目录   
   dbPath: "/usr/local/mongodb4/datasource/data/db/myshardrs01_27016"
   #启用或禁用持久性日志以确保数据文件保持有效和恢复
   journal:
      enabled: true


processManagement:
   #支持后台启动
   fork: true
   #记录进程id
   pidFilePath: "/usr/local/mongodb4/datasource/pid/myshardrs01_27016.pid"

net:
   #设置绑定ip地址
   bindIp: 192.168.1.118
   #绑定端口号
   port: 27016

setParameter:
   #认证设置
   enableLocalhostAuthBypass: false

#副本集名称
replication:
   replSetName: "myshardrs01"

sharding:
 #指定分片角色
 clusterRole: shardsvr

shard01_27017.yaml

systemLog:
   #MongoDB发送所有日志输出的目标指定为文件
   destination: file
   #指定日志文件路径
   path: "/usr/local/mongodb4/datasource/log/myshardrs01_27017.log"
   logAppend: true


storage:
   #存储数据库的数据目录   
   dbPath: "/usr/local/mongodb4/datasource/data/db/myshardrs01_27017"
   #启用或禁用持久性日志以确保数据文件保持有效和恢复
   journal:
      enabled: true


processManagement:
   #支持后台启动
   fork: true
   #记录进程id
   pidFilePath: "/usr/local/mongodb4/datasource/pid/myshardrs01_27017.pid"

net:
   #设置绑定ip地址
   bindIp: 192.168.1.118
   #绑定端口号
   port: 27017

setParameter:
   #认证设置
   enableLocalhostAuthBypass: false

#副本集名称
replication:
   replSetName: "myshardrs01"

sharding:
 #分片角色
 clusterRole: shardsvr

shard01_27018.yaml

systemLog:
   #MongoDB发送所有日志输出的目标指定为文件
   destination: file
   #指定日志文件路径
   path: "/usr/local/mongodb4/datasource/log/myshardrs01_27018.log"
   logAppend: true


storage:
   #存储数据库的数据目录   
   dbPath: "/usr/local/mongodb4/datasource/data/db/myshardrs01_27018"
   #启用或禁用持久性日志以确保数据文件保持有效和恢复
   journal:
      enabled: true


processManagement:
   #支持后台启动
   fork: true
   #记录进程id
   pidFilePath: "/usr/local/mongodb4/datasource/pid/myshardrs01_27018.pid"

net:
   #设置绑定ip地址
   bindIp: 192.168.1.118
   #绑定端口号
   port: 27018

setParameter:
   #认证设置
   enableLocalhostAuthBypass: false

#副本集名称
replication:
   replSetName: "myshardrs01"

sharding:
 #分片角色
 clusterRole: shardsvr

2、启动mongod服务

新建日志和数据库文件夹

mkdir -p /usr/local/mongodb4/datasource/pid

mkdir -p /usr/local/mongodb4/datasource/log
mkdir -p /usr/local/mongodb4/datasource/data/db/myshardrs01_27016

mkdir -p /usr/local/mongodb4/datasource/data/db/myshardrs01_27017

mkdir -p /usr/local/mongodb4/datasource/data/db/myshardrs01_27018

启动服务

mongod -f  shard01_27016.yaml

mongod -f  shard01_27017.yaml

mongod -f  shard01_27018.yaml

3、选择主节点进入:

mongo 192.168.1.118:27016

4、初始化副本集

rs.initiate()

5、添加备节点

rs.add("192.168.1.118:27017")

6、添加仲裁节点

rs.add("192.168.1.118:27018",true) 或者rs.addArb("192.168.1.118:27018")
7、查看服务状态

rs.config()

MongoDB分片集群搭建_第3张图片

二、搭建分片2服务

shard01_27116.yaml

systemLog:
   #MongoDB发送所有日志输出的目标指定为文件
   destination: file
   #指定日志文件路径
   path: "/usr/local/mongodb4/datasource/log/myshardrs02_27116.log"
   logAppend: true


storage:
   #存储数据库的数据目录   
   dbPath: "/usr/local/mongodb4/datasource/data/db/myshardrs02_27116"
   #启用或禁用持久性日志以确保数据文件保持有效和恢复
   journal:
      enabled: true


processManagement:
   #支持后台启动
   fork: true
   #记录进程id
   pidFilePath: "/usr/local/mongodb4/datasource/pid/myshardrs02_27116.pid"

net:
   #设置绑定ip地址
   bindIp: 192.168.1.118
   #绑定端口号
   port: 27116

setParameter:
   #认证设置
   enableLocalhostAuthBypass: false

#副本集名称
replication:
   replSetName: "myshardrs02"

sharding:
 #分片角色
 clusterRole: shardsvr

shard01_27117.yaml

systemLog:
   #MongoDB发送所有日志输出的目标指定为文件
   destination: file
   #指定日志文件路径
   path: "/usr/local/mongodb4/datasource/log/myshardrs02_27117.log"
   logAppend: true


storage:
   #存储数据库的数据目录   
   dbPath: "/usr/local/mongodb4/datasource/data/db/myshardrs02_27117"
   #启用或禁用持久性日志以确保数据文件保持有效和恢复
   journal:
      enabled: true


processManagement:
   #支持后台启动
   fork: true
   #记录进程id
   pidFilePath: "/usr/local/mongodb4/datasource/pid/myshardrs02_27117.pid"

net:
   #设置绑定ip地址
   bindIp: 192.168.1.118
   #绑定端口号
   port: 27117

setParameter:
   #认证设置
   enableLocalhostAuthBypass: false

#副本集名称
replication:
   replSetName: "myshardrs02"

sharding:
 #分片角色
 clusterRole: shardsvr

shard01_27118.yaml

systemLog:
   #MongoDB发送所有日志输出的目标指定为文件
   destination: file
   #指定日志文件路径
   path: "/usr/local/mongodb4/datasource/log/myshardrs02_27118.log"
   logAppend: true


storage:
   #存储数据库的数据目录   
   dbPath: "/usr/local/mongodb4/datasource/data/db/myshardrs02_27118"
   #启用或禁用持久性日志以确保数据文件保持有效和恢复
   journal:
      enabled: true


processManagement:
   #支持后台启动
   fork: true
   #记录进程id
   pidFilePath: "/usr/local/mongodb4/datasource/pid/myshardrs02_27118.pid"

net:
   #设置绑定ip地址
   bindIp: 192.168.1.118
   #绑定端口号
   port: 27118

setParameter:
   #认证设置
   enableLocalhostAuthBypass: false

#副本集名称
replication:
   replSetName: "myshardrs02"

sharding:
 #分片角色
 clusterRole: shardsvr

2、启动mongod服务

新建日志和数据库文件夹

mkdir -p /usr/local/mongodb4/datasource/pid

mkdir -p /usr/local/mongodb4/datasource/log
mkdir -p /usr/local/mongodb4/datasource/data/db/myshardrs02_27016

mkdir -p /usr/local/mongodb4/datasource/data/db/myshardrs02_27017

mkdir -p /usr/local/mongodb4/datasource/data/db/myshardrs02_27018

启动服务

mongod -f  shard02_27116.yaml

mongod -f  shard02_27117.yaml

mongod -f  shard02_27118.yaml

3、选择主节点进入:

mongo 192.168.1.118:27116

4、初始化副本集

rs.initiate()

5、添加备节点

rs.add("192.168.1.118:27117")

6、添加仲裁节点

rs.add("192.168.1.118:27118",true) 或者rs.addArb("192.168.1.118:27118")
7、查看服务状态

rs.config()

MongoDB分片集群搭建_第4张图片

三、搭建配置服务

configserver27216.yaml

systemLog:
   #MongoDB发送所有日志输出的目标指定为文件
   destination: file
   #指定日志文件路径
   path: "/usr/local/mongodb4/datasource/log/myconfigrs_27216.log"
   logAppend: true


storage:
   #存储数据库的数据目录   
   dbPath: "/usr/local/mongodb4/datasource/data/db/myconfigrs_27216"
   #启用或禁用持久性日志以确保数据文件保持有效和恢复
   journal:
      enabled: true


processManagement:
   #支持后台启动
   fork: true
   #记录进程id
   pidFilePath: "/usr/local/mongodb4/datasource/pid/myconfigrs_27216.pid"

net:
   #设置绑定ip地址
   bindIp: 192.168.1.118
   #绑定端口号
   port: 27216

setParameter:
   #认证设置
   enableLocalhostAuthBypass: false

#副本集名称
replication:
   replSetName: "myconfigrs"

sharding:
 #分片角色
 clusterRole: configsvr

 configserver27217.yaml  

systemLog:
   #MongoDB发送所有日志输出的目标指定为文件
   destination: file
   #指定日志文件路径
   path: "/usr/local/mongodb4/datasource/log/myconfigrs_27217.log"
   logAppend: true


storage:
   #存储数据库的数据目录   
   dbPath: "/usr/local/mongodb4/datasource/data/db/myconfigrs_27217"
   #启用或禁用持久性日志以确保数据文件保持有效和恢复
   journal:
      enabled: true


processManagement:
   #支持后台启动
   fork: true
   #记录进程id
   pidFilePath: "/usr/local/mongodb4/datasource/pid/myconfigrs_27217.pid"

net:
   #设置绑定ip地址
   bindIp: 192.168.1.118
   #绑定端口号
   port: 27217

setParameter:
   #认证设置
   enableLocalhostAuthBypass: false

#副本集名称
replication:
   replSetName: "myconfigrs"

sharding:
 #分片角色
 clusterRole: configsvr

configserver27218.yaml

systemLog:
   #MongoDB发送所有日志输出的目标指定为文件
   destination: file
   #指定日志文件路径
   path: "/usr/local/mongodb4/datasource/log/myconfigrs_27218.log"
   logAppend: true


storage:
   #存储数据库的数据目录   
   dbPath: "/usr/local/mongodb4/datasource/data/db/myconfigrs_27218"
   #启用或禁用持久性日志以确保数据文件保持有效和恢复
   journal:
      enabled: true


processManagement:
   #支持后台启动
   fork: true
   #记录进程id
   pidFilePath: "/usr/local/mongodb4/datasource/pid/myconfigrs_27218.pid"

net:
   #设置绑定ip地址
   bindIp: 192.168.1.118
   #绑定端口号
   port: 27218

setParameter:
   #认证设置
   enableLocalhostAuthBypass: false

#副本集名称
replication:
   replSetName: "myconfigrs"

sharding:
 #分片角色
 clusterRole: configsvr

2、启动mongod服务

新建日志和数据库文件夹

mkdir -p /usr/local/mongodb4/datasource/pid

mkdir -p /usr/local/mongodb4/datasource/log


mkdir -p /usr/local/mongodb4/datasource/data/db/myconfigrs_27216

mkdir -p /usr/local/mongodb4/datasource/data/db/myconfigrs_27217

mkdir -p /usr/local/mongodb4/datasource/data/db/myconfigrs_27218

启动服务

mongod -f  configserver27216.yaml

mongod -f  configserver27217.yaml

mongod -f  configserver27218.yaml

3、选择主节点进入:

mongo 192.168.1.118:27216

4、初始化副本集

rs.initiate()

5、添加备节点

rs.add("192.168.1.118:27217")

rs.add("192.168.1.118:27218")
6、查看服务状态

rs.config()

MongoDB分片集群搭建_第5张图片

四、搭建路由服务

 router27316.yaml

systemLog:
   #MongoDB发送所有日志输出的目标指定为文件
   destination: file
   #指定日志文件路径
   path: "/usr/local/mongodb4/datasource/log/router_27316.log"
   logAppend: true


processManagement:
   #支持后台启动
   fork: true
   #记录进程id
   pidFilePath: "/usr/local/mongodb4/datasource/pid/router_27316.pid"

net:
   #设置绑定ip地址
   bindIp: 192.168.1.118
   #绑定端口号
   port: 27316

setParameter:
   #认证设置
   enableLocalhostAuthBypass: false

sharding:
 #设置配置服务的副本集名称和ip端口
 configDB: myconfigrs/192.168.1.118:27216,192.168.1.118:27217,192.168.1.118:27218

 router27317.yaml

systemLog:
   #MongoDB发送所有日志输出的目标指定为文件
   destination: file
   #指定日志文件路径
   path: "/usr/local/mongodb4/datasource/log/router_27317.log"
   logAppend: true


processManagement:
   #支持后台启动
   fork: true
   #记录进程id
   pidFilePath: "/usr/local/mongodb4/datasource/pid/router_27317.pid"

net:
   #设置绑定ip地址
   bindIp: 192.168.1.118
   #绑定端口号
   port: 27317

setParameter:
   #认证设置
   enableLocalhostAuthBypass: false

sharding:
 #指定配置集群的副本集名称和IP地址端口
 configDB: myconfigrs/192.168.1.118:27216,192.168.1.118:27217,192.168.1.118:27218

 

2、启动mongos服务

创建日志保持路径

mkdir -p /usr/local/mongodb4/datasource/pid

mkdir -p /usr/local/mongodb4/datasource/log

启动服务

mongos -f   router27316.yaml

mongos -f   router27317.yaml

3、进入client端

mongo 192.168.1.118:27316

4、添加分片

sh.addShard("myshardrs01/192.168.1.118:27016,192.168.1.118:27017,192.168.1.118:27018")

sh.addShard("myshardrs02/192.168.1.118:27116,192.168.1.118:27117,192.168.1.118:27118")

注意:如果添加分片失败,需要手动移除分片,检查添加分片的信息正确性后,再次添加分片。

移除分片:

use admin

db.runCommand({removeShard:"myshards02"})

如果只剩下最后一个shard,是无法删除的,移除时会自动转移分片数据,需要一个时间过程。完成后,再次执行删除分片命令才能真正删除。

5、查看状态

sh.status()

MongoDB分片集群搭建_第6张图片

6、此时分片还是不可以使用的,必须开启分片功能才可以。sh.enableSharding("库名")、sh.shardCollection("库名.集合名",策略)。

分片规则有两个,一个是哈希策略(hashed)另一个是范围策略({"关键字",1})

 

 

 

 

 

你可能感兴趣的:(数据库)