群集MySQL的encryption存储

我有一个要求是在2.6.32的linux内核上提供一个高度可用的MySQL数据库和静态encryption。 “高可用性”部分并不难,但与HA结合使用时,“静态encryption”被certificate是一个挑战。

关键问题是安装encryption存储。 在我们所有其他的静态encryption系统中,都有一个命令需要由一个人运行,然后被提示inputencryption密钥。 这种模式在集群安排中有一个相当明显的缺陷,那就是服务必须自动启动。

目前,我对如何在高可用性环境下提供静态encryption以及不在同一系统上存储密钥密码短语感到茫然。

我可以看到两种可能的情况,其中任何一种都可以与我的环境一起工作,但是我不确定这些细节如何使它们起作用。 或者即使这是可能的。

场景1:CLVM和群集

  • 卷在我的群集成员之间共享。
  • 本卷大致设置为:
    • cryptsetup东西在物理设备上
    • LVM的东西在新的crypt设备上
  • 群集服务设置为自动join群集,依靠手动干预。
  • 群集服务通过人运行的命令启动,提供解密密钥,然后激活CLVM的东西。

这样,正在运行的节点就可以访问CLVM卷,因此它们可以在集群pipe理器告知时启动服务。 节点的重新启动仍然需要一个人,并且密码密码从不保存在任何地方的磁盘上。

情景2:DRBD和群集

  • 每个群集成员上都创build一个卷
  • cryptsetup的东西在物理设备上运行
  • drbd被configuration在encryption的设备之上,以便在每个节点之间进行复制
  • LVM或文件系统放置在drbd卷的顶部
  • 群集服务设置为自动join群集,依靠手动干预。
  • 群集服务由提供解密密钥的人员启动,这反过来使得LVM(或文件系统)可见但未挂载。

与CLVM设置一样,节点只有在可以看到可能共享的存储之前才join群集。


事情是,我不确定上述任何一种是如何工作的。 两者都假设可以在encryption卷上分层LVM PV(例如pvcreate /dev/mapper/cryptmysql )。 这可能是不可能的。

主要挑战似乎是人为干涉关键入口。 对此有一些帮助:dm-crypt支持TPM,它可能适用于您的平台。 有关configuration详细信息,请参阅此IBM蓝图 。 此外, LUKS / cryptsetup支持从文件/从标准input读取插槽密钥。 如果你可以在任何地方安全地存储你的密钥( 比如在智能卡上 ),这可能是一个可行的select。

至于你的问题,你是否可以在dm-crypt卷上拥有一个LVM PV:你可以,只需要在插槽解锁后运行pvscan / vgchange -a -y 。 几年前,我们已经运行了这种设置,内核更老。 最后,由于性能方面的原因,我们放弃了将SED用于具有静态数据encryption要求的应用程序(当时dm-crypt用于每个encryption设备使用单个线程,这导致在我们的设置CPU的瓶颈)。

事实certificate,这是完全可以与LVM的syneticon-djbuild议。 从那以后,我已经validation它可以在群集configuration上工作。 但是,这样做并不像你想象的那么容易。

在cLVM卷组可见之前,必须通过需要encryption的设备上的cryptsetup luksOpen进行解密。 这种情况必然发生在集群服务开始之后,因此基于它的任何资源都不应该成为诸如stonith设备等关键任务的成员。

设置群集与以往一样,但有一些区别:

  • 在群集中有一个非encryption的存储设备是个好主意,它可以被stonith( external / sbd type )使用。
  • 当所有节点通过相同的cryptsetup命令打开encryption卷并映射到相同的设备名(例如cryptsetup luksOpen /dev/sdd cryptmysql )时,创buildclvm资源。
  • 在由cryptsetup创build的设备上创build群集卷组(例如, vgcreate ClusterMySQLVG /dev/mapper/cryptmysql
  • 创build一个简单的bash脚本以每次都以相同的方式运行解密,这将由操作员重新启动后使用,以获得卷访问。

由于节点需要手动干预才有资格进行故障转移,故障转移群集中有两个以上的节点是个好主意。

一旦正常创build卷组和逻辑卷,就安装MySQL。 此时安装按照正常的群集安装运行。

当一个节点重新启动时:

  1. 群集服务将在启动时启动,节点将join群集。 但是,由于它不具备MySQL卷的可见性,因此不具备故障切换的资格。
  2. 操作员通过ssh连接到节点,并运行上面创build的解密脚本,该脚本提示解密密钥。
  3. 脚本运行并在/dev/mapper创build所需的映射,然后LVM启动。
  4. LVM服务应自动刷新并查看新的卷组元数据。
  5. 此时,群集服务将看到My​​SQL卷组可用,并且节点将有资格进行故障转移。