Maison > base de données > tutoriel mysql > le corps du texte

Mongodb高可用架构—Replica Set 集群实战

WBOY
Libérer: 2016-06-07 17:40:11
original
1147 Les gens l'ont consulté

ReplicaSet使用的是n个mongod节点,构建具备自动的容错功能(auto-failover),自动恢复的(auto-recovery)的高可用方案。使用ReplicaSet来实现读写分离。通过在连接

 

Replica Set使用的是n个mongod节点,构建具备自动的容错功能(auto-failover),自动恢复的(auto-recovery)的高可用方案。

使用Replica Set来实现读写分离。通过在连接时指定或者在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写操作。

对于Replica Set中的secondary 节点默认是不可读的。 

 

 

架构图:

 

分别在各服务器上运行两个mongod实例: 

shard11 + shard12 + shard13 ----> 组成一个replica set --|

  |-----> sharding_cluster

shard21 + shard22 + shard23 ----> 组成一个replica set --|

 

Shard Server: 用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个relica set承担,防止主机单点故障!

Config Server: 存储了整个 Cluster Metadata,其中包括 chunk 信息!

Route Server: 前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。

 

一、安装配置mongodb环境

1.安装

2.建立用户和组

  • 3.创建数据目录

    在各服务器上建立如下目录:

    4.设置各节点服务器hosts解析

     

     

    5.同步时钟

    ntpdate ntp.api.bz

    写到crontab任务计划中!

    这里务必要同步时钟,不然shrad不能同步!

     

    以上配置各节点都进行操作!!

     

    二、配置relica sets

    1.配置两个shard

     

    可以对应的把上面的命令放在一个脚本内,方便启动!

    也可以写到配置文件中,香港空间,通过-f参数来启动!

    改成配置文件方式:

    这样可以通过 mognod -f mongodb.conf来启动了!

     

    我这里把这些命令都放入脚本中:

    启动脚本(这里只启动mongod,后面有专门启动config和mongos脚本):

     


     

    PS:要是想开启一个HTTP协议的端口提供rest服务,可以在mongod启动参数中加上 --rest 选项!

    这样我们可以通过 :28021/_replSet 查看状态!

     

    生产环境推荐用配置文件和脚本文件方式启动。

     

    三、初始化replica set

     

    1.配置shard1用到的replica sets

     

    出现如下信息表示成功: 

    可以看马上变成 PRIMARY 即主节点!

    再到其它节点看下: 

    在所有节点上可以查看Replica Sets 的配置信息: 

    2.配置shard2用到的replica sets

     

    验证节点:

     

    到此就配置好了二个replica sets!

    PS: 初始化时,不指定priority默认id 0 为primary

     

    状态中关键数据位:

    在用 rs.status()查看replica sets状态时,

    state:1表示该host是当前可以进行读写,2:不能读写

    health:1表示该host目前是正常的,0:异常

     

    注意:初使化replica sets时也可以用这种方法:

    db.runCommand({"replSetInitiate":{"_id":"shard1","members":[{"_id":0,"host":"192.168.8.30:27021"},{"_id":1,"host":"192.168.8.31:27021"},{"_id":2,"host":"192.168.8.32:27021","shardOnly":true}]}})

    可以省略用rs.initiate(config)。

     

    四、配置三台config server

     

    分别在各服务器上运行(启动都一样):

    /opt/mongodb/bin/mongod --configsvr --dbpath /data0/mongodb/db/config --port 20000 --logpath /data0/mongodb/logs/config.log --logappend --fork --directoryperdb

     

    用脚本形式:

     

    然后在各节点查看有没有启动起来:

      

    五、配置mongs(启动路由)

     

    分别在206、207服务器上运行(也可以在所有节点上启动):

    /opt/mongodb/bin/mongos -configdb 192.168.8.30:20000,192.168.8.31:20000,192.168.8.32:20000 -port 30000 -chunkSize 50 -logpath /data0/mongodb/logs/mongos.log -logappend -fork

     

    用脚本形式: 

     

    注意:

    1). mongos里面的ip和端口是config服务的ip和端口:192.168.8.30:20000,192.168.8.31:20000,192.168.8.32:20000

    2). 必须先启动config后(并且config启动正常后,有config的进程存在)再启动mongos

     

    六、配置shard集群 

    1.连接一台路由 

    2.加入shards 

    PS:

    分片操作必须在 admin 库下操作

    如果只启动206和207服务器的路由!因此可不用把208服务器加进来!

    可选参数说明:

    Name:用于指定每个shard的名字,不指定的话系统将自动分配

    maxSize:指定各个shard可使用的最大磁盘空间,单位MegaBytes

     

    3.列出加入的shards 


    PS: 列出了以上二个我加的shards(shard1和shard2),表示shards已经配置成功!!

    如果206那台机器挂了,其它两个节点中某个会成为主节点,mongos会自动连接到主节点!

     

    七.添加分片

     

    1.激活数据库分片

    db.runCommand( { enablesharding : "" } );

    如:db.runCommand( { enablesharding : "" } );

     

    插入测试数据:

    激活数据库:


    通过执行以上命令,可以让数据库跨shard,如果不执行这步,数据库只会存放在一个shard,一旦激活数据库分片,数据库中不同的collection 将被存放在不同的shard上,但一个collection仍旧存放在同一个shard上,要使单个collection也分片,还需单独对 collection作些操作!

     

    2.添加索引

    必须加索引,不然不能对collections分片!

    3.Collecton分片

    要使单个collection也分片存储,需要给collection指定一个分片key,通过以下命令操作:

    db.runCommand( { shardcollection : "",key : }); 

     

    PS: 

    1). 操作必须切换到admin数据库下

    2). 分片的collection系统要创建好索引

    3). 分片的collection只能有一个在分片key上的唯一索引,其它唯一索引不被允许

     

    4.查看分片状态

     

     些时分片没有发生变化!

    再插入比较多的数据:

     

    当再次插入大量数据时。。自动分片处理了!!所以OK!!!

     

    八.停止所有服务脚本

    九.分片管理

    1.listshards:列出所有的Shard 

  • >use admin 
  • >db.runCommand({listshards:1}) 
  • 2.移除shard 

    对于移除的分片后,我们再加入相同分片时,美国服务器,会加不进去,可以按如下方法进行: 

     要做的就是删除shards表中的信息,把移除的shard键值删除掉!再重新加入shard

    如:db.shards.remove({"_id":"shard2"})

     

    3.查看Sharding信息

    > printShardingStatus()

     

    PRIMARY> db.system.replset.find()

    PRIMARY> rs.isMaster()

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    关于mongos接入高可用的介绍请看下回分解!!!!

    本文出自 “->” 博客,转载请与作者联系!

    ,虚拟主机
    Étiquettes associées:
    source:php.cn
    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!