AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 413042
Accepted
sysadmin1138
sysadmin1138
Asked: 2012-08-01 12:49:27 +0800 CST2012-08-01 12:49:27 +0800 CST 2012-08-01 12:49:27 +0800 CST

集群 MySQL 的加密存储

  • 772

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

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

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

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

场景 1:CLVM 和集群

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

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

场景二:DRBD & 集群

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

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


问题是,我不确定以上任何一种是否以这种方式工作。两者都假设可以将 LVM PV 置于加密卷之上(例如pvcreate /dev/mapper/cryptmysql)。这可能是不可能的。

lvm
  • 2 2 个回答
  • 1244 Views

2 个回答

  • Voted
  1. Best Answer
    the-wabbit
    2012-08-01T13:27:40+08:002012-08-01T13:27:40+08:00

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

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

    • 3
  2. sysadmin1138
    2012-08-03T11:18:56+08:002012-08-03T11:18:56+08:00

    事实证明,正如 syneticon-dj 所建议的那样,这对于 LVM 是完全可行的。从那时起,我已经验证它适用于集群配置。然而,这样做并不像您想象的那么容易。

    在 cLVM 卷组可见之前,它必须在cryptsetup luksOpen需要加密的设备上通过解密。这必然会在集群服务启动后发生,因此基于它的任何资源都不应该是任何关键设备(例如 stonith 设备)的成员。

    设置集群与往常一样,但有一些不同:

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

    由于节点需要手动干预才能符合故障转移的条件,因此在故障转移群集中拥有两个以上的节点是个好主意。

    正常创建卷组和逻辑卷后,安装 MySQL。此时安装按照正常的集群安装运行。

    当节点重新启动时:

    1. 集群服务将在启动时启动,节点将加入集群。但是,由于它对 MySQL 卷不可见,因此不符合故障转移条件。
    2. 操作员通过 ssh 连接到节点,并运行上面创建的解密脚本,提示输入解密密钥。
    3. 该脚本运行并在 中创建所需的映射/dev/mapper,然后 LVM 将获取该映射。
    4. LVM 服务应该会自动刷新并查看新的卷组元数据。
    5. 此时集群服务将看到 MySQL 卷组可用,并且该节点将有资格进行故障转移。
    • 1

相关问题

  • OpenBSD 和文件系统快照

  • 卷组空间不足。我该如何收回它?

  • LVM 快照是这样工作的吗?

  • LVM 和快照

  • 如何在 Ubuntu 上挂载 LVM 分区?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve