当前位置:Gxlcms > mysql > Mongodb高可用架构—ReplicaSet集群实战

Mongodb高可用架构—ReplicaSet集群实战

时间:2021-07-01 10:21:17 帮助过:94人阅读

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接入高可用的介绍请看下回分解!!!!

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

    ,虚拟主机

    人气教程排行