环境准备与前置条件
在Linux系统上配置高可用的数据加密前,需要先确认系统版本和所需工具是否就绪。本文以CentOS 7为例,其他主流Linux发行版的操作逻辑基本一致,仅包管理命令存在差异。首先需要安装LUKS相关的工具包,LUKS是目前Linux下最常用的磁盘加密标准,支持多种加密算法和密钥管理机制。

执行以下命令安装所需依赖:
# 安装cryptsetup工具,用于管理LUKS加密 yum install -y cryptsetup # 安装集群管理工具,用于高可用架构搭建 yum install -y pacemaker corosync pcs # 检查系统是否支持加密模块 lsmod | grep dm_crypt
LUKS磁盘加密配置
创建加密分区
首先需要对目标磁盘进行分区操作,假设我们使用/dev/sdb作为加密存储磁盘,先创建分区表并划分分区。
# 对磁盘进行分区,这里使用fdisk工具 fdisk /dev/sdb # 进入交互界面后依次输入n创建新分区,p选择主分区,默认分区号,默认起始扇区,默认结束扇区,w保存退出 # 格式化分区为LUKS加密格式,设置加密密码 cryptsetup luksFormat /dev/sdb1 # 输入大写的YES确认操作,然后设置加密密码,密码需要妥善保存
打开加密分区并创建文件系统
加密分区创建完成后,需要打开加密映射才能正常使用,打开后可以像普通分区一样创建文件系统并挂载。
# 打开加密分区,映射名称为encrypted_data cryptsetup luksOpen /dev/sdb1 encrypted_data # 输入之前设置的加密密码 # 在映射设备上创建ext4文件系统 mkfs.ext4 /dev/mapper/encrypted_data # 创建挂载目录 mkdir -p /data/encrypted # 挂载加密分区 mount /dev/mapper/encrypted_data /data/encrypted # 检查挂载状态 df -h | grep encrypted
高可用架构搭建
集群基础配置
高可用架构需要多台Linux节点组成集群,避免单节点故障导致加密数据无法访问。假设我们有两台节点node1和node2,先配置节点间的互信和集群基础服务。
# 两台节点都执行,设置主机名 hostnamectl set-hostname node1 # node2节点设置为node2 # 配置hosts文件,添加节点解析 echo "192.168.0.1 node1" >> /etc/hosts echo "192.168.0.2 node2" >> /etc/hosts # 两台节点都执行,启动pcs服务并设置开机自启 systemctl start pcsd systemctl enable pcsd # 设置hacluster用户密码,用于集群管理 passwd hacluster # 在node1节点上认证集群节点 pcs cluster auth node1 node2 -u hacluster -p 设置的密码 # 创建集群,名称为encrypted_cluster pcs cluster setup --name encrypted_cluster node1 node2 # 启动集群 pcs cluster start --all pcs cluster enable --all
配置加密资源高可用
集群启动后,需要将加密分区的挂载、解密操作配置为集群资源,实现自动故障转移。
# 创建LUKS解密资源,使用ocf:heartbeat:Luks资源代理
pcs resource create luks_decrypt ocf:heartbeat:Luks
device="/dev/sdb1"
mapper_name="encrypted_data"
password="加密密码"
op monitor interval=30s
# 创建文件系统挂载资源,依赖解密资源
pcs resource create encrypted_fs ocf:heartbeat:Filesystem
device="/dev/mapper/encrypted_data"
directory="/data/encrypted"
fstype="ext4"
op monitor interval=30s
# 设置资源启动顺序,先解密再挂载
pcs constraint order luks_decrypt then encrypted_fs
# 设置资源在同一节点运行
pcs constraint colocation add encrypted_fs with luks_decrypt
# 检查资源状态
pcs resource status
密钥安全优化
直接将加密密码写在集群配置中存在安全风险,建议使用密钥文件代替明文密码,提升密钥管理的可靠性。
# 在节点上生成密钥文件 dd if=/dev/urandom of=/etc/luks_key bs=512 count=1 # 将密钥文件添加到LUKS加密分区 cryptsetup luksAddKey /dev/sdb1 /etc/luks_key # 修改集群资源配置,使用密钥文件 pcs resource update luks_decrypt password="" keyfile="/etc/luks_key" # 设置密钥文件权限,仅root可读取 chmod 600 /etc/luks_key # 将密钥文件同步到另一个节点,保证故障转移时可用 scp /etc/luks_key root@node2:/etc/luks_key ssh node2 "chmod 600 /etc/luks_key"
故障排查与验证
配置完成后可以模拟节点故障,验证高可用效果。比如在node1节点上手动停止集群服务,观察资源是否自动转移到node2节点。
# 在node1节点停止集群服务 pcs cluster stop node1 # 在node2节点检查资源状态,确认资源已转移 pcs resource status # 检查加密分区是否正常挂载 df -h | grep encrypted # 测试数据读写 echo "test data" > /data/encrypted/test.txt cat /data/encrypted/test.txt
如果出现资源启动失败的情况,可以通过journalctl -xe查看系统日志,或者pcs resource debug-start 资源名查看资源启动的详细错误信息,根据提示调整配置即可。