MongoDB集群部署

本笔记通过黑马视频学习和记录。

副本集

基本知识

实现备份数据的高可用。

两种类型(主节点、从节点)

  • 主节点:操作的主要节点,可以实现读和写功能。
  • 从节点:数据备份,主要是实现数据冗余、和读的功能。

三种身份

  • 主要成员—主节点
  • 副本成员 — 从主节点进行复制操作,只读属性。
  • 仲裁者 — 不存储数据,只有投票作用

搭建副本集

我们本机搭建,通过端口号进行区分。

主节点: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也不会读取数据。仲裁节点不会同步业务数据的。

同一个副本集的数据会同步的。

参数说明:

parametertypedescription
hoststring or document要添加到副本集的新成员。 指定为字符串或配置文档:1)如果是一个字符串,则需要指定新成员的主机名和可选的端口
arbiterOnlyboolean可选的。 仅在 值为字符串时适用。 如果为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)

说明

ParameterTypeDescription
namespacestring要(分片)共享的目标集合的命名空间,格式: .
keydocument用作分片键的索引规范文档。shard键决定MongoDB如何在shard之间分发文档。除非集合为空,否则索引必须在shardcollection命令之前存在。如果集合为空,则MongoDB在对集合进行分片之前创建索引,前提是支持分片键的索引不存在。简单的说:由包含字段和该字段的索引遍历方向的文档组成。
uniqueboolean当值为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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值