集群并不就是高可靠,常用的构建高可靠的mysql的方法有Active-passive主备模式:使用DRBD实现主 备机的灾容,Heartbeat或者Corosync做心跳监测、服务切换甚至failover,Pacemaker实现服务(资源)的切换及控制等;或者类似的机制。其中主要使用Pacemaker实现了mysql的active-passive高可用集群。一个重要的技术是DRBD:(distributed replication block device)即分布式复制块设备,经常被用来代替共享磁盘。它的工作原理是:在A主机上有对指定磁盘设备写请求时,数据发送给A主机的kernel,然后通过kernel中的一个模块,把相同的数据传送给B主机的kernel中一份,然后B主机再写入自己指定的磁盘设备,从而实现两主机数据的同步,也就实现了写操作高可用。DRBD一般是一主一从,并且所有的读写操作,挂载只能在主节点服务器上进行,,但是主从DRBD服务器之间是可以进行调换的。这里有对 DRBD 的介绍。
HAforNovaDB - OpenStack介绍了只使用共享磁盘而没有使用DRBD,通过Pacemaker实现OpenStack的高可靠。NovaZooKeeperHeartbeat介绍了使用ZooKeeper作心跳检测。MySQL HA with Pacemaker 介绍了使用Pacemaker提供高可靠服务,这也是很常见的解决方案。Galera 是针对Mysql/InnoDB的同步的多master集群的开源项目,提供了很多的优点(如同步复制、读写到任意节点、自动成员控制、自动节点加入、较小延迟等),可以参考。
其它的方案,根据 MySQLPerformance 的说法,MySQL几种高可用解决方案能达到的可用性如下:
一般来说,高可用性也就是建立冗余备份,常用策略有:
集群工作模式。多机互备,这样模式是把每个实例备份多份,没有中心节点,比如分布式对象存储系统Swift、nova-network多主机模式。
自主模式。有时候,解决单点故障(SPoF)可以简单的使用每个节点自主工作,通过去主从关系来减少主控节点失效带来的问题,比如nova-api只负责自己所在节点。
主备模式。常见的模式是主动-被动集群,active-passive,被动节点处于监听和备份模式,故障时及时切换,比如mysql高可用集群、nova-使用Pacemaker和Heartbeat等来实现。
双主模式。这种模式互备互援,RabbitMQ就是active-active集群高可用性,集群中的节点可进行队列的复制。从架构上来说,这样就不用担心passive节点不能启动或者延迟太大了?
总之,对于OpenStack的优化和改进不断,对于OpenStack的部署和应用也在不断尝试和发展。需要实践调优。实践非常重要,好的设计和想法需要实践来验证。
上面分别对OpenStack的各个服务进行了说明,我纯属抛砖引玉。希望多实践交流,更希望有时间的朋友能够把一些方案的部署添加到OneStack/HAStack。关于OpenStack高可用性的讨论和说明,大家可以多看看以下这些地方:
http://docs.openstack.org/
http://wiki.openstack.org
本文出自 “openstack私有云” 博客,谢绝转载!