3par不支持严格意义的存储双活,可是它的PeerPersistence功能在存储双数据中心的配置中,很是有意思。在此咱们以RAC应用为例对其作一个分析。服务器
先上一张架构图,看明白这个架构是怎么回事。网络
这个架构里面有两个模块:一个是上面的服务器+ORACLE RAC构成的,由RAC向外提供服务,并管理服务器集群应对可能的物理设备故障,还实现了负载均衡分配;另外一个是由3par存储和SAN网络交换机以及运行在虚拟机之上的仲裁服务器构成,存储空间经过peer persistence展示给服务器和RAC软件。架构
若是看过我以前的文章,会有一个感受:它和HP XP7的双活方案很像耶!XP7的虚拟磁盘阵列是存储到主机的中间层,3par Peer Persistence也是中间层,并且都有仲裁机制。为何它不是双活呢?负载均衡
这就要谈到3par Peer Persistence与HP XP7对主机IO路由的分配了:异步
l XP7的虚拟磁盘阵列中的会把接收到的IO根据必定的(好比本地存储优先)把IO发送到两个磁盘阵列中去。一个LUN在两个磁盘阵列的镜像能够同时处理主机发来的IO,没有主从的区别。XP7实际是LUN在两个阵列上的镜像均可以处理主机IO,可是它们的WWN是同样的,那么主机是如何知道哪一个LUN在本地的呢?ide
l 3par Peer Persistence设置的LUN存储有主从区别,主机来的IO都会先到主存储,再由主存储同步到从存储。对于主机,存储路径的管理和切换,经过ALUA协议来实现。测试
下面这张图显示了二者在IO路径上的不一样,对于3par,两条×××IO路径在正常状态下是非激活状态的,没有IO流过;对于XP7则否则,两条×××路径处于激活状态,分担部分绿色路径上的IO。优化
3par的peer persistence没有了×××路径,又是如何管理阵列的呢?它经过ALUA (AsymmetricLogical Unit Access异步逻辑单元访问)协议,把主阵列设置为主动/优化(active/optimized)状态,把从阵列设置为主动/非优化(active/unoptimized)状态。这样主机天然把IO都发送到主阵列上去了。当主阵列出现故障时,peerpersistence又会反过来把从阵列设置为主动/优化(active/optimized)状态,把主阵列设置为主动/非优化(active/unoptimized)状态。图示以下:spa
至此,是否能够说XP7的双活是否必定优于3par的peer persistence呢?表面上看是的,缘由以下:orm
1. 因为两个阵列同时处于激活状态,切换会很快,理论上主机和RAC软件无感知。
2. 在XP7的双活状况下,两个阵列同时处理主机IO,均衡负载。
如今,咱们对两种状况分别做更深刻的分析:
1. 存储切换速度问题,须要分两种状况讨论
l 正常状况下的手工切换:二者双活切换速度都很是快,业务应用软件不会有感知。
l 非正常状况下的自动切换:咱们在3par拷贝大文件的时候作过暴力测试,在使用了远端仲裁服务器仲裁的状况下,拷贝操做暂停了2~5秒的时间,而后继续进行,操做没有中断。这个延时是由仲裁服务器须要对两个存储状态进行断定必须的代价。全部仲裁服务器为了防止误判,都会须要一段时间延时来断定存储状态。XP双活也不例外。
2. 两个阵列同时处理主机IO,均衡负载问题:
l 虽然两个阵列能够同时处理主机IO,可是为了保持数据一致,这些IO中的写操做必须同步到另一个阵列上。也就是说下图中的第2和第3步骤没法节省。只有第1和第4步骤节省了传输时间。可是,双活由于复杂的锁机制带来了阵列内部软件处理时延。这个时延是否可以抵消第1和第4步骤的传输时间节省,值得商榷。还有一点须要特别注意的是:随着系统负荷增加,IO流量越大,处理时延越长。
l 通常而言,一个阵列上每每存有多个应用的数据,把这些应用数据分组,分别设置不一样主存储能够达到手工负载均衡的效果。可是要注意:一个应用的数据必须设置到一个组里面,不能够经过分组设置不一样的主存储。