0.概述
目前在虚拟化上部署RAC主要是以下3个场景
1是VMWARE的虚拟化(私有云);
2是国产厂商基于KVM的虚拟化(私有云);
3是公有云,由云厂商给你提供虚拟主机和虚拟磁盘。
这里我只对前2个熟悉一些,第3个我就不讲了,因为你也没啥太多可调整的空间,资源都是云厂商给你固定好的,就不要谈啥性能了。
1.vmware虚拟化上搭建RAC
CPU
CPU内存上来说,就是做好资源保障,尽量把份额调到最高。配置好预留主频大小。
内存
做到分配的内存大小=预留内存大小。
网络
使用空余的网络,单独配置1个交换机,用于RAC之间走心跳。
磁盘
可以择的是使用裸磁盘直接挂RDM给虚拟机或者是配置厚置备置零的磁盘做为ASM磁盘。
我下面的例子是用了厚置备备置零的磁盘(创建起来比较慢,因为需要分配完全的空间,但是性能最好,相比RDM稍微逊色一些)。
首先是可以编辑两台虚拟机配置高级参数,增加disk.EnableUUID=true让虚拟VMDK可以在系统里显示scsi_id。不改这个的话,用UDEV绑定SCSI_ID这种就没法操作了,因为执行
/usr/lib/udev/scsi_id -g -u -d /dev/sdc
会获取不到值。
另1个需要注意的是,磁盘的“共享”要改为“多写入器”,且磁盘要为“独立-持久”不受快照影响。
磁盘的SCSI控制器建议是不使用默认的0,从scsi1:0开始分配磁盘。
2.是国产厂商虚基于KVM的虚拟化
这里我以H3C的虚拟化平台为例(其它几家大厂华为、深信服、浪潮的原理基本相似都是KVM)。
CPU
配置好预留主频大小,调度优先级调到高,CPU工作模式可以选为直通。
一般整机还有个单独的选项,把IO优先级调到最高。
内存
做到分配的内存大小=预留内存大小,调度优先级调到高。
网络
使用空余的网络,单独配置1个交换机,用于RAC之间走心跳,使用高速网卡。
存储
华三的官方建议是让你使用裸设备,不使用厚置备RAW虚拟磁盘。
据他们400反馈,实验室测试结果是使用裸设备,要比直接使用RAW这种厚置备性能上提升10-30%左右(华为的我也问过,也是让你直接用裸磁盘来做)。
裸盘需要在每台物理机上创建(这样方便以后RAC节点HA,当然也可以只配置所在的物理机)
在存储池界面,点添加
类型选择FC网络存储,并输入显示的名(建议与存储端的LUN名称对应,方便维护)
选中LUN的WWN,点增加,最后点完成,创建成功
他们的官方文档是建议你用ASMLIB来绑定磁盘,因为默认磁盘没有唯一标识,两个RAC节点识别到的磁盘序列号不一致。
后来沟通的结果是,也可以通过修改裸磁盘的序列号Serial,来绑定唯一值(关机修改,再开机,这点比公有云好,使用公有云做RAC的话,估计你只能用ASMLIB/RAW/或者UDEV直接绑分区名)。
这样的话,你就可以用UDEV绑定ATTR{serial}来实现磁盘绑定,替代ASMLIB。
其实你能配置明白的话,ASMLIB和UDEV都没啥毛病。
修改之后可以查看两个节点的/dev/disk/by-id来确认,对应的值
总结
我还是不建议在虚拟化上跑RAC的,真有数据库的需求,搞几台物理机跑多好。
如果费用有限且负载不是很高的系统,可以这么部署,毕竟各家的都有亲自下场认证的,稳定性可以不用怀疑。
但是虚拟化这边资源控制不做好,是真的会影响运行情况。
比如有的小伙伴就反馈了,公有云上的RAC性能不稳定,服务商也不会承认他们的存储性能有问题(云厂商用的都是分布式存储块,你说没有延迟鬼才信,跑虚拟机没事,跑数据库那高并发上来肯定有影响)。