首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux+dm-多路径:路径删除会导致分段错误、内核空指针取消引用和STONITH。

Linux+dm-多路径:路径删除会导致分段错误、内核空指针取消引用和STONITH。
EN

Server Fault用户
提问于 2011-08-17 20:43:23
回答 1查看 1.9K关注 0票数 1

嗯,我正在设置运行Linux-HA集群。

*起搏器-1.1.5

*开放机构-1.1.4

*多路径-工具-0.4.9

*OpenSuSE 11.4,内核2.6.37

集群配置通过了LinBit的健康检查,所以我对此非常有信心。

使用多路径是因为我们有一个LSI SAS数组通过2个HBA连接到每个主机(每个主机总共4条路径)。我现在要做的是通过从多路径设置中删除路径来测试故障转移功能。

多径路径如下:

代码语言:javascript
复制
pgsql-data (360080e50001b658a000006874e398abe) dm-0 LSI,INF-01-00
size=6.0T features='0' hwhandler='1 rdac' wp=rw
|-+- policy='round-robin 0' prio=0 status=active
| |- 4:0:0:1 sda 8:0   active undef running
| `- 5:0:0:1 sde 8:64  active undef running
`-+- policy='round-robin 0' prio=0 status=enabled
|- 4:0:1:1 sdc 8:32  active undef running
`- 5:0:1:1 sdg 8:96  active undef running

为了模拟丢失路径,我将1回送至/sys/block/{ path }/设备/状态,这会导致路径在多路径上出现失败/错误,如下所示:

代码语言:javascript
复制
pgsql-data (360080e50001b658a000006874e398abe) dm-0 LSI,INF-01-00
size=6.0T features='0' hwhandler='1 rdac' wp=rw
|-+- policy='round-robin 0' prio=0 status=active
| |- 4:0:1:1 sdc 8:32  failed faulty offline
| `- 5:0:1:1 sdg 8:96  active undef  running
`-+- policy='round-robin 0' prio=0 status=enabled
|- 4:0:0:1 sda 8:0   active undef  running
`- 5:0:0:1 sde 8:64  active undef  running

但是,通过观察/var/log/消息,我注意到rdac检查器说路径仍然在上:

代码语言:javascript
复制
multipathd: pgsql-data: sdc - rdac checker reports path is up

另外,让我们回到多路径-l输出--注意失败路径如何仍然在活动组中?它应该被移动到已启用的组中,并且来自enabled的活动/运行路径应该已经取代了它(在active中)。

现在,如果我们沿着另一个活动启用路径sdg,不仅rdac将路径报告为up,而且多路径资源在集群中进入失败状态,两个活动/启用路径都不会取代它,结果是一个分段错误,一个内核错误,无法取消引用一个空点,以及集群STONITHs节点。

代码语言:javascript
复制
db01-primary:/home/kendall/scripts # crm resource show
db01-secondary-stonith     (stonith:external/ipmi) Started 
db01-primary-stonith       (stonith:external/ipmi) Started 
Master/Slave Set: master_drbd [drbd_pg_xlog]
 Masters: [ db01-primary ]
 Slaves: [ db01-secondary ]
Resource Group: ha-pgsql
 multipathd (lsb:/etc/init.d/multipathd) Started  FAILED
 pgsql_mp_fs        (ocf::heartbeat:Filesystem) Started 
 pg_xlog_fs (ocf::heartbeat:Filesystem) Started 
 ha-DBIP-mgmt       (ocf::heartbeat:IPaddr2) Started 
 ha-DBIP    (ocf::heartbeat:IPaddr2) Started 
 postgresql (ocf::heartbeat:pgsql) Started 
 incron     (lsb:/etc/init.d/incron) Started 
 pgbouncer  (lsb:/etc/init.d/pgbouncer) Stopped 
pager-email    (ocf::heartbeat:MailTo) Stopped 

db01-primary:/home/kendall/scripts # multipath -l
pgsql-data (360080e50001b658a000006874e398abe) dm-0 LSI,INF-01-00
size=6.0T features='0' hwhandler='1 rdac' wp=rw
|-+- policy='round-robin 0' prio=0 status=enabled
| |- 4:0:1:1 sdc 8:32  failed faulty offline
| `- 5:0:1:1 sdg 8:96  failed faulty offline
`-+- policy='round-robin 0' prio=0 status=active
|- 4:0:0:1 sda 8:0   active undef  running
`- 5:0:0:1 sde 8:64  active undef  running

下面是显示内核错误的/var/log/消息的摘录

代码语言:javascript
复制
Aug 17 15:30:40 db01-primary multipathd: 8:96: mark as failed
Aug 17 15:30:40 db01-primary multipathd: pgsql-data: remaining active paths: 2
Aug 17 15:30:40 db01-primary kernel: [ 1833.424180] sd 5:0:1:1: rejecting I/O to    offline device
Aug 17 15:30:40 db01-primary kernel: [ 1833.424281] device-mapper: multipath: Failing path 8:96.
Aug 17 15:30:40 db01-primary kernel: [ 1833.428389] sd 4:0:0:1: rdac: array , ctlr 1, queueing MODE_SELECT command
Aug 17 15:30:40 db01-primary multipathd: dm-0: add map (uevent)
Aug 17 15:30:41 db01-primary kernel: [ 1833.804418] sd 4:0:0:1: rdac: array , ctlr 1, MODE_SELECT completed
Aug 17 15:30:41 db01-primary kernel: [ 1833.804437] sd 5:0:0:1: rdac: array , ctlr 1, queueing MODE_SELECT command
Aug 17 15:30:41 db01-primary kernel: [ 1833.808127] sd 5:0:0:1: rdac: array , ctlr 1, MODE_SELECT completed
Aug 17 15:30:42 db01-primary multipathd: pgsql-data: sda - rdac checker reports path is up
Aug 17 15:30:42 db01-primary multipathd: 8:0: reinstated
Aug 17 15:30:42 db01-primary kernel: [ 1835.639635] device-mapper: multipath: adding disabled device 8:32
Aug 17 15:30:42 db01-primary kernel: [ 1835.639652] device-mapper: multipath: adding disabled device 8:96
Aug 17 15:30:42 db01-primary kernel: [ 1835.640666] BUG: unable to handle kernel NULL pointer dereference at           (null)
Aug 17 15:30:42 db01-primary kernel: [ 1835.640688] IP: [<ffffffffa01408a3>] dm_set_device_limits+0x23/0x140 [dm_mod]

还有一个堆栈跟踪,可在http://pastebin.com/gifMj7gu上使用。

multipath.conf可在http://pastebin.com/dw9pqF3Z上使用

有人对此有任何洞察力,以及/或如何进行?

我每次都能重新创造这个。

EN

回答 1

Server Fault用户

回答已采纳

发布于 2011-08-18 16:31:00

好的,因此,仅仅在/sys/block/{dev}/device/state中设置“脱机”并不足以使rdac报告路径处于下线状态。昨天晚上,我花了一些时间和这个部门在一起,拉着SAS的电缆,观察系统的行为。这件事做得很好。不完全是“预期的”,因为当活动路径不走时,它不会从启用的组中被替换,但这是一个不同的问题。故障转移也按预期工作;一旦最后一条路径丢失,集群将关闭数据库和相关资源,并将它们转移到辅助节点。

如果您发现自己处于类似的情况,可以尝试在multipath.conf中将多路径hwhandler设置为"0“;您必须在设备{}部分中设置它。这基本上是禁用路径检查,所以一旦设备离线,它就真的离线了。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/302268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档