歡迎您光臨本站 註冊首頁

RHCS+GNBD+GFS+mdadm方案不穩定?

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

RHCS+GNBD+GFS+mdadm方案不穩定?

四台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 文件
如下:
# 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服務.如:
# service cman start
Starting cluster:
   Loading modules... done
   Mounting configfs... done
   Starting ccsd... done
   Starting cman... done
   Starting daemons... done
   Starting fencing... done
                                                           [確定]
# service gfs start
# service rgmanager start
啟動 Cluster Service Manager:                             [確定]
其他五台也執行相同的命令

六、分別在gnbd1-4上導出設備
啟動gnbd_serv服務
# gnbd_serv
# gnbd_serv
# gnbd_serv
# gnbd_servv

導出設備
# gnbd_export -e gfs1 -d /dev/sda6
# gnbd_export -e gfs2 -d /dev/sda6
# gnbd_export -e gfs3 -d /dev/sda6
# gnbd_export -e gfs4 -d /dev/sda6

七、導入設備
分別在node1和node2上載入模塊
# modprobe lock_dlm
# modprobe gnbd
# modprobe gfs

# modprobe lock_dlm
# modprobe gnbd
# modprobe gfs

在 node1和node2上導入設備
# gnbd_import -i gnbd1
# gnbd_import -i gnbd2
# gnbd_import -i gnbd3
# gnbd_import -i gnbd4

# gnbd_import -i  gnbd1
# gnbd_import -i  gnbd2
# gnbd_import -i  gnbd3
# gnbd_import -i  gnbd4

八、在node1上對設備/dev/gnbd製作raid5
# mdadm -c /dev/md0 -l5 -n4 /dev/gnbd
# echo DEVICE /dev/gnbd>/etc/mdadm.conf
# mdadm -Ds >>/etc/mdadm.conf

將/etc/mdadm.conf拷貝一份到node2上

九、建立gfs文件系統並且掛載
在node1上建立gfs文件系統
# gfs_mkfs -p lock_dlm -t bob_cluster:gfs -j 2 /dev/md0
掛載
# mount -t gfs /dev/md0 /mnt/cluster

在node2上掛載設備
# mdadm -As /dev/md0
# mount -t gfs /dev/md0 /mnt/cluster

[ 本帖最後由 yman 於 2008-4-29 14:34 編輯 ]
《解決方案》

終於有反應了,隔了幾個小時:em06:
在 /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: open "/sys/kernel/dlm/gfs/control" error -1 2
Apr 29 14:00:31 node2 dlm_controld: 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
Apr 29 14:00:31 node2 kernel:  [<f8c569b7>] gfs_meta_check_ii+0x2c/0x37
Apr 29 14:00:31 node2 kernel:  [<f8c314ec>] gfs_get_meta_buffer+0x1ad/0x215
Apr 29 14:00:31 node2 kernel:  [<f8c2f004>] gfs_block_map+0x231/0x3af
Apr 29 14:00:31 node2 kernel:  [<f8c48001>] get_block+0x2c/0x78
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
Apr 29 14:00:31 node2 kernel:  [<f8c48476>] gfs_readpage+0xca/0x162
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
Apr 29 14:00:31 node2 kernel:  [<f8c4a722>] do_read_buf+0xac/0x104
Apr 29 14:00:31 node2 kernel:  [<f8c491c4>] walk_vm+0xb5/0x274
Apr 29 14:00:31 node2 kernel:  [<f8c494ad>] __gfs_read+0x43/0x4a
Apr 29 14:00:31 node2 kernel:  [<f8c4a676>] do_read_buf+0x0/0x104
Apr 29 14:00:31 node2 kernel:  [<f8c494ef>] gfs_read+0x0/0xe
Apr 29 14:00:31 node2 kernel:  [<f8c494fa>] gfs_read+0xb/0xe
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  有這樣的錯誤提示:
# ls /mnt/cluster
ls: /mnt/cluster: Input/output error

誰來幫忙分析一下。

[ 本帖最後由 yman 於 2008-4-29 15:39 編輯 ]
《解決方案》

對比了下node1和node2的進程 發現node2比node1少了下面三個進程
root     31769  0.0  0.0      0     0 ?        S<   11:30   0:01
root     31770  0.0  0.0      0     0 ?        S<   11:30   0:00
root     31771  0.0  0.0      0     0 ?        S<   11:30   0:00
《解決方案》

原帖由 yman 於 2008-4-29 14:28 發表 http://linux.chinaunix.net/bbs/images/common/back.gif
四台GNBD,兩台node。分別將四台gnbd上的/dev/sda6導出到網路中,然後再在兩台node上分別導入所有的/dev/sda6,在其中一台node上用mdadm將這四個/dev/sda6做raid5,,創建/etc/mdadm.conf  並將它copy到另一台nod ...

最有可能是fence的問題,
另外,感覺你做那麼多gndb沒什麼用處,
軟raid貌似沒有什麼實際意義:(
自己測試,這麼玩可以,生產環境,還是不要這麼玩了。
《解決方案》

這裡為什麼要做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全部丟失。

以上是小弟的愚見。
《解決方案》

與MD應該關係不大。

[火星人 ] RHCS+GNBD+GFS+mdadm方案不穩定?已經有382次圍觀

http://coctec.com/docs/service/show-post-7131.html