* 我们使用的是debian6.0,源里自带的版本比较旧(3.0.5),据说bug比较多,需要自己编译3.5版。
* configure的时候指定../configure --prefix=/usr否则path会有问题
* 有资料说ubuntu8.04的fuse默认没有支持glusterfs,需要重新编译。在我们的debian6.0未发现此问题。
* 两台机器互为服务端和客户端,都需要配置/etc/glusterfs/glusterfs.vol 和glusterfsd.vol。
* “option auth.addr.brick.allow 192.168.0.102”这一行是必须指定的(或者指定其他认证模块),否则会不允许客户端连接。
* 若手动挂载,需要以 root 用户身份运行或挂载(用了 trusted xattr,mount 时加 user_xattr 选项是没用的,官方说法是glusterfsd 需要创建不同属主的文件,所以必需 root 权限) 。
* 挂载上的虚拟目录的权限,会根据文件实际所在的目录来映射,不能通过其他途径更改。
* 推荐在fstab里写相应配置开机自动挂载。在我们的尝试中,必须在挂载选项里手动写明log-level=WARNING或INFO或其他合法值,如果不写的话默认为“NORMAL”是一个不合法值。
* 据说必须有_netdev选项,否则有可能在网络设备就绪前试图挂载从而死掉。
* 两台服务器分别互为gluser的客户端和服务端。每台机器的客户端配置文件里写入127.0.0.1和对方IP。
* 特殊情况1:
*
* 两台服务器AB。其中一台B机器宕机时,glusterfs客户端也可以正常向虚拟目录写入和读取,文件变化会反映到A上;
* 宕机的服务器B恢复后,当有任何客户端对虚拟目录进行“某种形式的访问”后,B就会开始将“该种形式的访问”所涉及到的文件或目录同步到自己服务器的本地目录上。
* 假如一段时间内一直没有任何对虚拟目录的访问行为,那么两台机器上的实际目录都不会被更新;
* 假如在这种情况下A机器宕机,而客户端再访问虚拟目录,就只能访问到B的滞后信息。
* 即使A恢复了,ls命令最初也只能列出旧的信息。这时,之前对虚拟目录的操作分两种情况:写入和删除。
*
* 写入的情况:如果主动访问了新的文件(因为是通过文件名和路径来计算哈希的,因此只要是实际存在的,哪怕ls没列出来),那么客户端就可以访问到这个文件,并且服务器端也会将这个文件同步。
* 删除的情况:ls之后,本来被删除的文件会重新被同步,出现在原本被删除的节点上。
* 即:疑件从有。
* 由此引申出来的特殊现象2:
*
* 如果某台服务器A既是客户端也是服务端,那么当A没有通过虚拟目录写入文件,而是直接写到服务端的文件存储目录时,这时ls是无法列出新文件的
* 但直接用文件名去访问的话,就可以直接访问到了,以后这个文件也会正常地被更新
* 但在这种情况下,如果直接在服务端的文件存储目录里删掉某个文件,那么它一旦被访问,还会重新被从另一台机器同步过来。
* 结论:不要直接写入实际目录。所有操作仅通过虚拟目录进行。
* 性能测试:用ruby脚本循环touch生成1000个空文件,直接在服务器实际目录上执行消耗1.9秒多,在客户端上向两份服务器同时执行消耗83秒,向一份服务器执行消耗64秒。
* 宕机的服务器恢复之后,设置让keepalived执行“du /mnt/gluster/ ”更新文件信息。(嵌套目录的情况下,ls不会更新嵌套的目录里的文件,所以应使用du。)
* 对这种情况下的du性能测试:
*
* 场景:A上有7个目录,每个目录下有1000个小文本文件,同时根目录下也有1000个小文本文件和一个4G的大文件;B没有这些文本文件
* 步骤:
*
* B机器对虚拟目录使用du,那么A和B之间会相互占用大量网络IO;需要非常久的时间(在网速约为80KB/s的情况下持续了十分钟)才能显示出目录占用信息;
* 这时B机器上的文件已经全部被正确同步到本地;
* 在此基础上,在A上再追加几个小文本文件,而B上再次试图使用du同步信息;
* 这时几秒钟的时间内就可以计算出目录信息;
* B机器上已经将这几个新文件同步到本地;
* 结论:在短时间的断网和一定规模的新文件范围内,主动同步带来的网络开销和性能开销是增量形式的,在网络带宽足够的前提下可以接受