美文网首页
mongodb集群配置方案

mongodb集群配置方案

作者: ljt001 | 来源:发表于2022-09-06 14:47 被阅读0次

    MongoDB高可用集群配置的几种方案 https://yq.aliyun.com/articles/61516

    集群配置方案

    MongoDB集群配置主要有主从结构,副本集方式和Sharding分片方式。

    三、Master-Slave主从结构

    image.png

    主从架构一般用于备份或者做读写分离。一般有一主一从设计和一主多从设计。
    由两种角色构成:
    (1)主(Master)
    可读可写,当数据有修改的时候,会将oplog同步到所有连接的salve上去。
    (2)从(Slave)
    只读不可写,自动从Master同步数据。

    特别的,对于Mongodb来说,并不推荐使用Master-Slave架构,因为Master-Slave其中Master宕机后不能自动恢复,推荐使用Replica Set,后面会有介绍,除非Replica的节点数超过50,才需要使用Master-Slave架构,正常情况是不可能用那么多节点的。

    还有一点,Master-Slave不支持链式结构,Slave只能直接连接Master。Redis的Master-Slave支持链式结构,Slave可以连接Slave,成为Slave的Slave。

    四、Relica Set副本集方式
    Mongodb的Replica Set即副本集方式主要有两个目的,一个是数据冗余做故障恢复使用,当发生硬件故障或者其它原因造成的宕机时,可以使用副本进行恢复。
    另一个是做读写分离,读的请求分流到副本上,减轻主(Primary)的读压力。

    image.png image.png

    Replica Set是mongod的实例集合,它们有着同样的数据内容。包含三类角色:
    (1)主节点(Primary)
    接收所有的写请求,然后把修改同步到所有Secondary。一个Replica Set只能有一个Primary节点,当Primary挂掉后,其他Secondary或者Arbiter节点会重新选举出来一个主节点。默认读请求也是发到Primary节点处理的,需要转发到Secondary需要客户端修改一下连接配置。
    (2)副本节点(Secondary)
    与主节点保持同样的数据集。当主节点挂掉的时候,参与选主。
    (3)仲裁者(Arbiter)
    不保有数据,不参与选主,只进行选主投票。使用Arbiter可以减轻数据存储的硬件需求,Arbiter跑起来几乎没什么大的硬件资源需求,但重要的一点是,在生产环境下它和其他数据节点不要部署在同一台机器上。
    注意,一个自动failover的Replica Set节点数必须为奇数,目的是选主投票的时候要有一个大多数才能进行选主决策。
    (4)选主过程
    其中Secondary宕机,不受影响,若Primary宕机,会进行重新选主:
    Sharding分片技术
    当数据量比较大的时候,我们需要把数据分片运行在不同的机器中,以降低CPU、内存和IO的压力,Sharding就是数据库分片技术。
    MongoDB分片技术类似MySQL的水平切分和垂直切分,数据库主要由两种方式做Sharding:垂直扩展和横向切分。
    垂直扩展的方式就是进行集群扩展,添加更多的CPU,内存,磁盘空间等。
    横向切分则是通过数据分片的方式,通过集群统一提供服务:

    image.png

    (2)MongoDB分片架构中的角色
    A.数据分片(Shards)
    用来保存数据,保证数据的高可用性和一致性。可以是一个单独的mongod实例,也可以是一个副本集。
    在生产环境下Shard一般是一个Replica Set,以防止该数据片的单点故障。所有Shard中有一个PrimaryShard,里面包含未进行划分的数据集合:
    B.查询路由(Query Routers)
    路由就是mongos的实例,客户端直接连接mongos,由mongos把读写请求路由到指定的Shard上去。
    一个Sharding集群,可以有一个mongos,也可以有多mongos以减轻客户端请求的压力。
    C.配置服务器(Config servers)
    保存集群的元数据(metadata),包含各个Shard的路由规则。

    我的集群试验

    • 初始化集群

    其中的rs.等命令是在运行进入mongo.exe后的命令。
    cd Server\3.2\bin
    mongo.exe 192.168.2.81:27017

    rs.initiate();
    rs0:OTHER> rs.conf()
    rs0:PRIMARY> rs.add("192.168.2.81:27018");
    rs0:PRIMARY> rs.status();

    • 切换主从

    切换过程需要点时间,如果没切换可等几秒再看看
    设置主从的优先级priority,值越大,优先权越高。
    priority默认的值是1,rs.conf是不显示的;(我的例子显示的)
    如果值是0,那么不能成为primay。

    比如原来是27018是主primary,主从的priority都是默认为1.
    192.168.2.81:27017 secondary
    192.168.2.81:27018 primary

    将第1个节点即27017节点优先级提高,过一会再查看rs.status()发现27017成为primary
    rs.status();
    conf = rs.conf();
    conf.members[0].priority=2;
    rs.reconfig(conf,{"force":true});
    rs.status();

    • 设置profile记录(不同于log文件),system.profile表

    db.setProfilingLevel(2)
    进入哪个db执行setProfilingLevel就会在这个db生成一个system.profile表。
    0是不记录,也是默认
    profile应该主要是数据查询变更日志,log文件应该是服务器运行监控日志

    • db.setLogLevel(1)设置服务器日志,见.log文件

    可通过tail实时显示变更
    E:\mongodb4.2.0\data_master\log>tail -f mongodb.log

    • 切割log文件,把当前log文件复制到新文件,清空前log文件内容

    use admin
    db.runCommand({ logRotate :1 } )

    相关文章

      网友评论

          本文标题:mongodb集群配置方案

          本文链接:https://www.haomeiwen.com/subject/uekxgrtx.html