搜尋
首頁資料庫mysql教程 Mongodb高可用架构—Replica Set 集群实战

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

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

    ,虚拟主机
    陳述
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    mongodb php 扩展没有怎么办mongodb php 扩展没有怎么办Nov 06, 2022 am 09:10 AM

    mongodb php扩展没有的解决办法:1、在linux中执行“$ sudo pecl install mongo”命令来安装MongoDB的PHP扩展驱动;2、在window中,下载php mongodb驱动二进制包,然后在“php.ini”文件中配置“extension=php_mongo.dll”即可。

    Redis和MongoDB的区别与使用场景Redis和MongoDB的区别与使用场景May 11, 2023 am 08:22 AM

    Redis和MongoDB都是流行的开源NoSQL数据库,但它们的设计理念和使用场景有所不同。本文将重点介绍Redis和MongoDB的区别和使用场景。Redis和MongoDB简介Redis是一个高性能的数据存储系统,常被用作缓存和消息中间件。Redis以内存为主要存储介质,但它也支持将数据持久化到磁盘上。Redis是一款键值数据库,它支持多种数据结构(例

    Go语言中使用MongoDB:完整指南Go语言中使用MongoDB:完整指南Jun 17, 2023 pm 06:14 PM

    MongoDB是一种高性能、开源、文档型的NoSQL数据库,被广泛应用于Web应用、大数据以及云计算领域。而Go语言则是一种快速、开发效率高、代码可维护性强的编程语言。本文将为您完整介绍如何在Go语言中使用MongoDB。一、安装MongoDB在使用MongoDB之前,需要先在您的系统中安装MongoDB。在Linux系统下,可以通过如下命令安装:sudo

    php7.0怎么安装mongo扩展php7.0怎么安装mongo扩展Nov 21, 2022 am 10:25 AM

    php7.0安装mongo扩展的方法:1、创建mongodb用户组和用户;2、下载mongodb源码包,并将源码包放到“/usr/local/src/”目录下;3、进入“src/”目录;4、解压源码包;5、创建mongodb文件目录;6、将文件复制到“mongodb/”目录;7、创建mongodb配置文件并修改配置即可。

    php怎么使用mongodb进行增删查改操作php怎么使用mongodb进行增删查改操作Mar 28, 2023 pm 03:00 PM

    MongoDB作为一款流行的NoSQL数据库,已经被广泛应用于各种大型Web应用和企业级应用中。而PHP语言也作为一种流行的Web编程语言,与MongoDB的结合也变得越来越重要。在本文中,我们将会学习如何使用PHP语言操作MongoDB数据库进行增删查改的操作。

    SpringBoot中logback日志怎么保存到mongoDBSpringBoot中logback日志怎么保存到mongoDBMay 18, 2023 pm 07:01 PM

    自定义Appender非常简单,继承一下AppenderBase类即可。可以看到有个AppenderBase,有个UnsynchronizedAppenderBase,还有个AsyncAppenderBase继承了UnsynchronizedAppenderBase。从名字就能看出来区别,异步的、普通的、不加锁的。我们定义一个MongoDBAppender继承UnsynchronizedAppenderBasepublicclassMongoDBAppenderextendsUnsynchron

    SpringBoot怎么整合Mongodb实现增删查改SpringBoot怎么整合Mongodb实现增删查改May 13, 2023 pm 02:07 PM

    一、什么是MongoDBMongoDB与我们之前熟知的关系型数据库(MySQL、Oracle)不同,MongoDB是一个文档数据库,它具有所需的可伸缩性和灵活性,以及所需的查询和索引。MongoDB将数据存储在灵活的、类似JSON的文档中,这意味着文档的字段可能因文档而异,数据结构也会随着时间的推移而改变。文档模型映射到应用程序代码中的对象,使数据易于处理。MongoDB是一个以分布式数据库为核心的数据库,因此高可用性、横向扩展和地理分布是内置的,并且易于使用。况且,MongoDB是免费的,开源

    Python服务器编程:MongoDB数据库使用攻略Python服务器编程:MongoDB数据库使用攻略Jun 18, 2023 am 10:25 AM

    Python服务器编程:MongoDB数据库使用攻略MongoDB是一种NoSQL数据库,相比传统的关系型数据库,在某些场景下具有明显的优势。本文将介绍如何在Python服务器端使用MongoDB数据库,包括安装、连接、基本操作和查询优化等方面。一、安装MongoDB数据库MongoDB官网提供了各种操作系统下的安装包,这里我们选择在Ubuntu上安装。打开

    See all articles

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    AI Hentai Generator

    AI Hentai Generator

    免費產生 AI 無盡。

    熱門文章

    倉庫:如何復興隊友
    1 個月前By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
    2 週前By尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island冒險:如何獲得巨型種子
    1 個月前By尊渡假赌尊渡假赌尊渡假赌

    熱工具

    EditPlus 中文破解版

    EditPlus 中文破解版

    體積小,語法高亮,不支援程式碼提示功能

    MantisBT

    MantisBT

    Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

    Safe Exam Browser

    Safe Exam Browser

    Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    PhpStorm Mac 版本

    PhpStorm Mac 版本

    最新(2018.2.1 )專業的PHP整合開發工具