发新话题
打印

讨论多os共享lun,以及文件系统,数据库方面的问题!

在 Linux (Unix-like) 系统里,“裸设备”和块设备是以文件的形式呈现给用户的,而“裸设备”的实现是通过“映射”一个块设备来得到一个字符设备。但是,对“裸设备”或块设备的访问不是必须经过某个 FS 实现。

首先,需要考虑系统在访问块设备和字符设备时的差异,即访问一个字符设备是没有经过 OS 的核心缓存而直接“连续地”读写设备,而访问一个块设备(通过建立其上的 FS)则需要经过核心缓存再映射到“真正的”存储设备块上,同时,这种访问依赖于存储设备可以“随机地”读写操作。

其次,数据库系统在“裸设备”上构建存储,虽然没有 FS 的参与并且没有通过核心缓存,但是也一定会构建自己的文件或数据的组织结构,在用户层建立缓存机制(可能会多层,请示下);和在 FS 上建立的数据库系统相比,可以在功能上看作是,将用户层的数据组织结构和缓存机制的一部分移入到核心层,归于 OS 的核心对资源进行统一调度。(补充一下,这里所指的 FS 是在核心层实现并运行的)

另外,多个主机同时挂载或“共享存储”一个 LU 时,最重要的是要保证数据的一致性问题,同时,也要衡量具体实现方案的性能等问题。一致性问题,一般是在各个主机节点上引入分布式锁管理以及集群管理。具体实现也是比较复杂,需要很多内部结构的优化。

以上这几点,可以请楼主考虑。


通过 Oracle 针对 Linux 两个主流版本的应用实施建议,也可以体会到一些变化。在 Linux 2.4 核心版本的系统上,Oracle 建议通过“裸设备”来建立数据库系统的存储(此时,PC 服务器在运行数据库系统方面还大多为单机或 HA);而在 Linux 2.6 核心版本的系统上,又建议通过 FS 来部署其数据库系统,在多节点集群时,推荐 OCFS2(也可以选择其他集群文件系统,比如 GFS)。
从这个变化可以感到,Oracle 对 Linux 2.6 核心的评估还是很积极的(说明,核心在对资源的管理和调度是重要的因素),当然,其集群文件系统 OCFS 在更新过后也许更加高效了。

[ 本帖最后由 ltong 于 2007-2-13 14:52 编辑 ]

TOP

感谢仁兄的回复
现在有个问题是:oracle到底哪部分是利用os来完成的?
内存管理、磁盘驱动?
既然oracle直接操作裸设备,那么这个裸设备,是os提供的,那么oracle至少在访问磁盘的时候,脱离不了os
其次,内存管理方面,是由os给oracle分配内存吧?这个估计oracle不会这么越权来自己管理内存吧。
http://space.doit.com.cn/35700
存储界的首本个性之作《大话存储-网络存储系统原理精解与最佳实践》,将于9月初由清华大学出版社隆重出版!敬请关注!

TOP

> 现在有个问题是:oracle到底哪部分是利用os来完成的?
> 内存管理、磁盘驱动?

还有 I/O 调度等,一般这属于 I/O 子系统,最后交给具体的设备驱动。

> 既然oracle直接操作裸设备,那么这个裸设备,是os提供的,那么oracle至少在访问磁盘的时候,脱离不了os
> 其次,内存管理方面,是由os给oracle分配内存吧?这个估计oracle不会这么越权来自己管理内存吧。

此时,Oracle 需要在用户层实现的是数据组织和全部的缓存机制。这里缓存用的内存可以通过 OS 核心分配得到。

TOP

在 Linux (Unix-like) 系统里,“裸设备”和块设备是以文件的形式呈现给用户的,而“裸设备”的实现是通过“映射”一个块设备来得到一个字符设备。但是,对“裸设备”或块设备的访问不是必须经过某个 FS 实现。
-----------------------------------------------------------------------------
裸设备和块设备都有自己的开关表,并不是裸设备通过映射块设备来得到字符设备。
既然把裸设备和块设备通过文件形式呈现给用户,那么就属于文件系统管理,如何不通过文件系统来访问裸设备和块设备?

TOP

和在 FS 上建立的数据库系统相比,可以在功能上看作是,将用户层的数据组织结构和缓存机制的一部分移入到核心层,归于 OS 的核心对资源进行统一调度。(补充一下,这里所指的 FS 是在核心层实现并运行的)
------------------------------------------------------
说反了吧

TOP

通过 Oracle 针对 Linux 两个主流版本的应用实施建议,也可以体会到一些变化。在 Linux 2.4 核心版本的系统上,Oracle 建议通过“裸设备”来建立数据库系统的存储(此时,PC 服务器在运行数据库系统方面还大多为单机或 HA);而在 Linux 2.6 核心版本的系统上,又建议通过 FS 来部署其数据库系统,在多节点集群时,推荐 OCFS2(也可以选择其他集群文件系统,比如 GFS)。
从这个变化可以感到,Oracle 对 Linux 2.6 核心的评估还是很积极的(说明,核心在对资源的管理和调度是重要的因素),当然,其集群文件系统 OCFS 在更新过后也许更加高效了
--------------------------------------------------------
oracle好像从来没有推荐RAC使用ocfs2,ocfs的问题还是不少的

TOP

> 既然把裸设备和块设备通过文件形式呈现给用户,那么就属于文件系统管理,如何不通过文件系统来访问裸设备和块设备?

块设备和字符设备属于特殊设备文件,和“正规”文件一样,都统一属于 VFS (Virtual Filesystem) 管理;只是 VFS 模糊了设备文件和“正规”文件的访问差异。对于“正规”文件,VFS 会调用其所属 FS 的相应访问操作;对于设备文件,则对应设备驱动的调用。

TOP

块设备和字符设备属于特殊设备文件,和“正规”文件一样,都统一属于 VFS (Virtual Filesystem) 管理;只是 VFS 模糊了设备文件和“正规”文件的访问差异。对于“正规”文件,VFS 会调用其所属 FS 的相应访问操作;对于设备文件,则对应设备驱动的调用。
-------------------------------------
那么谁来调用设备驱动?

TOP

vfs和fs不是一个概念,vfs其实是个虚拟目录,是广义的文件系统,我们所说的仅指管理磁盘数据的那个fs

所以裸设备,可以直接操作,不需要经过狭义的fs,但是可以经过vfs

谁来调用设备驱动,当然是os了,fs和驱动之间会有很多诸如queue之类的东西,然后call相关的函数。


至于“oracle好像从来没有推荐RAC使用ocfs2,ocfs的问题还是不少的oracle好像从来没有推荐RAC使用ocfs2,ocfs的问题还是不少的”
是的。有时候官方和best pratice说得可能是不一样的,实践和理论总是有差异


“说反了吧”
我也觉得是说反了,应该是更加推向应用层了,而不是核心层,由应用来组织磁盘数据了。返璞归真了,呵呵


oracle好像从来没有推荐RAC使用ocfs2,ocfs的问题还是不少的
http://space.doit.com.cn/35700
存储界的首本个性之作《大话存储-网络存储系统原理精解与最佳实践》,将于9月初由清华大学出版社隆重出版!敬请关注!

TOP

引用:
原帖由 冬瓜头 于 2007-2-13 17:34 发表
vfs和fs不是一个概念,vfs其实是个虚拟目录,是广义的文件系统,我们所说的仅指管理磁盘数据的那个fs
--不敢苟同虚拟目录(不清楚虚拟目录是个什么),VFS更重要的是提供一种架构,提供文件抽象层(从而给上层应用提供统一的操作接口,比如对文件的读写)和文件依赖层(让下面具体的文件系统,比如VxFS, EXT3,.... 实现各自的特性)。

所以裸设备,可以直接操作,不需要经过狭义的fs,但是可以经过vfs
--应用程序是可以绕过FS,通过系统调用来操作裸设备!  不过,VFS只提供了一种架构,它必须要和某个具体文件系统结合,才能够真正操作读写设备!当然可以不要VFS架构,直接使用具体的文件系统,最简单就是DOS里面的胖子文件系统。
[ 本帖最后由 rechardluo 于 2007-2-14 01:59 编辑 ]

TOP

发新话题