本笔记通过黑马视频学习和记录。
副本集
基本知识
实现备份数据的高可用。
两种类型(主节点、从节点)
- 主节点:操作的主要节点,可以实现读和写功能。
- 从节点:数据备份,主要是实现数据冗余、和读的功能。
三种身份
- 主要成员—主节点
- 副本成员 — 从主节点进行复制操作,只读属性。
- 仲裁者 — 不存储数据,只有投票作用
搭建副本集
我们本机搭建,通过端口号进行区分。
主节点:27017;副本集:27018;仲裁节点:27019
三个对外统一同名为myrs。
先配置不同的节点。
第一步:创建主节点
建立数据和日志目录:
#主节点
mkdir -p /mongodb/replica_sets/myrs_27017/log \ & mkdir -p /mongodb/replica_sets/myrs_27017/data/db
------------------------------------------------------------
# 新建conf文件
vim /mongodb/replica_sets/myrs_27017/mongod.conf
配置如下
# 配置主节点的信息
systemLog:
#MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/mongodb/replica_sets/myrs_27017/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
dbPath: "/mongodb/replica_sets/myrs_27017/data/db"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/mongodb/replica_sets/myrs_27017/log/mongod.pid"
net:
#服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip #bindIpAll: true #服务实例绑定的IP
bindIp: localhost,192.168.0.2
#bindIp #绑定的端口
port: 27017
replication:
#副本集的名称
replSetName: myrs
启动项目:
# 这里是用yaml安装,如果是压缩包需要指定mongod的位置。
mongod -f /mongodb/replica_sets/myrs_27017/mongod.conf
第二步:创建副本节点
建立数据和日志目录:
#-----------myrs #副本节点 27018
mkdir -p /mongodb/replica_sets/myrs_27018/log \ & mkdir -p /mongodb/replica_sets/myrs_27018/data/db
------------------------------------------------------------
# 新建conf文件
vim /mongodb/replica_sets/myrs_27018/mongod.conf
配置如下
systemLog:
#MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/mongodb/replica_sets/myrs_27018/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
dbPath: "/mongodb/replica_sets/myrs_27018/data/db"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/mongodb/replica_sets/myrs_27018/log/mongod.pid"
net:
#服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
#bindIpAll: true
#服务实例绑定的IP
bindIp: localhost,192.168.0.2
#bindIp #绑定的端口
port: 27018
replication:
#副本集的名称
replSetName: myrs
启动项目:
# 这里是用yaml安装,如果是压缩包需要指定mongod的位置。
mongod -f /mongodb/replica_sets/myrs_27018/mongod.conf
第三步:创建仲裁节点
建立数据和日志目录:
#-----------myrs #仲裁节点 27019
mkdir -p /mongodb/replica_sets/myrs_27019/log \ & mkdir -p /mongodb/replica_sets/myrs_27019/data/db
------------------------------------------------------------
# 新建conf文件
vim /mongodb/replica_sets/myrs_27019/mongod.conf
配置如下
systemLog:
#MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/mongodb/replica_sets/myrs_27019/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
dbPath: "/mongodb/replica_sets/myrs_27019/data/db"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/mongodb/replica_sets/myrs_27019/log/mongod.pid"
net:
#服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
#bindIpAll: true
#服务实例绑定的IP
bindIp: localhost,192.168.0.2
#bindIp #绑定的端口
port: 27019
replication:
#副本集的名称
replSetName: myrs
启动项目:
# 这里是用yaml安装,如果是压缩包需要指定mongod的位置。
mongod -f /mongodb/replica_sets/myrs_27019/mongod.conf
第四步:初始化配置副本节点
注意这个时候三个节并没有身份页面有联系,下来我们需要配置关系。
# 我们选择27017为我们的主节点
mongo --host=ip号 --port=27017
# 初始化
rs.initiate()
# 查看配置
rs.conf()
# 查看节点的状态
rs.status()
目前只有主节点,下来加入副本节点和仲裁节点。
第五步:添加仲裁节点和副本节点
# 依然在27017的端口里面配置从节点。
rs.add(host, arbiterOnly)
# 使得从节点可以读取 在27018设置从节点读写
rs.slaveOk() / rs.slaveOk(true)
# 从节点不具有读
rs.slaveOk(false)
# 不过要注意 仲裁节点设置slaveOK也不会读取数据。仲裁节点不会同步业务数据的。
同一个副本集的数据会同步的。
参数说明:
parameter | type | description |
---|---|---|
host | string or document | 要添加到副本集的新成员。 指定为字符串或配置文档:1)如果是一个字符串,则需要指定新成员的主机名和可选的端口 |
arbiterOnly | boolean | 可选的。 仅在 值为字符串时适用。 如果为true,则添,默认为false |
添加仲裁节点
rs.addArb(host)
选举原则
再出现问题以后,主节点不可达,就会触发重新选取新的主节点的机制。
选举规则:
- 票数最高,同时投票数达半数以上。
- 满足一时候,选取有最近数据的从节点为主节点。
同时可以通过设置优先级设置投票的偏重(priority)。
# 查看优先级 即 查看配置信息
rs.conf()
副本节点宕机对主节点没影响,副本节点恢复以后回自动同步主节点现有的数据。
主节点宕机以后会触发相应的选举机制。仲裁节点会有一个心跳,10s心跳之后会将从节点选举成为主节点。这时候原先的主节点恢复以后,会自动变为从节点。
如果只有仲裁节点和副本节点都挂了,即只剩主节点了,不能满足副本集的功能,主节点就会变成副本集,使得服务降级。
倘若整个集群中节点死伤过半,服务不可用。注意,这个机制也可以防止脑裂的产生。
springboot连接MongoDB集群
修改主节点改成远程的host(远程云服务器)
var config = rs.config(); config.members[0].host="服务器ip:port";
rs.reconfig(config)
同时设置副本集的名称,即现在区分mongo是通过副本集的名称。
springboot的配置文件需要使用url连接
规则:
mongodb://host1:port,host2:port,host3:port/articledb?connect=replicaSet&slaveOk=true&replicaSet=副本集名字
----------------------------------------------------------------
host1、host2、host3是主机ip/ 数据库名称
# 自动到副本集中选择读写的主机。如果slaveOK是打开的,则实现了读写分离
connect=replicaSe
# 从节点可以读
slaveOk=true
replicaSet=副本集名字
----------------------------------------------------------------
完整的
分片节点
产生原因:业务量大了以后,一个服务器存不下了,就需要对数据进行分片存储。从而使得动态扩展数据库。
包含的组件:分片、路由、配置。
图片来自于黑马教育
搭建顺序:先搭建副本集,在搭建配置,最后搭建路由。
第一套副本集
#-----------myshardrs01
mkdir -p /mongodb/sharded_cluster/myshardrs01_27018/log \ & mkdir -p /mongodb/sharded_cluster/myshardrs01_27018/data/db \ & mkdir -p /mongodb/sharded_cluster/myshardrs01_27118/log \ & mkdir -p /mongodb/sharded_cluster/myshardrs01_27118/data/db \ & mkdir -p /mongodb/sharded_cluster/myshardrs01_27218/log \ & mkdir -p /mongodb/sharded_cluster/myshardrs01_27218/data/db
配置文件:
vim /mongodb/sharded_cluster/myshardrs01_27018/mongod.conf
配置内容
systemLog:
#MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/mongodb/sharded_cluster/myshardrs01_27018/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
dbPath: "/mongodb/sharded_cluster/myshardrs01_27018/data/db"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/mongodb/sharded_cluster/myshardrs01_27018/log/mongod.pid"
net:
#服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
#bindIpAll: true #服务实例绑定的IP 192.168.0.2为局域网ip
bindIp: localhost,192.168.0.2
#bindIp #绑定的端口
port: 27018
replication:
#副本集的名称
replSetName: myshardrs01
sharding:
#分片角色
clusterRole: shardsvr
分片的角色有:
configsvr
:控制shardsvr
:分片副本
第一个副本集第二个
配置文件:
vim /mongodb/sharded_cluster/myshardrs01_27118/mongod.conf
配置内容
systemLog:
#MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/mongodb/sharded_cluster/myshardrs01_27118/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
dbPath: "/mongodb/sharded_cluster/myshardrs01_27118/data/db"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/mongodb/sharded_cluster/myshardrs01_27018/log/mongod.pid"
net:
#服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
#bindIpAll: true #服务实例绑定的IP 192.168.0.2为局域网ip
bindIp: localhost,192.168.0.2
#bindIp #绑定的端口
port: 27118
replication:
#副本集的名称
replSetName: myshardrs01
sharding:
#分片角色
clusterRole: shardsvr
第一个副本集第三个
配置文件:
vim /mongodb/sharded_cluster/myshardrs01_27218/mongod.conf
配置内容
systemLog:
#MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/mongodb/sharded_cluster/myshardrs01_27218/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
dbPath: "/mongodb/sharded_cluster/myshardrs01_27218/data/db"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/mongodb/sharded_cluster/myshardrs01_27218/log/mongod.pid"
net:
#服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
#bindIpAll: true #服务实例绑定的IP 192.168.0.2为局域网ip
bindIp: localhost,192.168.0.2
#bindIp #绑定的端口
port: 27218
replication:
#副本集的名称
replSetName: myshardrs01
sharding:
#分片角色
clusterRole: shardsvr
第一个副本集 一主一副本一仲裁。
- 启动mongo服务器
- 进入配置
# 配置主节点
/mongo --host 180.76.159.126 --port 27018
# 初始化
rs.initiate()
# 加入副本节点
rs.add("公网ip:port")
# 加入仲裁节点
rs.addArb("180.76.159.126:27218")
# 查看配置
rs.conf()
第二套副本集
#-----------myshardrs01
mkdir -p /mongodb/sharded_cluster/myshardrs02_27318/log \ & mkdir -p /mongodb/sharded_cluster/myshardrs02_27318/data/db \ & mkdir -p /mongodb/sharded_cluster/myshardrs02_27418/log \ & mkdir -p /mongodb/sharded_cluster/myshardrs02_27418/data/db \ & mkdir -p /mongodb/sharded_cluster/myshardrs02_27518/log \ & mkdir -p /mongodb/sharded_cluster/myshardrs02_27518/data/db
配置文件:
vim /mongodb/sharded_cluster/myshardrs02_27318/mongod.conf
配置内容
systemLog:
#MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/mongodb/sharded_cluster/myshardrs02_27318/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
dbPath: "/mongodb/sharded_cluster/myshardrs02_27318/data/db"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/mongodb/sharded_cluster/myshardrs02_27318/log/mongod.pid"
net:
#服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
#bindIpAll: true #服务实例绑定的IP 192.168.0.2为局域网ip
bindIp: localhost,192.168.0.2
#bindIp #绑定的端口
port: 27318
replication:
#副本集的名称
replSetName: myshardrs02
sharding:
#分片角色
clusterRole: shardsvr
第二个副本集第二个
配置文件:
vim /mongodb/sharded_cluster/myshardrs02_27418/mongod.conf
配置内容
systemLog:
#MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/mongodb/sharded_cluster/myshardrs02_27418/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
dbPath: "/mongodb/sharded_cluster/myshardrs02_27418/data/db"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/mongodb/sharded_cluster/myshardrs02_27418/log/mongod.pid"
net:
#服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
#bindIpAll: true #服务实例绑定的IP 192.168.0.2为局域网ip
bindIp: localhost,192.168.0.2
#bindIp #绑定的端口
port: 27418
replication:
#副本集的名称
replSetName: myshardrs02
sharding:
#分片角色
clusterRole: shardsvr
第二个副本集第三个
配置文件:
vim /mongodb/sharded_cluster/myshardrs02_27518/mongod.conf
配置内容
systemLog:
#MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/mongodb/sharded_cluster/myshardrs02_27518/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
dbPath: "/mongodb/sharded_cluster/myshardrs02_27518/data/db"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/mongodb/sharded_cluster/myshardrs02_27518/log/mongod.pid"
net:
#服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
#bindIpAll: true #服务实例绑定的IP 192.168.0.2为局域网ip
bindIp: localhost,192.168.0.2
#bindIp #绑定的端口
port: 27518
replication:
#副本集的名称
replSetName: myshardrs02
sharding:
#分片角色
clusterRole: shardsvr
第二个副本集 – 一主一副本一仲裁。
- 启动mongo服务器
- 进入配置
# 配置主节点
mongo --host 180.76.159.126 --port 27318
# 初始化
rs.initiate()
# 加入副本节点
rs.add("公网ip:port")
# 加入仲裁节点
rs.addArb("180.76.159.126:27518")
# 查看配置
rs.conf()
配置阶段副本集
#-----------myshardrs01
mkdir -p /mongodb/sharded_cluster/myconfigrs_27019/log \ & mkdir -p /mongodb/sharded_cluster/myconfigrs_27019/data/db \ & mkdir -p /mongodb/sharded_cluster/myconfigrs_27119/log \ & mkdir -p /mongodb/sharded_cluster/myconfigrs_27119/data/db \ & mkdir -p /mongodb/sharded_cluster/myconfigrs_27219/log \ & mkdir -p /mongodb/sharded_cluster/myconfigrs_27219/data/db
配置文件:
vim /mongodb/sharded_cluster/myconfigrs_27019/mongod.conf
配置内容
systemLog:
#MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/mongodb/sharded_cluster/myconfigrs_27019/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
dbPath: "/mongodb/sharded_cluster/myconfigrs_27019/data/db"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/mongodb/sharded_cluster/myconfigrs_27019/log/mongod.pid"
net:
#服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
#bindIpAll: true #服务实例绑定的IP 192.168.0.2为局域网ip
bindIp: localhost,192.168.0.2
#bindIp #绑定的端口
port: 27019
replication:
#副本集的名称
replSetName: myconfigrs
sharding:
#分片角色
clusterRole: configsvr
配置节点第二个
配置文件:
vim /mongodb/sharded_cluster//myconfigrs_27119/mongod.conf
配置内容
systemLog:
#MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/mongodb/sharded_cluster//myconfigrs_27119/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
dbPath: "/mongodb/sharded_cluster//myconfigrs_27119/data/db"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/mongodb/sharded_cluster//myconfigrs_27119/log/mongod.pid"
net:
#服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
#bindIpAll: true #服务实例绑定的IP 192.168.0.2为局域网ip
bindIp: localhost,192.168.0.2
#bindIp #绑定的端口
port: 27119
replication:
#副本集的名称
replSetName: myconfigrs
sharding:
#分片角色
clusterRole: configsvr
配置节点第三个
配置文件:
vim /mongodb/sharded_cluster//myconfigrs_27219/mongod.conf
配置内容
systemLog:
#MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/mongodb/sharded_cluster//myconfigrs_27219/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
dbPath: "/mongodb/sharded_cluster//myconfigrs_27219/data/db"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/mongodb/sharded_cluster//myconfigrs_27219/log/mongod.pid"
net:
#服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
#bindIpAll: true #服务实例绑定的IP 192.168.0.2为局域网ip
bindIp: localhost,192.168.0.2
#bindIp #绑定的端口
port: 27219
replication:
#副本集的名称
replSetName: myconfigrs
sharding:
#分片角色
clusterRole: configsvr
第二个副本集 – 一主两副本。
- 启动mongo服务器
- 进入配置
# 配置主节点
mongo --host 180.76.159.126 --port 27019
# 初始化
rs.initiate()
# 加入副本节点
rs.add("公网ip:port")
# 加入仲裁节点
rs.add("180.76.159.126:27219")
# 查看配置
rs.conf()
路由节点配置- 第一个
日志存放点
mkdir -p /mongodb/sharded_cluster/mymongos_27017/log
配置文件
vi /mongodb/sharded_cluster/mymongos_27017/mongos.conf
conf配置文件
systemLog:
#MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/mongodb/sharded_cluster/mymongos_27017/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
logAppend: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/mongodb/sharded_cluster/mymongos_27017/log/mongod.pid"
net:
#服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
#bindIpAll: true #服务实例绑定的IP
bindIp: localhost,192.168.0.2
#bindIp #绑定的端口
port: 27017
sharding:
#指定配置节点副本集
configDB: myconfigrs/180.76.159.126:27019,180.76.159.126:27119,180.76.159.126:27219
启动mongod
这里开始要用mongos来访问
下来我们需要进行分片操作。
分片配置
添加分片
# 添加分片
sh.addShard("ip:port")
-----------------------------------------------------
sh.addShard("myshardrs01/192.168.0.2:27018,180.76.159.126:27118,180.76.159.126:2 7218")
# 查看分片情况
sh.status()
-----------------------------------------------------
# 加入第二个分片
sh.addShard("myshardrs02/192.168.0.2:27318,180.76.159.126:27418,180.76.159.126:2 7518")
# 查看状态
sh.status()
移除分片
# 移除分片
use admin
db.runCommand( { removeShard: "myshardrs02" } )
开启分片功能 — 初始化
# 开启分片功能
sh.enableSharding("库名")、
sh.shardCollection("库名.集合名",{"key":1})
如:
sh.enableSharding("articledb")
集合分片
对集合分片,你必须使用 sh.shardCollection()
方法指定集合和分片键。
语法:
sh.shardCollection(namespace, key, unique)
说明
Parameter | Type | Description |
---|---|---|
namespace | string | 要(分片)共享的目标集合的命名空间,格式: . |
key | document | 用作分片键的索引规范文档。shard键决定MongoDB如何在shard之间分发文档。除非集合为空,否则索引必须在shardcollection命令之前存在。如果集合为空,则MongoDB在对集合进行分片之前创建索引,前提是支持分片键的索引不存在。简单的说:由包含字段和该字段的索引遍历方向的文档组成。 |
unique | boolean | 当值为true情况下,片键字段上会限制为确保是唯一索引。哈希策略片键不支持唯一索引。默认是false。 |
对集合进行分片时,你需要选择一个 片键(Shard Key) , shard key 是每条记录都必须包含的,且建立了索引的单个字段或复合字段,MongoDB按照片键将数据划分到不同的 数据块 中,并将 数据块 均衡地分布到所有分片中.为了按照片键划分数据块,MongoDB使用 基于哈希的分片方式(随机平均分配)或者基于范围的分片方式(数值大小分配) 。
用什么字段当片键都可以,如:nickname作为片键,但一定是必填字段。
分片的规则:
- 哈希分片
对于 基于哈希的分片 ,MongoDB计算一个字段的哈希值,并用这个哈希值来创建数据块.在使用基于哈希分片的系统中,拥有”相近”片键的文档 很可能不会 存储在同一个数据块中,因此数据的分离性更好一些.
sh.shardCollection("articledb.comment",{"nickname":"hashed"})
- 范围分片
对于 基于范围的分片 ,MongoDB按照片键的范围把数据分成不同部分.假设有一个数字的片键:想象一个从负无穷到正无穷的直线,每一个片键的值都在直线上画了一个点.MongoDB把这条直线划分为更短的不重叠的片段,并称之为 数据块 ,每个数据块包含了片键在一定范围内的数据.
在使用片键做范围划分的系统中,拥有”相近”片键的文档很可能存储在同一个数据块中,因此也会存储在同一个分片中.
会默认放在一个分区中,具体的分配是会根据实际情况划分的。
sh.shardCollection("articledb.author",{"age":1})
注意:
1)一个集合只能指定一个片键,否则报错。
2)一旦对一个集合分片,分片键和分片值就不可改变。 如:不能给集合选择不同的分片键、不能更新分片键的值。
3)根据age索引进行分配数据。
路由节点配置- 第二个
这个就不用像第一个进行分片配置了,这时候所有的分片都在配置分片里面了
日志存放点
mkdir -p /mongodb/sharded_cluster/mymongos_27117/log
配置文件
vi /mongodb/sharded_cluster/mymongos_27117/mongos.conf
conf配置文件
systemLog:
#MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/mongodb/sharded_cluster/mymongos_27117/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
logAppend: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/mongodb/sharded_cluster/mymongos_27117/log/mongod.pid"
net:
#服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
#bindIpAll: true #服务实例绑定的IP
bindIp: localhost,192.168.0.2
#bindIp #绑定的端口
port: 27117
sharding:
#指定配置节点副本集
configDB: myconfigrs/180.76.159.126:27019,180.76.159.126:27119,180.76.159.126:27219
这时候集群搭建就完毕了。
ps:使用springboot连接的时候在配置里面需要使用url进行连接
# mongodb://路由ip:路由端口,路由ip:路由端口/articledb
uri: mongodb://180.76.159.126:27017,180.76.159.126:27117/articledb