IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

配置 MogileFS 的 Slave

扶凯 2012-03-12 23:32:28 累计浏览 1,664 次
本机暂存
大多的 MogileFS 实例都使用的 MySQL 作为元数据存储(当然你也可以选择其它的如: SQLite ).通常的应用来讲,使用 MySQL 是个很好的主意.基本优化和应用和大型网站是一样的.所以不用担心它的性能.因为网站请求不比这个少,都没问题.另外我们可以使用的方案也很多,比如简单的来讲,我们可以对读在 slave 上进行扩展,可以加 Memcached 等(怎么增加 Memcached 的文章可以见我其它的文章).

管理 MySQL 的复制这个是个比较复杂的课题.大部分是超出了本文档的范围.我们将谈论如何在 MogileFS 上应用.

MogileFS 的一些需求

MogileFS 是一个分布式数据存储的系统,它可以有很多的存储节点和许多 trackers. 然而,它必须有一个单一的元数据存储,这是 trackers 的对所有文件的坐标点. 我要重复一次.因为这个地方太值得多提一下:所有的 trackers 必须指向相同的数据库实例.他们使用advisory locking 来确保他们不复制过程中发生碰撞,并通过事物协调队列处理.没有这个,你可能会永久丢失数据.

二个 tracker 也只能和一个相同的  database 交互, 他们使用锁来保证同一时间操作相同数据不会出意外, 包括许多其他的事情.所以我们有多个 tracker,记得写 IP 时都写主的 IP ,使用了 slave 的配置后,会自动从 slave 来读取.并且不用担心 slave 重起和死掉,tracker 会自动切换,并会给读的压力平均分给这些机器.

MogileFS 配置 Slave

现 在讲 MogileFS 配置读取 slave 的数据来分离查询的压力. 注意,真到这个文章写出来时, 仅仅支持 file 和 file_on 这二个表的查询到 slave. 当然如果你能在外部(Nginx 和你的程序中)来 Cache 输出的 path 的话(比如 Memcached 或者其它) 会比你添加只读的 slave 和 tracker 会有更好的性能的提升.

通过 mogadm 来配置 slave:

1
2
3
4
5
6
7
8
$ mogadm slave
Help for 'slave' command:
 (enter any command prefix, leaving off options, for further help)
  
  mogadm slave add <slave_key> [opts]                Add a slave node for store usage
  mogadm slave delete <slave_key>                    Delete a slave node for store usage
  mogadm slave list                                  List current store slave nodes.
  mogadm slave modify <slave_key> [opts]             Modify a slave node for store usage

有一个 opts 可以用来指定一些相关的参数:

01
02
03
04
05
06
07
08
09
10
11
$ mogadm slave add
  
ERROR: Missing argument 'slave_key'
  
Help for 'slave-add' command:
  
  mogadm slave add <slave_key> [opts]                Add a slave node for store usage
  
      --dsn=s              DBI DSN specifying what database to connect to.
      --password=s         DBI password for connecting.
      --username=s         DBI username for connecting

真实的添加语句会象下面一样

1
mogadm slave add storage2 --dsn=DBI:mysql:MogileFS:host=slave_ip --username=mogile --password=mogilepassword

 -dsn 我想以前的配置文件中写过很多次了吧,这个需要 slave 机器的主机 IP 的数据库的名字,做主从 99% 的从数据库名和主数据库名一样.然后那台机器可以访问这个数据库的用户和密码就行了.

注意,你要小心的设置这个 DSN  ,当然目前根据我的测试,如果从数据库连接不上,会自动的切换到其它的 slave 实在不行,会切回主数据库.
整个架构如下:

多个 tracker 配置了一个主数据库,配置完后,查询的量会自动平均分到其它的这些主机上来.如果在中间在加上 Memcached 会更加好.上面的架构做你的源站一定是没有问题了,要知道我们前边还有 CDN 啦.回源怎么样也得控制在 5% 以内.另外,你还可以做 MySQL 的多主之类的技术.

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 用Hyer来进行网站的抓取 (累计阅读 158,252)
  2. MySQL数据库在实际应用一些方面的介绍 (累计阅读 36,399)
  3. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,164)
  4. Mysql监控指南 (累计阅读 21,351)
  5. 由浅入深探究mysql索引结构原理、性能分析与优化 (累计阅读 16,523)
  6. 在Apache2.2.XX下安装Mod-myvhost模块 (累计阅读 13,058)
  7. 15个最好的免费开源电子商务平台 (累计阅读 12,541)
  8. 浅谈MySQL索引背后的数据结构及算法 (累计阅读 11,909)
  9. 整理了一份招PHP高级工程师的面试题 (累计阅读 11,709)
  10. 奇怪的 Nginx 的 upstream timed out 引起响应 502 (累计阅读 9,967)