• MongoDB集群和安全


    一、MangoDb的副本集:操作、主要概念、故障转移、选举规则

    一、副本集合

    副本集就是维护一组相同的数据库,类似于mysql的主从机制,但是mysql的主从是固定的,但是mangodb的副本集是通过投票机制选举出主节点,所以副本集中总有一个主节点和多个备份节点。

    节点类型:主节点(读写)、备份节点(读)

    三种角色:主要成员(主节点)、副本成员(备份节点)、仲裁者(不保留数据,投票选举作用)

    二、副本集的创建

    1、创建主节点、备份节点、仲裁节点

    • 创建2个文件夹:日志、数据
    • 创建配置文件,注意副本集名称,replication:replSetName:xxx
    • 启动各个节点

    2、初始化副本集和主节点

    • 连接主机节点:bin/mango --host=120.0.0.1 --port=21017
    • 执行命令:rs.initiate(),
    • 查看配置:rs.conf(),只有一个主节点,也可用status查看节点运行状态
    • 添加备份节点和仲裁节点:rs.add("IP:PORT") - 添加备份节点,rs.addArb("IP:PORT") - 添加仲裁节点
    • 登录备份节点,输入命令:rs.slaveOk(),让备份节点承认角色,这个时候备份节点就可以进行读操作了,取消操作是rs.slaveOk(false)

    这样副本集的环境搭建完成了,一个主节点、一个副本节点、一个仲裁节点。

    3、主节点的选举原则

    在mangodb中,会自动选举主节点:

    • 主节点故障或网络不可达(默认心跳信息为10秒)
    • 人工干预(rs.stepDown(600))

    选举规则,票数+大多数成员支持,当都相同的时候,会使用数据最新的作为主节点。同时可以设置某个机器的权重,让其投票权重比增大(例如一个机器的性能高,那么让他成主节点的概率大)。priority:1,默认为1。

    注意选择规则中存在一个 大多数成员支持,例如一主、一从、一仲裁,当主和仲裁都宕机,从也不会切换到主,因为没有得到大多数成员支持。

    二、MongoDb的分片集群:概念、有点、操作、分片策略、故障转移

    一、分片集群

    将数据拆分,这样在不同机器存放不同的数据块。可以使用使用多台廉价的服务器存放海量数据。

    分片组件:

    • 分片(存储):数据的存储
    • mongs(路由):控制数据访问
    • config servers(调度配置):配置路由的相关配置

    其实常用的解决方法,是分片+集群的方式进行部署:

    二、分片集群的搭建 

    注意搭建的时候,一定要先搭建副本集和配置,最后搭建路由。

    • 搭建2个副本集(跟之前一样),注意副本集的分片角色
    • 配置节点副本集,在配置信息中需要注意副本集的名称和分片的角色
    • 初始化三个集群副本集的主节点、副本节点、仲裁节点(配置副本集没有,也可以有)
    • 路由节点的创建,使用mongs服务
      • 创建日志目录
      • 创建配置文件,需要制定配置节点的副本集
      • 增加分片节点:sh.addShard("名称/IP:PORT,IP:PORT")
      • 开启分片功能:sh.enableSharding("库名"),sh.shardCollection("库名.集合名",{"key":1})

    分片策略:

    • hash策略:sh.shardCollection("库名.集合", {列名:"hashed"}),根据某个字段进行hash分片
    • 范围策略:sh.shardCollection("库名.集合", {列名:1}),根据某个字段范围进行分片,当数据块(chunk,默认的大小64M)没有填满的时候,不会分片

    可以看出来,hash比较平均,所以字段值不确定的时候,使用hash分片。但是例如经常使用区间段查询的时候,使用范围分片,这样查询的区间段可能就保存在同一个分片中,查询效率高。

    连接语法:

    三、MangoDb的安全认证

    一、用户和角色简介

    通其它中间件一样,也是通过角色和权限进行配置,一个角色可以包含多个权限,权限包括对资源的CRUD。

    内置角色,其中readWrite比较常用:

    各种环境之间的安全认证:

    • 单实例环境:直接给用户赋角色即可,创建语法如下。需要在mongodb开启认证,启动的时候增加参数 --auth,可以在配置文件中增加配置
    • 副本集环境:应用和单机都是相同的,都需要用户名和密码,主要不同的是各个节点之间安全通信处理方式除了创建用户之外还需要生成key文件
      • 增加用户并赋角色
      • 生成一个key文件,使用openssl即可
      • 将key文件复制到各个节点中
      • 在配置文件中,制定key文件的目录
    • 集群分片环境:跟副本集环境完全相同的

    连接语法:

    uri:mongodb:用户名:密码@IP:PORT/库

  • 相关阅读:
    Pr:基本图形(文本)
    【C++】继承和多态常见的问题
    Flutter快学快用04 代码规范:实践开发 Flutter 编程代码规范工具
    Java内存溢出(OOM)分析
    动态照片怎么制作?教你如何制作gif动图
    Log4j和Log4j2的区别
    变更风险的灰度
    Python中的内置函数getattr()、setattr()
    从01背包说起(上)
    切换挂载盘
  • 原文地址:https://blog.csdn.net/liming0025/article/details/126277862