集群 MySQL 的加密存储

sys*_*138 5 cluster encryption lvm

我需要在 2.6.32 linux 内核上提供具有静态加密功能的高度可用的 MySQL 数据库。“高可用”部分并不难,但“静态加密”在与 HA 结合使用时被证明是一个挑战。

关键问题在于安装加密存储。在我们所有其他静态加密系统上,有一个命令需要由人工运行,然后提示输入加密密钥。当涉及到服务必须自动启动的集群安排时,这个模型有一个相当明显的缺陷。

我目前不知道如何在 HA 环境中提供静态加密,而不是在同一系统上存储密钥密码。

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

场景 1:CLVM 和集群

  • 一个卷在我的集群成员之间共享。
  • 这个卷的设置大致如下:
    • 物理设备上的 cryptsetup 东西
    • 新加密设备上的 LVM 内容
  • 集群服务被设置为自动加入集群,依靠人工干预。
  • 集群服务通过人类运行的命令启动,该命令提供解密密钥,进而激活 CLVM 内容。

通过这种方式,运行节点可以访问 CLVM 卷,因此它们可以在集群管理器告知时启动服务。节点的重新启动仍然需要人工,并且密码短语永远不会保存在磁盘上的任何地方。

场景 2:DRBD 和集群

  • 在每个集群成员上创建一个卷
  • cryptsetup 东西在物理设备上运行
  • drbd 配置在加密设备的顶部,以在每个节点之间复制它
  • LVM 或文件系统放置在 drbd 卷的顶部
  • 集群服务被设置为自动加入集群,依靠人工干预。
  • 集群服务由提供解密密钥的人启动,这反过来使 LVM(或文件系统)可见但未安装。

与 CLVM 设置一样,节点在了解可能共享的存储之前不会加入集群。


问题是,我不确定上述任何一种方式是否有效。两者都假设可以在加密卷(例如pvcreate /dev/mapper/cryptmysql)之上分层 LVM PV 。这可能是不可能的。

the*_*bit 3

主要的挑战似乎是按键输入的人为干预。对此有一些帮助:dm-crypt 支持 TPM,这可能适用于您的平台。有关配置详细信息,请参阅此 IBM 蓝图LUKS/cryptsetup还支持从文件/标准输入读取槽密钥。如果您可以将密钥安全地存储在某个地方(例如智能卡上),这可能是一个可行的选择。

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