免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3721 | 回复: 5
打印 上一主题 下一主题

RHCS+GNBD+GFS+mdadm方案不稳定? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-29 14:28 |只看该作者 |倒序浏览
四台GNBD,两台node。分别将四台gnbd上的/dev/sda6导出到网络中,然后再在两台node上分别导入所有的/dev/sda6,在其中一台node上用mdadm将这四个/dev/sda6做raid5,,创建/etc/mdadm.conf  并将它copy到另一台node上。 接着创建 gfs 文件系统 并mount上。 再另一台上激活raid 并mount上。
假设上面的挂载点是/mnt/cluster   在往里面执行cp  或 dd  命令时经常会遇到没响应了,一直停在那里。 用其他tty连上去,执行其他的命令只要不涉及到/mnt/cluster都能正常执行,一涉及到就停在那里。 在另一个node上也是如此,应该是集群出了问题。查/var/log/messages 文件却没发现有什么错误提示。我想问为什么会出现这种情况呢?
下面是我的配置及操作步骤:
一、测试环境
主机五台,都安装centos5的操作系统。其中名为:gnbd1,gnbd2,gnbd3和gnbd4的为存储服务器,名为:node1和node2的为应用服务器。同时给这五台主机分配如下的IP地址:
10.0.0.1        gnbd1
10.0.0.2        gnbd2
10.0.0.3        gnbd3
10.0.0.4        gnbd4
10.0.0.11       node1
10.0.0.12       node2


二、修改各个节点上的/etc/hosts 文件
如下:
[root@node1 ~]# vi /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1       localhost.localdomain   localhost
10.0.0.1        gnbd1
10.0.0.2        gnbd2
10.0.0.3        gnbd3
10.0.0.4        gnbd4
10.0.0.11       node1
10.0.0.12       node2

三、分别在gnbd1-4上进行分区
用fdisk进行分区,只进行分区,不格式化。而且转换为适合raid的FD类型分区。

四、在节点node1上创建/etc/cluster/cluster.conf 文件进行配置
如下:
<?xml version="1.0"?>
<cluster alias="gfs_cluster" config_version="5" name="bob_cluster">
        <fence_daemon post_fail_delay="0" post_join_delay="3"/>
        <clusternodes>
                <clusternode name="node1" nodeid="1" votes="1">
                        <fence>
                                <method name="1">
                                        <device name="manual" nodename="node1"/>
                                </method>
                        </fence>
                </clusternode>
                <clusternode name="node2" nodeid="2" votes="1">
                        <fence>
                                <method name="1">
                                        <device name="manual" nodename="node2"/>
                                </method>
                        </fence>
                </clusternode>
                <clusternode name="gnbd1" nodeid="3" votes="1">
                        <fence>
                                <method name="1">
                                        <device name="manual" nodename="gnbd1"/>
                                </method>
                        </fence>
                </clusternode>
                <clusternode name="gnbd2" nodeid="4" votes="1">
                        <fence>
                                <method name="1">
                                        <device name="manual" nodename="gnbd2"/>
                                </method>
                        </fence>
                </clusternode>
                <clusternode name="gnbd3" nodeid="5" votes="1">
                        <fence>
                                <method name="1">
                                        <device name="manual" nodename="gnbd3"/>
                                </method>
                        </fence>
                </clusternode>
                <clusternode name="gnbd4" nodeid="6" votes="1">
                        <fence>
                                <method name="1">
                                        <device name="manual" nodename="gnbd4"/>
                                </method>
                        </fence>
                </clusternode>
        </clusternodes>
        <cman/>
        <fencedevices>
                <fencedevice agent="fence_manual" name="manual"/>
        </fencedevices>
        <rm>
                <failoverdomains>
                        <failoverdomain name="gnbd_failover" ordered="0" restricted="0">
                                <failoverdomainnode name="gnbd1" priority="1"/>
                                <failoverdomainnode name="gnbd2" priority="1"/>
                                <failoverdomainnode name="gnbd3" priority="1"/>
                                <failoverdomainnode name="gnbd4" priority="1"/>
                        </failoverdomain>
                        <failoverdomain name="node_failover">
                                <failoverdomainnode name="node1" priority="1"/>
                                <failoverdomainnode name="node2" priority="1"/>
                        </failoverdomain>
                </failoverdomains>
                <resources/>
        </rm>
</cluster>

把这个配置文件copy到其他的五台主机上。


五、在所有主机上启动 cman,gfs,rgmanager服务

启动 cman,gfs,rgmanager服务.如:
[root@node1 ~]# service cman start
Starting cluster:
   Loading modules... done
   Mounting configfs... done
   Starting ccsd... done
   Starting cman... done
   Starting daemons... done
   Starting fencing... done
                                                           [确定]
[root@node1 ~]# service gfs start
[root@node1 ~]# service rgmanager start
启动 Cluster Service Manager:                             [确定]
其他五台也执行相同的命令

六、分别在gnbd1-4上导出设备
启动gnbd_serv服务
[root@gnbd1 ~]# gnbd_serv
[root@gnbd2 ~]# gnbd_serv
[root@gnbd3 ~]# gnbd_serv
[root@gnbd4 ~]# gnbd_servv

导出设备
[root@gnbd1 ~]# gnbd_export -e gfs1 -d /dev/sda6
[root@gnbd2 ~]# gnbd_export -e gfs2 -d /dev/sda6
[root@gnbd3 ~]# gnbd_export -e gfs3 -d /dev/sda6
[root@gnbd4 ~]# gnbd_export -e gfs4 -d /dev/sda6

七、导入设备
分别在node1和node2上加载模块
[root@node1~]# modprobe lock_dlm
[root@node1 ~]# modprobe gnbd
[root@node1 ~]# modprobe gfs

[root@node2 ~]# modprobe lock_dlm
[root@node2 ~]# modprobe gnbd
[root@node2 ~]# modprobe gfs

在 node1和node2上导入设备
[root@node1 ~]# gnbd_import -i gnbd1
[root@node1 ~]# gnbd_import -i gnbd2
[root@node1 ~]# gnbd_import -i gnbd3
[root@node1 ~]# gnbd_import -i gnbd4

[root@node2 ~]# gnbd_import -i  gnbd1
[root@node2 ~]# gnbd_import -i  gnbd2
[root@node2 ~]# gnbd_import -i  gnbd3
[root@node2 ~]# gnbd_import -i  gnbd4

八、在node1上对设备/dev/gnbd[0-3]制作raid5
[root@node1 ~]# mdadm -c /dev/md0 -l5 -n4 /dev/gnbd[0-3]
[root@node1 ~]# echo DEVICE /dev/gnbd[0-3]>/etc/mdadm.conf
[root@node1 ~]# mdadm -Ds >>/etc/mdadm.conf

将/etc/mdadm.conf拷贝一份到node2上

九、建立gfs文件系统并且挂载
在node1上建立gfs文件系统
[root@node1 ~]# gfs_mkfs -p lock_dlm -t bob_cluster:gfs -j 2 /dev/md0
挂载
[root@node1 ~]# mount -t gfs /dev/md0 /mnt/cluster

在node2上挂载设备
[root@node2 ~]# mdadm -As /dev/md0
[root@node2 ~]# mount -t gfs /dev/md0 /mnt/cluster

[ 本帖最后由 yman 于 2008-4-29 14:34 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-04-29 15:38 |只看该作者
终于有反应了,隔了几个小时
在 /var/log/messages 里有这样的错误(执行了 cp /mnt/cluster/ee /root):
Apr 29 11:39:33 node2 kernel: GFS: fsid=bob_cluster:gfs.1: fatal: invalid metadata block
Apr 29 11:39:33 node2 kernel: GFS: fsid=bob_cluster:gfs.1:   bh = 40 (magic)
Apr 29 11:39:33 node2 kernel: GFS: fsid=bob_cluster:gfs.1:   function = gfs_get_meta_buffer
Apr 29 11:39:33 node2 kernel: GFS: fsid=bob_cluster:gfs.1:   file = /builddir/build/BUILD/gfs-kmod-0.1.16/_kmod_build_PAE/src/gfs/dio.c, line = 1225
Apr 29 11:39:33 node2 kernel: GFS: fsid=bob_cluster:gfs.1:   time = 1209440373
Apr 29 11:39:33 node2 kernel: GFS: fsid=bob_cluster:gfs.1: about to withdraw from the cluster
Apr 29 11:39:33 node2 kernel: GFS: fsid=bob_cluster:gfs.1: telling LM to withdraw
Apr 29 14:00:31 node2 dlm_controld[26647]: open "/sys/kernel/dlm/gfs/control" error -1 2
Apr 29 14:00:31 node2 dlm_controld[26647]: open "/sys/kernel/dlm/gfs/event_done" error -1 2
Apr 29 14:00:31 node2 kernel: GFS: fsid=bob_cluster:gfs.1: withdrawn
Apr 29 14:00:31 node2 kernel:  [<f8c428ae>] gfs_lm_withdraw+0x76/0x82 [gfs]
Apr 29 14:00:31 node2 kernel:  [<f8c569b7>] gfs_meta_check_ii+0x2c/0x37 [gfs]
Apr 29 14:00:31 node2 kernel:  [<f8c314ec>] gfs_get_meta_buffer+0x1ad/0x215 [gfs]
Apr 29 14:00:31 node2 kernel:  [<f8c2f004>] gfs_block_map+0x231/0x3af [gfs]
Apr 29 14:00:31 node2 kernel:  [<f8c48001>] get_block+0x2c/0x78 [gfs]
Apr 29 14:00:31 node2 kernel:  [<c046d314>] block_read_full_page+0x1a3/0x2cd
Apr 29 14:00:31 node2 kernel:  [<f8c47fd5>] get_block+0x0/0x78 [gfs]
Apr 29 14:00:31 node2 kernel:  [<f8c48476>] gfs_readpage+0xca/0x162 [gfs]
Apr 29 14:00:31 node2 kernel:  [<c04531f4>] __do_page_cache_readahead+0x16d/0x1c6
Apr 29 14:00:31 node2 kernel:  [<c046b2e9>] __find_get_block+0x15c/0x166
Apr 29 14:00:31 node2 kernel:  [<c0453293>] blockable_page_cache_readahead+0x46/0x99
Apr 29 14:00:31 node2 kernel:  [<c0453426>] page_cache_readahead+0xb3/0x178
Apr 29 14:00:31 node2 kernel:  [<c044de08>] do_generic_mapping_read+0x137/0x468
Apr 29 14:00:31 node2 kernel:  [<c044e992>] __generic_file_aio_read+0x16f/0x1b6
Apr 29 14:00:31 node2 kernel:  [<c044d58f>] file_read_actor+0x0/0xd1
Apr 29 14:00:31 node2 kernel:  [<c044fac6>] generic_file_read+0x97/0xab
Apr 29 14:00:31 node2 kernel:  [<c04352a1>] autoremove_wake_function+0x0/0x2d
Apr 29 14:00:31 node2 kernel:  [<f8c3ccf0>] gfs_glock_nq_atime+0xca/0x291 [gfs]
Apr 29 14:00:31 node2 kernel:  [<f8c4a722>] do_read_buf+0xac/0x104 [gfs]
Apr 29 14:00:31 node2 kernel:  [<f8c491c4>] walk_vm+0xb5/0x274 [gfs]
Apr 29 14:00:31 node2 kernel:  [<f8c494ad>] __gfs_read+0x43/0x4a [gfs]
Apr 29 14:00:31 node2 kernel:  [<f8c4a676>] do_read_buf+0x0/0x104 [gfs]
Apr 29 14:00:31 node2 kernel:  [<f8c494ef>] gfs_read+0x0/0xe [gfs]
Apr 29 14:00:31 node2 kernel:  [<f8c494fa>] gfs_read+0xb/0xe [gfs]
Apr 29 14:00:31 node2 kernel:  [<c0469be0>] vfs_read+0x9f/0x141
Apr 29 14:00:31 node2 kernel:  [<c046a02e>] sys_read+0x3c/0x63
Apr 29 14:00:31 node2 kernel:  [<c0403eff>] syscall_call+0x7/0xb
Apr 29 14:00:31 node2 kernel:  =======================

现在执行 ls /mnt/cluster  有这样的错误提示:
[root@node2 ~]# ls /mnt/cluster
ls: /mnt/cluster: Input/output error

谁来帮忙分析一下。

[ 本帖最后由 yman 于 2008-4-29 15:39 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-04-29 16:12 |只看该作者
对比了下node1和node2的进程 发现node2比node1少了下面三个进程
root     31769  0.0  0.0      0     0 ?        S<   11:30   0:01 [lock_dlm1]
root     31770  0.0  0.0      0     0 ?        S<   11:30   0:00 [lock_dlm2]
root     31771  0.0  0.0      0     0 ?        S<   11:30   0:00 [dlm_recoverd]

论坛徽章:
0
4 [报告]
发表于 2008-04-30 21:59 |只看该作者
原帖由 yman 于 2008-4-29 14:28 发表
四台GNBD,两台node。分别将四台gnbd上的/dev/sda6导出到网络中,然后再在两台node上分别导入所有的/dev/sda6,在其中一台node上用mdadm将这四个/dev/sda6做raid5,,创建/etc/mdadm.conf  并将它copy到另一台nod ...


最有可能是fence的问题,
另外,感觉你做那么多gndb没什么用处,
软raid貌似没有什么实际意义:(
自己测试,这么玩可以,生产环境,还是不要这么玩了。

论坛徽章:
0
5 [报告]
发表于 2008-09-05 14:47 |只看该作者
这里为什么要做failover domain?做了failover domain又没有给该domain配置resource?

fence设备那里有个选项是gnbd的,doc上说是可以用来fence失效node对gnbd的访问,可以试一下这个。

关于这种情况下用softraid的问题,我有个疑问,即在一个节点对/dev/gnbd设备进行了md操作,比如某个/dev/gnbd设备坏了,需要用md来把他从raid中去除,如何通知其他node?我曾经做过softraid 1 over iscsi的实验(iscsi在这里作用和gnbd server一样),md操作需要在所有节点进行,进行操作后会花大量的资源来进行raid的recover操作,这样在/proc/mdstat里看到的才是正确的信息。如果节点数量很多,会很痛苦。

而clvm则避免了这样的情况。但又避免不了一个gnbd死掉,整个lvm全部丢失。

以上是小弟的愚见。

论坛徽章:
0
6 [报告]
发表于 2008-09-06 09:31 |只看该作者
与MD应该关系不大。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP