- 论坛徽章:
- 0
|
27可用积分
现有四台存储服务器和两台应用服务器。我想知道用gnbd+gfs+RHCS+mdadm 能否实现这样的功能:当通过任意一台应用服务器写入一个文件到存储服务器时,该文件是被stripe到这四台存储服务器中,而且,当其中的一台存储服务器挂掉后,集群仍能正常运作(像raid5那样)。
我是这么做的。在四台存储服务器上,分别用gnbd_export将各自的/dev//hdb1 导出。 然后在其中的一台应用服务器上用 gnbd_import将四台存储服务器上的/dev/hdb1都导入。然后,用
mdadm -C /dev/md0 -l5 -n4 /dev/gnbd[0-3]
将这四个/dev/hdb1 做成raid5 ,接着在这台应用服务器上将/dev/md0导出再导入,然后用
gfs_mkfs -p lock_dlm -t bob_cluster:gfs -j 2 /dev/gnbd/md0
建立gfs 文件。 最后将它挂载到 /mnt/gfs.
在另一台应用服务器上,将前面那台应用服务器导出的 /dev/md0 导入,然后也挂载到/mnt/gfs 上。
分别在这两台应用服务器上的/mnt/gfs 目录写入文件,均能正常写入。而且能互相看到更新的文件。但是,当将任意一台存储服务器断开网络后,往/mnt/gfs里touch 一个文件能执行,但是 ls /mnt/gfs时 就一直停止在那里无法显示结果,直到将断开的服务器重新接入网络才能显示出结果。这就和我想要的效果有出入了 。
哪位大虾可否指点下,我这种方法是否可行,如果可行那我是在那个步骤做错了。如果不行,还有什么方法可实现我想要的效果呢? 谢谢!
具体配置如下:
四台服务器分别名为:svr1,svr2,svr3,svr4 (每台都有个已分区类型为:FD 的/dev/hdb1 设备)
两台应用服务器分别名为:app1,app2
在四台存储服务器上分别导出设备:
[root@svr1]# gnbd_serv -v -n
[root@svr1]# gnbd_export -v -e gfs1 -d /dev/hdb1 -c
[root@svr2]# gnbd_serv -v -n
[root@svr2]# gnbd_export -v -e gfs2 -d /dev/hdb1 -c
[root@svr3]# gnbd_serv -v -n
[root@svr3]# gnbd_export -v -e gfs3 -d /dev/hdb1 -c
[root@svr4]# gnbd_serv -v -n
[root@svr4]# gnbd_export -v -e gfs4 -d /dev/hdb1 -c
在两台应用服务器上分别执行:
[root@app1]# service cman start
[root@app2]# service cman start
[root@app1]# service gfs start
[root@app2]# service gfs start
[root@app1]# service rgmanager start
[root@app2]# service rgmanager start
/etc/cluster/cluster.conf的配置文件如下:
<?xml version="1.0" ?>
<cluster config_version="1" name="bob_cluster">
<cman/>
<clusternodes>
<clusternode name="app1" nodeid="1" votes="1">
<fence>
<method name="single">
<device name="trin-apc" nodename="app1"/>
</method>
</fence>
</clusternode>
<clusternode name="app2" nodeid="2" votes="1">
<fence>
<method name="single">
<device name="trin-apc" nodename="app2"/>
</method>
</fence>
</clusternode>
</clusternodes>
<fencedevices>
<fencedevice agent="fence_manual" name="trin-apc"/>
</fencedevices>
</cluster>
在app1和app2上分别加载模块:
[root@app1]# modprobe gnbd
[root@app2]# modprobe gnbd
在app1上导入svr1-4的/dev/hdb1设备
[root@app1]# gnbd_import -v -i svr1
[root@app1]# gnbd_import -v -i svr2
[root@app1]# gnbd_import -v -i svr3
[root@app1]# gnbd_import -v -i svr4
在app1上对导入的四个/dev/hdb1做raid5
[root@app1]# mdadm -C /dev/md0 -l5 -n4 /dev/gnbd[0-3]
在app1上将/dev/md0导出
[root@app1]# gnbd_serv -v -n
[root@app1]# gnbd_export -v -e md0 -d /dev/md0 -c
在app1和app2上分别导入/dev/md0
[root@app1]# gnbd_import -v -i app1
[root@app2]# gnbd_import -v -i app1
在app1和app2上分别加载gfs和lock_dlm
[root@app1]# modprobe gfs
[root@app2]# modprobe gfs
[root@app1]# modprobe lock_dlm
[root@app2]# modprobe lock_dlm
在app1上建立gfs文件系统
[root@app1]# gfs_mkfs -p lock_dlm -t bob_cluster:gfs -j 2 /dev/gnbd/md0
挂载文件系统
[root@app1]# mount -t gfs /dev/gnbd/md0 /mnt/gfs
[root@app2]# mount -t gfs /dev/gnbd/md0 /mnt/gfs
PS:就这么多分了,无法给再多的,抱歉。
[ 本帖最后由 yman 于 2008-3-11 11:03 编辑 ] |
最佳答案
查看完整内容
修改/sbin/fence_manual为#!/bin/bashexit 0我想就可以了.
|