磁盘阵列卡需要设置write through, 如果设置为write back(回写), 可能硬件卡脏读

单测程序使用了极简的C++代码模拟了Oceanbase4.1的日志持久化以及消费逻辑,基本确定是存储设备本身的问题。

临时解决方案:

  1. 重启才能解决,但基于回传的日志以及core文件,IBM的这块SSD出现问题的频率会非常高;
  2. 尝试换一块不同厂商的SSD。

跟/data/oceanbase/redolog这个挂载点使用率高有没有影响
/dev/mapper/vg_ob-lv_red 200G 180G 20G 91% /data/oceanbase/redolog

在另一台空间使用率比较低的同构机器上测试结果如下:
-bash-4.2$ ./a.out >/tmp/test.log
a.out: test.cpp:153: void Reader::read(int64_t): Assertion `false’ failed.
Aborted (core dumped)
-bash-4.2$ du -sh *
72K a.out
500K core.413914
101G ob_unittest
8.0K test.cpp
-bash-4.2$ vi /tmp/test.log
-bash-4.2$ cd ob_unittest/
-bash-4.2$ ll
total 104857604
-rw-rw-r-- 1 admin admin 107374182400 May 22 11:25 testfile

test_result.tar (2).gz (96.2 KB)

还有,有什么方法能提前检测ssd盘是否兼容的吗?

用我这个单测,如果长时间不出,基本就是没问题的,IBM那边也可以反馈下这个问题。

有没推荐的SSD厂商品牌?

可以试试Intel P4510,SAMSUNG PM9A3。

您好,这个问题我们又做了一些测试,有发现如果把磁盘做成raid1或者raid10,就不行,做jbod模式是正常的,想请问一下,咱们有没有推荐磁盘的冗余模式

目前测试结果来看,
1.当多块磁盘做成raid0,raid10,raid1测试程序都是运行异常,报错信息都为
a.out: test.cpp:153: void Reader::read(int64_t): Assertion `false’ failed.
Aborted (core dumped)

2.同样的硬件配置的物理机异常退出,报错信息同上,物理机上再建的虚拟机输出结果符合预期的(长时间不出结果)运行正常

3.单块盘jbod模式,测试代码输出结果是符合预期的(长时间不出结果)运行正常

4.目前主机都有使用阵列卡来挂载磁盘,测试来看有使用阵列卡时就有问题(a.out: test.cpp:153: void Reader::read(int64_t): Assertion `false’ failed.
Aborted (core dumped)),未使用阵列卡时正常。所以想咨询一下咱们这个产品是否支持阵列卡,对阵列卡配置是否有要求,能否提供配置文档?或推荐的服务器配置?

可以看下阵列卡的cache模式,write back 还是 write through,如果是write through的话,可以换成write back。

最近一次测试raid0时,cache的模式是write back,也是不行
TJ)KQ%L4AWJ9TC5I$KC9QA

抱歉,我说反了,应该改成write through,write back表示数据写到cache中就返回了。

好的,我们测试一下

改为write through,test.cpp测试结果正常了,感谢哈

方便的话,raid卡厂商以及型号麻烦发下。

厂商:AVAGO
型号:ThinkSystem RAID 930-24i 4GB Flash 12Gb Adapter

请教一下,如果OB集群是部署在exsi虚拟机上,vm宿主机上的阵列卡也需要设置成 write through 吗?

要的,无论上层是否虚拟化,磁盘访问都需要走到宿主机上。

这样性能不降低了吗???? 因为write through没有用到阵列卡的cache

intel的cache bug,关于OB 数据和日志选择raid 磁盘的疑问
ob侧需要暂时通过设置write through规避。

OB 4.2.1 和 OB 4.2.2 两个版本,阵列卡采用默认的write-back模式,没有遇到这个问题。 OB 4.1 版本确实存在这个问题。