Phone:18180207355 提供专业Oracle&MySQL数据恢复、性能优化、迁移升级、紧急救援等服务

今天测试破坏votedisk 的情况,分析日志发现了kill block,以前也知道这个知识点,感觉不是很清楚,今天进行跟踪分析一下。

ocssd.log如下:

从上面可以看到Overwrote kill block for voting disk的关键字。
下面通过strace来跟踪ocssd进程,由于occsd是每秒都会去检测,故跟踪几秒就行了,然后截取如下片段:

如上是1s内ossd进程对的操作,可以看到,分别操作了11,14,16,17,写了10和24.

同时利用lsof来查看进程的 socket 信息:

如下是关于上面trace中提到的几个linux函数的解释:

通过/proc/pid/fd 下面的信息,我们可要看到14,17正是occsd进程udp相关的操作,我们知道oracle clusterware的
心跳协议是基于UDP协议的。

从上面的跟踪,我们可以看出,每1s occsd每一秒都会对votedisk 进程读取,读的什么呢?其实就是被称为kill block,
这个block的大小是512 字节。 至于说为什么是512字节,而不是1024呢?这个不清楚,可能是基于os block而言或者说
是基于效率上考虑。

从如下的地方,我们可以看出是读的512 字节:
29627 0.000631 <... pread64 resumed> “SslcLlik\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0″…, 512, 270848) = 512

其中有写操作是针对fd 16,对于的id是446206,可以看到是:
ocssd.bin 29558 oracle 16u IPv4 446206 TCP rac1-priv:49895->rac2-priv:57981 (ESTABLISHED)

很显然这也是跟心跳有关系的。

最后还更新了fd 10,也就是我们的ocr,如下:

29585 0.000027 pwrite64(10, “etoV\1\0\0\0\1\3\n\2\0\0\0\0rac1\0\0\0\0\0\0\0\0\0\0\0\0″…, 512, 8704) = 512

可以看到写的大小也是512字节。估计也是更新一下node状态等信息而已。

我们知道,ocssd 进程通过读votedisk 读取kill block来判断该节点是否正常,这个行为被称为disk 心跳。

从trace可以看出occsd是没有写votedisk的(仅仅是读,获取一个时间戳 ),所以votedisk中内容是空的,这或许也是解释为什么votedisk不需要备份的一个原因。

    分享到:
  • vage

    很不错,值得一看。

    • lizhenxu

      V哥v5

18180207355
加Q咨询