|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
引言
在当今数据驱动的世界中,高效、可靠的存储管理对于企业IT基础设施至关重要。CentOS作为企业级Linux发行版,提供了强大的存储管理功能和工具,使管理员能够构建高性能、高可用性的存储解决方案。本文将带您从基础概念开始,逐步深入到高级存储配置技术,帮助您全面掌握CentOS环境下的企业级数据管理技能,从而显著提升系统性能和可靠性。
无论您是系统管理员、DevOps工程师还是IT架构师,本文都将为您提供实用的知识和技能,使您能够设计、实施和维护复杂的存储解决方案。我们将通过详细的解释、实际案例和命令示例,确保您能够理解并应用这些技术到实际工作环境中。
CentOS存储基础
在深入高级存储配置之前,我们需要了解CentOS中的基本存储概念和工具。这些基础知识是构建更复杂存储解决方案的基石。
存储设备识别
在CentOS中,存储设备通常被识别为块设备,主要有以下几种命名方式:
• IDE/PATA设备:/dev/hda,/dev/hdb等
• SATA/SCSI/SAS设备:/dev/sda,/dev/sdb等
• NVMe设备:/dev/nvme0n1,/dev/nvme0n2等
您可以使用以下命令查看系统中的存储设备:
- # 列出所有块设备
- lsblk
- # 查看磁盘详细信息
- fdisk -l
- # 查看SCSI/SATA设备
- lsscsi
复制代码
文件系统基础
CentOS支持多种文件系统,每种都有其特点和适用场景:
• ext4: 默认文件系统,稳定可靠,适用于大多数场景
• XFS: 高性能文件系统,特别适合大文件和高并发访问
• Btrfs: 新一代文件系统,支持快照、压缩和校验等高级功能
• ZFS: 企业级文件系统,提供数据完整性保护、快照和复制功能
基本存储工具
CentOS提供了多种工具用于存储管理:
• fdisk/parted: 磁盘分区工具
• mkfs: 创建文件系统
• mount/umount: 挂载和卸载文件系统
• df/du: 查看磁盘使用情况
• iostat: 监控I/O性能
- # 查看磁盘使用情况
- df -h
- # 查看目录大小
- du -sh /path/to/directory
- # 监控I/O性能
- iostat -xz 2
复制代码
磁盘分区与格式化
正确的磁盘分区和格式化是存储管理的基础步骤。在这一部分,我们将详细介绍如何在CentOS中进行磁盘分区和格式化操作。
MBR与GPT分区表
在开始分区之前,需要了解两种主要的分区表格式:
• MBR (Master Boot Record): 传统分区表,支持最多4个主分区或3个主分区加1个扩展分区,最大支持2TB磁盘
• GPT (GUID Partition Table): 现代分区表,支持最多128个分区,适用于大容量磁盘(超过2TB)
对于新系统和大容量磁盘,推荐使用GPT分区表。
使用fdisk进行分区
fdisk是一个传统的磁盘分区工具,适用于MBR分区表:
- # 启动fdisk工具
- fdisk /dev/sdb
- # 在fdisk交互界面中
- Command (m for help): n # 创建新分区
- Partition type:
- p primary (0 primary, 0 extended, 4 free)
- e extended
- Select (default p): p # 选择主分区
- Partition number (1-4, default 1): 1 # 分区号
- First sector (2048-209715199, default 2048): # 使用默认起始扇区
- Last sector, +sectors or +size{K,M,G,T,P} (2048-209715199, default 209715199): +10G # 分配10GB空间
- Command (m for help): w # 保存并退出
复制代码
使用parted进行分区
parted是一个更现代的分区工具,支持MBR和GPT分区表:
- # 启动parted工具
- parted /dev/sdc
- # 在parted交互界面中
- (parted) mklabel gpt # 创建GPT分区表
- (parted) mkpart primary ext4 0% 10GB # 创建10GB的主分区
- (parted) print # 查看分区表
- (parted) quit # 退出
复制代码
格式化分区
创建分区后,需要格式化为文件系统才能使用:
- # 格式化为ext4文件系统
- mkfs.ext4 /dev/sdb1
- # 格式化为XFS文件系统
- mkfs.xfs /dev/sdc1
- # 格式化为Btrfs文件系统
- mkfs.btrfs /dev/sdd1
复制代码
挂载文件系统
格式化后,需要将文件系统挂载到目录树中:
- # 创建挂载点
- mkdir -p /data/storage
- # 临时挂载
- mount /dev/sdb1 /data/storage
- # 永久挂载(编辑/etc/fstab)
- echo "/dev/sdb1 /data/storage ext4 defaults 0 0" >> /etc/fstab
- # 挂载所有fstab中定义的文件系统
- mount -a
复制代码
自动挂载配置
为了确保系统重启后自动挂载文件系统,需要正确配置/etc/fstab文件:
- # 查看文件系统UUID
- blkid /dev/sdb1
- # 编辑fstab文件
- vi /etc/fstab
- # 添加以下行(使用UUID而不是设备名更可靠)
- UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data/storage ext4 defaults 0 0
复制代码
逻辑卷管理(LVM)
逻辑卷管理(LVM)是CentOS中一种强大的存储管理技术,它提供了比传统分区更灵活的存储管理方式。LVM允许您动态调整存储大小,创建快照,以及在多个物理磁盘上分布数据。
LVM基本概念
LVM由以下几个组件组成:
• 物理卷(Physical Volume, PV): 物理磁盘或分区,是LVM的基础存储单元
• 卷组(Volume Group, VG): 一个或多个物理卷的集合,形成一个存储池
• 逻辑卷(Logical Volume, LV): 从卷组中分配的虚拟分区,可以像普通分区一样格式化和挂载
LVM配置步骤
首先,需要将物理磁盘或分区初始化为物理卷:
- # 创建分区(如果需要)
- fdisk /dev/sdb
- # 在fdisk中创建分区并设置类型为8e(Linux LVM)
- # 初始化物理卷
- pvcreate /dev/sdb1
- pvcreate /dev/sdc1
- # 查看物理卷信息
- pvdisplay
- pvs
复制代码
将一个或多个物理卷组合成卷组:
- # 创建卷组
- vgcreate vg_data /dev/sdb1 /dev/sdc1
- # 查看卷组信息
- vgdisplay
- vgs
复制代码
从卷组中分配空间创建逻辑卷:
- # 创建10GB的逻辑卷
- lvcreate -L 10G -n lv_data vg_data
- # 使用卷组的所有空间创建逻辑卷
- lvcreate -l 100%FREE -n lv_backup vg_data
- # 查看逻辑卷信息
- lvdisplay
- lvs
复制代码- # 格式化逻辑卷
- mkfs.xfs /dev/vg_data/lv_data
- # 创建挂载点
- mkdir -p /data/lvm_storage
- # 挂载逻辑卷
- mount /dev/vg_data/lv_data /data/lvm_storage
- # 添加到fstab实现自动挂载
- echo "/dev/vg_data/lv_data /data/lvm_storage xfs defaults 0 0" >> /etc/fstab
复制代码
LVM高级操作
LVM的一个主要优势是能够动态调整逻辑卷大小:
- # 扩展逻辑卷(增加5GB)
- lvextend -L +5G /dev/vg_data/lv_data
- # 扩展逻辑卷使用卷组所有剩余空间
- lvextend -l +100%FREE /dev/vg_data/lv_data
- # 对于XFS文件系统,需要扩展文件系统
- xfs_growfs /data/lvm_storage
- # 对于ext4文件系统,使用以下命令
- resize2fs /dev/vg_data/lv_data
复制代码
缩减逻辑卷需要更多小心,必须先缩减文件系统,再缩减逻辑卷:
- # 检查文件系统
- e2fsck -f /dev/vg_data/lv_data
- # 缩减文件系统(例如缩减到8GB)
- resize2fs /dev/vg_data/lv_data 8G
- # 缩减逻辑卷
- lvreduce -L 8G /dev/vg_data/lv_data
复制代码
LVM快照是逻辑卷的即时副本,非常适合备份或测试:
- # 创建快照(需要足够的空闲空间)
- lvcreate -L 1G -s -n lv_data_snapshot /dev/vg_data/lv_data
- # 挂载快照
- mkdir -p /mnt/snapshot
- mount /dev/vg_data/lv_data_snapshot /mnt/snapshot
- # 使用快照后,可以卸载并删除
- umount /mnt/snapshot
- lvremove /dev/vg_data/lv_data_snapshot
复制代码
当需要更多存储空间时,可以向卷组添加新的物理卷:
- # 初始化新的物理卷
- pvcreate /dev/sdd1
- # 将物理卷添加到卷组
- vgextend vg_data /dev/sdd1
复制代码
LVM镜像与条带化
LVM还支持创建镜像和条带化逻辑卷,以提高性能或可靠性:
- # 创建镜像逻辑卷(数据在两个物理卷上复制)
- lvcreate -L 5G -m1 -n lv_mirror vg_data
- # 创建条带化逻辑卷(数据分布在多个物理卷上)
- lvcreate -L 10G -i2 -I64 -n lv_striped vg_data
复制代码
软件RAID配置
RAID(Redundant Array of Independent Disks)是一种通过组合多个磁盘来提高性能、可靠性或两者兼备的技术。CentOS提供了强大的软件RAID功能,称为mdadm(Multiple Devices admin),允许您在不依赖硬件RAID控制器的情况下配置RAID。
RAID级别概述
不同的RAID级别提供不同的特性和优势:
• RAID 0: 条带化,提高性能,无冗余
• RAID 1: 镜像,提供冗余,需要两个磁盘
• RAID 5: 分布式奇偶校验,提供冗余和良好的读性能,至少需要三个磁盘
• RAID 6: 双分布式奇偶校验,提供更高的冗余,至少需要四个磁盘
• RAID 10: 镜像+条带化,提供高性能和冗余,至少需要四个磁盘
使用mdadm配置软件RAID
- # 安装mdadm
- yum install mdadm -y
复制代码
为RAID准备磁盘(这些例子假设使用/dev/sdb, /dev/sdc, /dev/sdd和/dev/sde):
- # 为每个磁盘创建分区
- for i in b c d e; do
- fdisk /dev/sd$i <<EOF
- n
- p
- 1
- t
- fd
- w
- EOF
- done
复制代码- # 创建RAID 1设备
- mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
- # 查看RAID状态
- cat /proc/mdstat
- mdadm --detail /dev/md0
复制代码- # 创建RAID 5设备
- mdadm --create /dev/md1 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
- # 查看RAID状态
- cat /proc/mdstat
- mdadm --detail /dev/md1
复制代码- # 创建RAID 10设备
- mdadm --create /dev/md2 --level=10 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
- # 查看RAID状态
- cat /proc/mdstat
- mdadm --detail /dev/md2
复制代码- # 格式化RAID设备
- mkfs.xfs /dev/md0
- # 创建挂载点
- mkdir -p /data/raid1
- # 挂载RAID设备
- mount /dev/md0 /data/raid1
- # 添加到fstab实现自动挂载
- echo "/dev/md0 /data/raid1 xfs defaults 0 0" >> /etc/fstab
复制代码
为了确保系统重启后能够正确识别RAID设备,需要保存RAID配置:
- # 保存RAID配置
- mdadm --detail --scan >> /etc/mdadm/mdadm.conf
- # 更新initramfs
- dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
复制代码
RAID设备管理
- # 查看所有RAID设备状态
- cat /proc/mdstat
- # 查看特定RAID设备详细信息
- mdadm --detail /dev/md0
- # 查看RAID设备信息
- mdadm --query /dev/md0
复制代码- # 添加备用磁盘到RAID 1
- mdadm --add /dev/md0 /dev/sdd1
复制代码- # 将磁盘标记为故障
- mdadm --fail /dev/md0 /dev/sdb1
- # 移除故障磁盘
- mdadm --remove /dev/md0 /dev/sdb1
复制代码- # 添加新磁盘
- mdadm --add /dev/md0 /dev/sde1
- # 观察重建过程
- watch cat /proc/mdstat
复制代码- # 向RAID 5添加新磁盘
- mdadm --add /dev/md1 /dev/sde1
- # 扩展RAID设备
- mdadm --grow /dev/md1 --raid-devices=4
- # 扩展文件系统(对于XFS)
- xfs_growfs /data/raid5
- # 对于ext4文件系统
- resize2fs /dev/md1
复制代码
RAID性能优化
- # 创建RAID时设置条带大小(例如64KB)
- mdadm --create /dev/md0 --level=5 --raid-devices=3 --chunk=64 /dev/sdb1 /dev/sdc1 /dev/sdd1
- # 对于现有RAID,可以使用以下命令查看条带大小
- mdadm --detail /dev/md0 | grep "Chunk Size"
复制代码- # 设置RAID为写回模式(提高性能)
- echo write_back > /sys/block/md0/md/safe_mode_delay
- # 设置RAID为直写模式(提高数据安全性)
- echo write_through > /sys/block/md0/md/safe_mode_delay
复制代码
位图可以加速RAID重建过程:
- # 为RAID设备创建内部位图
- mdadm --grow /dev/md0 --bitmap internal
- # 或者创建外部位图
- mdadm --grow /dev/md0 --bitmap /path/to/bitmap-file
复制代码
网络文件系统
网络文件系统允许通过网络在多台计算机之间共享文件和存储资源。在CentOS中,最常用的网络文件系统是NFS(Network File System)和Samba(SMB/CIFS协议)。这些技术对于构建集中式存储解决方案和实现跨平台文件共享至关重要。
NFS配置
NFS(Network File System)是一种分布式文件系统协议,允许客户端计算机通过网络访问服务器上的文件,就像访问本地文件一样。
- # 安装NFS服务器软件包
- yum install nfs-utils -y
- # 启动并启用NFS服务
- systemctl start nfs-server
- systemctl enable nfs-server
复制代码
编辑/etc/exports文件以定义要共享的目录及其访问权限:
- # 编辑exports文件
- vi /etc/exports
- # 添加以下行(根据需要调整)
- /data/nfs_share 192.168.1.0/24(rw,sync,no_root_squash)
- /backup 192.168.1.10(rw,sync) 192.168.1.11(ro,sync)
复制代码
常用选项说明:
• rw: 读写访问
• ro: 只读访问
• sync: 同步写入(更安全)
• async: 异步写入(性能更好)
• no_root_squash: 远程root用户具有本地root权限(安全风险)
• root_squash: 远程root用户映射为匿名用户(默认)
• all_squash: 所有远程用户映射为匿名用户
- # 创建共享目录
- mkdir -p /data/nfs_share
- mkdir -p /backup
- # 设置目录权限
- chmod 777 /data/nfs_share
- chmod 755 /backup
- # 更新NFS导出列表
- exportfs -a
复制代码- # 添加NFS服务到防火墙
- firewall-cmd --permanent --add-service=nfs
- firewall-cmd --permanent --add-service=mountd
- firewall-cmd --permanent --add-service=rpc-bind
- firewall-cmd --reload
复制代码- # 安装NFS客户端软件包
- yum install nfs-utils -y
- # 创建挂载点
- mkdir -p /mnt/nfs_share
- # 挂载NFS共享
- mount 192.168.1.100:/data/nfs_share /mnt/nfs_share
- # 添加到fstab实现自动挂载
- echo "192.168.1.100:/data/nfs_share /mnt/nfs_share nfs defaults 0 0" >> /etc/fstab
复制代码- # 编辑/etc/sysconfig/nfs文件
- vi /etc/sysconfig/nfs
- # 添加或修改以下行
- RPCNFSDARGS="-N 2 -N 3 -U"
- RPCMOUNTDOPTS="-p 892 -N 2 -N 3"
- # 重启NFS服务
- systemctl restart nfs-server
复制代码- # 安装必要的软件包
- yum install krb5-workstation nfs-utils -y
- # 配置Kerberos(编辑/etc/krb5.conf)
- vi /etc/krb5.conf
- # 为NFS创建服务主体
- kadmin.local -q "addprinc -randkey nfs/server.example.com"
- kadmin.local -q "ktadd -k /etc/krb5.keytab nfs/server.example.com"
- # 配置NFS使用Kerberos
- echo "SECURE_NFS=yes" >> /etc/sysconfig/nfs
- # 重启NFS服务
- systemctl restart nfs-server
复制代码- # 编辑/etc/sysconfig/nfs文件
- vi /etc/sysconfig/nfs
- # 添加或修改以下行以优化性能
- RPCNFSDCOUNT=32
- RPCMOUNTDOPTS="-p 892 -N 2 -N 3"
- LOCKD_TCP_PORT=32803
- LOCKD_UDP_PORT=32769
- MOUNTD_PORT=892
- STATD_PORT=662
- STATD_OUTGOING_PORT=2020
- # 重启NFS服务
- systemctl restart nfs-server
复制代码
Samba配置
Samba是一个开源软件套件,提供SMB/CIFS协议支持,使Linux服务器能够与Windows系统无缝集成,实现文件和打印机共享。
- # 安装Samba软件包
- yum install samba samba-client samba-common -y
- # 启动并启用Samba服务
- systemctl start smb
- systemctl enable smb
- systemctl start nmb
- systemctl enable nmb
复制代码
编辑/etc/samba/smb.conf文件以定义共享:
- # 备份原始配置文件
- cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
- # 编辑配置文件
- vi /etc/samba/smb.conf
- # 添加以下基本配置
- [global]
- workgroup = WORKGROUP
- server string = Samba Server %v
- netbios name = centos-server
- security = user
- map to guest = bad user
- dns proxy = no
- # 定义共享
- [shared]
- path = /data/samba/shared
- browsable = yes
- writable = yes
- guest ok = yes
- read only = no
- create mask = 0777
- directory mask = 0777
- [secure]
- path = /data/samba/secure
- browsable = yes
- writable = yes
- valid users = @smbusers
- create mask = 0770
- directory mask = 0770
复制代码- # 创建共享目录
- mkdir -p /data/samba/shared
- mkdir -p /data/samba/secure
- # 设置目录权限
- chmod 777 /data/samba/shared
- chmod 770 /data/samba/secure
- # 创建Samba用户组
- groupadd smbusers
- # 创建Samba用户并设置密码
- useradd -G smbusers smbuser
- smbpasswd -a smbuser
复制代码- # 添加Samba服务到防火墙
- firewall-cmd --permanent --add-service=samba
- firewall-cmd --reload
复制代码- # 测试配置文件语法
- testparm
- # 重启Samba服务
- systemctl restart smb
- systemctl restart nmb
复制代码- # 安装cifs-utils
- yum install cifs-utils -y
- # 创建挂载点
- mkdir -p /mnt/samba_shared
- # 挂载Samba共享(匿名访问)
- mount -t cifs //192.168.1.100/shared /mnt/samba_shared -o guest
- # 挂载Samba共享(需要认证)
- mount -t cifs //192.168.1.100/secure /mnt/samba_secure -o username=smbuser,password=password
- # 添加到fstab实现自动挂载
- echo "//192.168.1.100/secure /mnt/samba_secure cifs username=smbuser,password=password 0 0" >> /etc/fstab
复制代码
1. 打开文件资源管理器
2. 在地址栏输入\\192.168.1.100\shared或\\centos-server\shared
3. 根据提示输入用户名和密码(如果需要)
- # 安装必要的软件包
- yum install samba-winbind samba-winbind-clients krb5-workstation -y
- # 配置Kerberos(编辑/etc/krb5.conf)
- vi /etc/krb5.conf
- # 加入域(以下命令需要域管理员权限)
- net ads join -U administrator
- # 配置Samba使用域认证
- vi /etc/samba/smb.conf
- # 修改[global]部分
- [global]
- workgroup = DOMAIN
- security = ads
- realm = DOMAIN.COM
- password server = domain-controller.domain.com
- winbind separator = +
- idmap uid = 10000-20000
- idmap gid = 10000-20000
- winbind enum users = yes
- winbind enum groups = yes
- template homedir = /home/%D/%U
- template shell = /bin/bash
- client use spnego = yes
- client ntlmv2 auth = yes
- encrypt passwords = yes
- winbind use default domain = yes
- restrict anonymous = 2
- # 启动并启用winbind服务
- systemctl start winbind
- systemctl enable winbind
- # 测试域连接
- wbinfo -u
- wbinfo -g
复制代码- # 编辑/etc/samba/smb.conf文件
- vi /etc/samba/smb.conf
- # 在[global]部分添加以下优化参数
- [global]
- socket options = TCP_NODELAY IPTOS_LOWDELAY SO_KEEPALIVE
- read raw = yes
- write raw = yes
- max xmit = 65535
- dead time = 15
- getwd cache = yes
- lpq cache = 30
- level2 oplocks = yes
- kernel oplocks = yes
- # 重启Samba服务
- systemctl restart smb
复制代码- # 编辑/etc/samba/smb.conf文件
- vi /etc/samba/smb.conf
- # 在[global]部分添加以下审计参数
- [global]
- log level = 3
- log file = /var/log/samba/log.%m
- max log size = 5000
- vfs objects = full_audit
- full_audit:priority = notice
- full_audit:facility = local5
- full_audit:success = connect disconnect opendir mkdir rmdir closedir open close read pread write pwrite sendfile rename unlink chmod fchmod chown fchown ftruncate lock symlink readlink link mknod
- full_audit:failure = connect
- full_audit:prefix = %u|%I|%S
- # 重启Samba服务
- systemctl restart smb
复制代码
高级存储技术
除了基本的存储配置外,CentOS还支持多种高级存储技术,这些技术可以提供更高的性能、可扩展性和功能。在这一部分,我们将探讨iSCSI、FCoE、GlusterFS和Ceph等高级存储解决方案。
iSCSI配置
iSCSI(Internet Small Computer System Interface)是一种基于TCP/IP的存储网络协议,允许客户端(发起方)通过网络访问远程存储设备(目标)。iSCSI是一种经济高效的SAN(Storage Area Network)解决方案。
- # 安装targetcli软件包
- yum install targetcli -y
- # 启动并启用target服务
- systemctl start target
- systemctl enable target
- # 运行targetcli配置工具
- targetcli
- # 在targetcli中创建后端存储
- /> backstores/block create name=backend_storage dev=/dev/sdb1
- # 创建iSCSI目标
- /> iscsi/ create iqn.2023-07.com.example:storage.target00
- # 将后端存储映射到目标
- /> iscsi/iqn.2023-07.com.example:storage.target00/tpg1/luns create /backstores/block/backend_storage
- # 设置访问控制
- /> iscsi/iqn.2023-07.com.example:storage.target00/tpg1/acls create iqn.2023-07.com.example:client.initiator00
- # 保存配置
- /> saveconfig
- /> exit
复制代码- # 添加iSCSI服务到防火墙
- firewall-cmd --permanent --add-service=iscsi-target
- firewall-cmd --reload
复制代码- # 安装iscsi-initiator-utils软件包
- yum install iscsi-initiator-utils -y
- # 设置发起方名称
- echo "InitiatorName=iqn.2023-07.com.example:client.initiator00" > /etc/iscsi/initiatorname.iscsi
- # 启动并启用iscsi服务
- systemctl start iscsid
- systemctl enable iscsid
- # 发现iSCSI目标
- iscsiadm -m discovery -t st -p 192.168.1.100
- # 登录到iSCSI目标
- iscsiadm -m node -T iqn.2023-07.com.example:storage.target00 -p 192.168.1.100 -l
- # 查看新发现的磁盘
- lsblk
- # 格式化并挂载新磁盘
- mkfs.xfs /dev/sdb
- mkdir -p /mnt/iscsi_storage
- mount /dev/sdb /mnt/iscsi_storage
- # 添加到fstab实现自动挂载
- echo "/dev/sdb /mnt/iscsi_storage xfs _netdev 0 0" >> /etc/fstab
复制代码- # 在目标服务器上配置CHAP
- targetcli
- /> iscsi/iqn.2023-07.com.example:storage.target00/tpg1/acls/iqn.2023-07.com.example:client.initiator00 set auth userid=username
- /> iscsi/iqn.2023-07.com.example:storage.target00/tpg1/acls/iqn.2023-07.com.example:client.initiator00 set auth password=password
- /> saveconfig
- /> exit
- # 在发起方客户端配置CHAP
- echo "node.session.auth.authmethod = CHAP" >> /etc/iscsi/iscsid.conf
- echo "node.session.auth.username = username" >> /etc/iscsi/iscsid.conf
- echo "node.session.auth.password = password" >> /etc/iscsi/iscsid.conf
- # 重启iscsi服务
- systemctl restart iscsid
复制代码- # 安装device-mapper-multipath软件包
- yum install device-mapper-multipath -y
- # 启动并启用multipath服务
- systemctl start multipathd
- systemctl enable multipathd
- # 配置multipath
- mpathconf --enable
- # 编辑multipath配置文件
- vi /etc/multipath.conf
- # 添加以下配置
- defaults {
- user_friendly_names yes
- }
- devices {
- device {
- vendor "LIO-ORG"
- product "block"
- path_grouping_policy multibus
- path_checker tur
- }
- }
- # 重启multipath服务
- systemctl restart multipathd
- # 查看多路径设备
- multipath -ll
复制代码
FCoE配置
FCoE(Fibre Channel over Ethernet)是一种网络协议,允许Fibre Channel帧通过以太网传输。它结合了Fibre Channel的可靠性和以太网的经济性。
- # 安装FCoE软件包
- yum install fcoe-utils lldpad -y
- # 启动并启用lldpad服务
- systemctl start lldpad
- systemctl enable lldpad
复制代码- # 启用FCoE接口
- fcoeadm -i enp1s0f0
- # 创建FCoE配置文件
- vi /etc/fcoe/cfg-ethx
- # 添加以下配置
- FCOE_ENABLE="yes"
- DCB_REQUIRED="yes"
- MODE="fabric"
- # 启动FCoE服务
- systemctl start fcoe
- systemctl enable fcoe
复制代码- # 查看FCoE接口
- fcoeadm -i
- # 查看发现的LUN
- fcoeadm -l
- # 查看FC设备
- ls /dev/fc*
复制代码
GlusterFS配置
GlusterFS是一个开源的分布式文件系统,具有高可扩展性和高可用性。它允许您将多个存储服务器组合成一个统一的存储池。
- # 在所有节点上安装GlusterFS软件包
- yum install centos-release-gluster -y
- yum install glusterfs-server -y
- # 启动并启用GlusterFS服务
- systemctl start glusterd
- systemctl enable glusterd
复制代码- # 在第一个节点上,添加其他节点到信任池
- gluster peer probe node2.example.com
- gluster peer probe node3.example.com
- gluster peer probe node4.example.com
- # 查看集群状态
- gluster peer status
复制代码- # 创建分布式卷(在所有节点上创建目录)
- mkdir -p /data/glusterfs/distributed
- # 创建分布式卷
- gluster volume create distributed-volume replica 2 node1.example.com:/data/glusterfs/distributed node2.example.com:/data/glusterfs/distributed node3.example.com:/data/glusterfs/distributed node4.example.com:/data/glusterfs/distributed
- # 启动卷
- gluster volume start distributed-volume
- # 查看卷信息
- gluster volume info distributed-volume
复制代码- # 安装GlusterFS客户端
- yum install glusterfs-fuse -y
- # 创建挂载点
- mkdir -p /mnt/glusterfs
- # 挂载GlusterFS卷
- mount -t glusterfs node1.example.com:/distributed-volume /mnt/glusterfs
- # 添加到fstab实现自动挂载
- echo "node1.example.com:/distributed-volume /mnt/glusterfs glusterfs defaults,_netdev 0 0" >> /etc/fstab
复制代码- # 创建复制卷
- gluster volume create replicated-volume replica 3 node1.example.com:/data/glusterfs/replicated node2.example.com:/data/glusterfs/replicated node3.example.com:/data/glusterfs/replicated
- # 启动卷
- gluster volume start replicated-volume
复制代码- # 创建分布式复制卷
- gluster volume create dist-rep-volume replica 2 node1.example.com:/data/glusterfs/dist-rep node2.example.com:/data/glusterfs/dist-rep node3.example.com:/data/glusterfs/dist-rep node4.example.com:/data/glusterfs/dist-rep
- # 启动卷
- gluster volume start dist-rep-volume
复制代码- # 创建条带卷
- gluster volume create striped-volume stripe 4 node1.example.com:/data/glusterfs/striped node2.example.com:/data/glusterfs/striped node3.example.com:/data/glusterfs/striped node4.example.com:/data/glusterfs/striped
- # 启动卷
- gluster volume start striped-volume
复制代码- # 启用性能优化选项
- gluster volume set distributed-volume performance.io-thread-count 32
- gluster volume set distributed-volume performance.cache-size 4GB
- gluster volume set distributed-volume performance.flush-behind on
- gluster volume set distributed-volume performance.read-ahead on
- gluster volume set distributed-volume performance.io-cache on
- gluster volume set distributed-volume performance.quick-read on
- # 启用客户端端缓存
- gluster volume set distributed-volume network.remote-dio enable
- gluster volume set distributed-volume performance.client-io-threads on
复制代码
Ceph配置
Ceph是一个高度可扩展的开源存储平台,提供对象、块和文件存储接口。它设计用于在通用硬件上运行,并提供卓越的性能、可靠性和可扩展性。
- # 在所有节点上安装Ceph软件包
- yum install -y https://download.ceph.com/keys/release.asc
- rpm -Uvh https://download.ceph.com/rpm-nautilus/el7/noarch/ceph-release-1-1.el7.noarch.rpm
- yum install -y ceph-deploy
- # 创建Ceph用户
- useradd -d /home/cephuser -m cephuser
- passwd cephuser
- # 配置sudo权限
- echo "cephuser ALL=(root) NOPASSWD:ALL" > /etc/sudoers.d/cephuser
- chmod 0440 /etc/sudoers.d/cephuser
复制代码- # 切换到cephuser用户
- su - cephuser
- # 创建集群目录
- mkdir ceph-cluster
- cd ceph-cluster
- # 创建新集群
- ceph-deploy new node1 node2 node3
- # 安装Ceph软件包
- ceph-deploy install node1 node2 node3
- # 部署初始监视器
- ceph-deploy mon create-initial
- # 复制配置文件和密钥
- ceph-deploy admin node1 node2 node3
- # 创建OSD
- ceph-deploy osd create --data /dev/sdb node1
- ceph-deploy osd create --data /dev/sdb node2
- ceph-deploy osd create --data /dev/sdb node3
复制代码- # 查看集群状态
- ceph -s
- # 查看OSD树
- ceph osd tree
- # 查看监视器状态
- ceph mon stat
复制代码- # 创建池
- ceph osd pool create rbd 128
- # 初始化池
- rbd pool init rbd
- # 创建镜像
- rbd create rbd/myimage --size 10240
- # 映射镜像
- rbd map rbd/myimage
- # 查看映射的设备
- rbd showmapped
- # 格式化设备
- mkfs.xfs /dev/rbd0
- # 挂载设备
- mkdir -p /mnt/ceph-rbd
- mount /dev/rbd0 /mnt/ceph-rbd
- # 添加到fstab实现自动挂载
- echo "/dev/rbd0 /mnt/ceph-rbd xfs _netdev 0 0" >> /etc/fstab
复制代码- # 创建元数据服务器
- ceph-deploy mds create node1
- # 创建数据池和元数据池
- ceph osd pool create cephfs_data 128
- ceph osd pool create cephfs_metadata 64
- # 创建文件系统
- ceph fs new cephfs cephfs_metadata cephfs_data
- # 查看文件系统状态
- ceph fs ls
- # 挂载CephFS
- mkdir -p /mnt/cephfs
- mount -t ceph node1.example.com:6789:/ /mnt/cephfs -o name=admin,secret=<AQN_SECRET>
- # 添加到fstab实现自动挂载
- echo "node1.example.com:6789:/ /mnt/cephfs ceph name=admin,secret=<AQN_SECRET> _netdev 0 0" >> /etc/fstab
复制代码- # 安装Ceph对象网关
- yum install ceph-radosgw -y
- # 创建RGW实例
- ceph-deploy rgw create node1
- # 配置RGW
- vi /etc/ceph/ceph.conf
- # 添加以下配置
- [client.rgw.node1]
- rgw frontends = civetweb port=80
- rgw dns name = node1.example.com
- # 重启RGW服务
- systemctl restart ceph-radosgw@rgw.node1
- # 创建S3用户
- radosgw-admin user create --uid="testuser" --display-name="Test User"
复制代码- # 编辑Ceph配置文件
- vi /etc/ceph/ceph.conf
- # 添加以下性能优化配置
- [osd]
- osd max backfills = 1
- osd recovery max active = 1
- osd recovery op priority = 1
- osd client op priority = 63
- osd op threads = 8
- osd disk threads = 4
- osd map cache size = 1024
- osd map cache bl size = 128
- osd map cache bl inc size = 32
- osd op queue = wpq
- [client]
- rbd cache = true
- rbd cache size = 33554432
- rbd cache max dirty = 25165824
- rbd cache target dirty = 16777216
- rbd cache max dirty age = 5
- rbd cache writethrough until flush = false
- # 重启Ceph服务
- systemctl restart ceph-osd@*
- systemctl restart ceph-mon@*
复制代码
存储性能优化
存储性能优化是确保系统高效运行的关键环节。在CentOS中,有多种技术和策略可以用来优化存储性能,从I/O调度器调整到文件系统调优,再到缓存策略和硬件优化。本节将详细介绍这些优化技术。
I/O调度器优化
I/O调度器决定了系统如何处理和排序I/O请求。不同的工作负载可能需要不同的调度器策略。
- # 查看当前可用的调度器
- cat /sys/block/sda/queue/scheduler
- # 查看特定设备当前使用的调度器
- cat /sys/block/sda/queue/scheduler
复制代码- # 临时更改调度器(例如改为deadline)
- echo deadline > /sys/block/sda/queue/scheduler
- # 永久更改调度器(通过GRUB配置)
- vi /etc/default/grub
- # 修改GRUB_CMDLINE_LINUX行,添加elevator参数
- GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet elevator=deadline"
- # 更新GRUB配置
- grub2-mkconfig -o /boot/grub2/grub.cfg
复制代码
• CFQ (Completely Fair Queuing): 默认调度器,为所有进程提供公平的I/O带宽
• Deadline: 适用于大多数工作负载,特别是数据库和虚拟化环境
• NOOP: 适用于SSD和RAID阵列,这些设备本身有良好的I/O调度机制
文件系统优化
不同的文件系统有不同的优化参数和策略。
- # 创建ext4文件系统时指定选项
- mkfs.ext4 -L data -m 1 -E stride=128,stripe-width=256 /dev/sdb1
- # 挂载选项优化
- mount -t ext4 -o noatime,nodiratime,data=writeback,barrier=0,nobh /dev/sdb1 /data
- # 永久挂载选项(编辑/etc/fstab)
- echo "/dev/sdb1 /data ext4 noatime,nodiratime,data=writeback,barrier=0,nobh 0 0" >> /etc/fstab
- # 使用tune2fs调整现有文件系统
- tune2fs -o journal_data_writeback /dev/sdb1
- tune2fs -O ^has_journal /dev/sdb1 # 禁用日志(提高性能,降低安全性)
复制代码- # 创建XFS文件系统时指定选项
- mkfs.xfs -L data -l size=128m -d agcount=4 -s size=4096 /dev/sdb1
- # 挂载选项优化
- mount -t xfs -o noatime,nodiratime,largeio,inode64,swalloc /dev/sdb1 /data
- # 永久挂载选项(编辑/etc/fstab)
- echo "/dev/sdb1 /data xfs noatime,nodiratime,largeio,inode64,swalloc 0 0" >> /etc/fstab
- # 使用xfs_admin调整现有文件系统
- xfs_admin -L data /dev/sdb1
复制代码- # 创建Btrfs文件系统时指定选项
- mkfs.btrfs -L data -d single -m single /dev/sdb1
- # 挂载选项优化
- mount -t btrfs -o noatime,nodiratime,compress=lzo,autodefrag,ssd /dev/sdb1 /data
- # 永久挂载选项(编辑/etc/fstab)
- echo "/dev/sdb1 /data btrfs noatime,nodiratime,compress=lzo,autodefrag,ssd 0 0" >> /etc/fstab
- # 使用btrfs filesystem调整现有文件系统
- btrfs filesystem defragment -r -v -clzo /data
复制代码
虚拟内存优化
虚拟内存和交换空间的配置对存储性能有重要影响。
- # 查看当前swappiness值
- cat /proc/sys/vm/swappiness
- # 临时调整swappiness值
- sysctl vm.swappiness=10
- # 永久调整swappiness值
- echo "vm.swappiness=10" >> /etc/sysctl.conf
复制代码- # 创建交换文件
- fallocate -l 4G /swapfile
- chmod 600 /swapfile
- mkswap /swapfile
- swapon /swapfile
- # 永久启用交换文件
- echo "/swapfile swap swap defaults 0 0" >> /etc/fstab
- # 调整交换空间使用策略
- echo "vm.vfs_cache_pressure=50" >> /etc/sysctl.conf
- sysctl -p
复制代码
I/O性能监控与调优
- # 安装sysstat软件包
- yum install sysstat -y
- # 使用iostat监控I/O性能
- iostat -xz 2
- # 解释iostat输出
- # %util: 设备利用率
- # await: 平均I/O等待时间(毫秒)
- # svctm: 平均服务时间(毫秒)
- # r/s, w/s: 每秒读/写请求数
- # rkB/s, wkB/s: 每秒读/写千字节数
复制代码- # 使用vmstat监控虚拟内存性能
- vmstat 2
- # 解释vmstat输出
- # si, so: 每秒从/到交换区的内存页数
- # bi, bo: 每秒从/到块设备的块数
- # wa: 等待I/O的CPU时间百分比
复制代码- # 启用sar数据收集
- systemctl start sysstat
- systemctl enable sysstat
- # 查看I/O历史数据
- sar -b
- # 查看内存使用历史数据
- sar -r
- # 查看CPU使用历史数据
- sar -u
复制代码
硬件优化策略
- # 检查设备是否为SSD
- cat /sys/block/sda/queue/rotational
- # 为SSD设置调度器
- echo noop > /sys/block/sda/queue/scheduler
- # 启用TRIM支持(对于支持TRIM的SSD)
- # 编辑/etc/fstab,添加discard选项
- echo "/dev/sda1 /data ext4 defaults,discard 0 0" >> /etc/fstab
- # 或者使用fstrim定期执行TRIM
- yum install fstrim-utils -y
- systemctl enable fstrim.timer
- systemctl start fstrim.timer
复制代码- # 设置RAID阵列的条带大小
- mdadm --create /dev/md0 --level=5 --raid-devices=3 --chunk=256 /dev/sdb1 /dev/sdc1 /dev/sdd1
- # 设置文件系统以匹配RAID条带大小
- mkfs.ext4 -E stride=64,stripe-width=128 /dev/md0
- # 设置RAID阵列的读写策略
- echo write_back > /sys/block/md0/md/safe_mode_delay
复制代码- # 安装numactl软件包
- yum install numactl -y
- # 查看NUMA节点信息
- numactl --hardware
- # 为存储进程绑定NUMA节点
- numactl --cpunodebind=0 --membind=0 dd if=/dev/sdb of=/dev/null bs=1M count=1000
复制代码
应用层优化
- # 为MySQL配置存储优化
- vi /etc/my.cnf
- # 添加以下配置
- [mysqld]
- innodb_flush_method = O_DIRECT
- innodb_io_capacity = 2000
- innodb_io_capacity_max = 4000
- innodb_buffer_pool_size = 4G
- innodb_log_file_size = 512M
- innodb_log_buffer_size = 64M
- innodb_flush_log_at_trx_commit = 2
- innodb_doublewrite = 1
- innodb_file_per_table = 1
- # 重启MySQL服务
- systemctl restart mysqld
复制代码- # 为KVM虚拟机配置存储优化
- # 使用virtio驱动
- <disk type='file' device='disk'>
- <driver name='qemu' type='qcow2' cache='none' io='native'/>
- <source file='/var/lib/libvirt/images/vm.qcow2'/>
- <target dev='vda' bus='virtio'/>
- </disk>
- # 使用直接I/O
- <disk type='block' device='disk'>
- <driver name='qemu' type='raw' cache='none' io='native'/>
- <source dev='/dev/sdb1'/>
- <target dev='vda' bus='virtio'/>
- </disk>
复制代码- # 为Nginx配置存储优化
- vi /etc/nginx/nginx.conf
- # 添加以下配置
- worker_processes auto;
- worker_rlimit_nofile 65535;
- events {
- worker_connections 65535;
- use epoll;
- multi_accept on;
- }
- http {
- sendfile on;
- tcp_nopush on;
- tcp_nodelay on;
- open_file_cache max=65535 inactive=20s;
- open_file_cache_valid 30s;
- open_file_cache_min_uses 2;
- open_file_cache_errors on;
- }
- # 重启Nginx服务
- systemctl restart nginx
复制代码
存储安全与备份
数据安全是企业存储管理的核心要素之一。在CentOS环境中,实施适当的存储安全措施和备份策略对于保护关键业务数据至关重要。本节将详细介绍存储安全配置、数据加密、访问控制以及备份与恢复策略。
存储安全配置
LUKS(Linux Unified Key Setup)是Linux标准的磁盘加密系统,提供全盘加密功能。
- # 安装cryptsetup软件包
- yum install cryptsetup -y
- # 加密分区
- cryptsetup luksFormat /dev/sdb1
- # 打开加密分区
- cryptsetup open /dev/sdb1 encrypted_data
- # 格式化加密分区
- mkfs.xfs /dev/mapper/encrypted_data
- # 挂载加密分区
- mkdir -p /data/encrypted
- mount /dev/mapper/encrypted_data /data/encrypted
- # 添加到fstab实现自动挂载
- echo "/dev/mapper/encrypted_data /data/encrypted xfs defaults 0 0" >> /etc/fstab
- # 配置/etc/crypttab以在启动时自动解密
- echo "encrypted_data /dev/sdb1 none luks" >> /etc/crypttab
复制代码
eCryptfs是一种堆叠式加密文件系统,可以在现有文件系统之上提供加密功能。
- # 安装ecryptfs-utils软件包
- yum install ecryptfs-utils -y
- # 创建加密目录
- mkdir -p /data/encrypted
- mount -t ecryptfs /data/encrypted /data/encrypted
- # 按照提示配置加密选项
- # 选择密钥类型、加密算法等
- # 永久挂载(需要将签名添加到/etc/fstab)
- # 获取签名
- mount | grep ecryptfs
- # 编辑/etc/fstab
- echo "/data/encrypted /data/encrypted ecryptfs key=passphrase,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_passthrough=n,ecryptfs_enable_filename_crypto=y 0 0" >> /etc/fstab
复制代码
ACL提供了比传统Unix权限更细粒度的访问控制。
- # 安装acl软件包
- yum install acl -y
- # 确保文件系统支持ACL
- # 对于ext4/XFS,默认支持ACL
- # 设置ACL
- setfacl -m u:user1:rw /data/shared/file.txt
- setfacl -m g:developers:rwx /data/shared/
- setfacl -m d:u:user1:rw /data/shared/ # 默认ACL
- # 查看ACL
- getfacl /data/shared/file.txt
- # 删除ACL
- setfacl -x u:user1 /data/shared/file.txt
- setfacl -b /data/shared/file.txt # 删除所有ACL
复制代码- # 使用noexec选项防止执行文件
- mount -o remount,noexec /tmp
- # 使用nosuid选项防止SUID/SGID
- mount -o remount,nosuid /home
- # 使用nodev选项防止设备文件
- mount -o remount,nodev /var
- # 永久设置(编辑/etc/fstab)
- echo "/dev/sdb1 /data ext4 defaults,noexec,nosuid,nodev 0 0" >> /etc/fstab
复制代码
数据备份策略
rsync是一个强大的文件同步工具,非常适合增量备份。
- # 安装rsync软件包
- yum install rsync -y
- # 本地备份
- rsync -av --delete /data/source/ /backup/destination/
- # 远程备份
- rsync -av --delete -e ssh /data/source/ user@remote:/backup/destination/
- # 排除特定文件或目录
- rsync -av --delete --exclude='*.tmp' --exclude='cache/' /data/source/ /backup/destination/
- # 创建备份脚本
- vi /usr/local/bin/backup.sh
- #!/bin/bash
- rsync -av --delete --exclude='*.tmp' --exclude='cache/' /data/source/ /backup/destination/
- date > /backup/last_backup.txt
- # 设置脚本可执行
- chmod +x /usr/local/bin/backup.sh
- # 添加到cron实现定期备份
- echo "0 2 * * * /usr/local/bin/backup.sh" > /etc/cron.d/backup
复制代码
tar是一个常用的归档工具,适合创建完整的备份文件。
- # 创建完整备份
- tar -czvf /backup/full_backup-$(date +%Y%m%d).tar.gz /data/source/
- # 创建增量备份
- tar --listed-incremental=/backup/snapshot.file -czvf /backup/incremental_backup-$(date +%Y%m%d).tar.gz /data/source/
- # 排除特定文件或目录
- tar -czvf /backup/backup-$(date +%Y%m%d).tar.gz --exclude='*.tmp' --exclude='cache/' /data/source/
- # 创建备份脚本
- vi /usr/local/bin/tar_backup.sh
- #!/bin/bash
- # 每周创建完整备份
- DAY=$(date +%u)
- if [ $DAY -eq 7 ]; then
- tar -czvf /backup/full_backup-$(date +%Y%m%d).tar.gz --exclude='*.tmp' --exclude='cache/' /data/source/
- else
- tar --listed-incremental=/backup/snapshot.file -czvf /backup/incremental_backup-$(date +%Y%m%d).tar.gz --exclude='*.tmp' --exclude='cache/' /data/source/
- fi
- date > /backup/last_backup.txt
- # 设置脚本可执行
- chmod +x /usr/local/bin/tar_backup.sh
- # 添加到cron实现定期备份
- echo "0 2 * * * /usr/local/bin/tar_backup.sh" > /etc/cron.d/backup
复制代码
BorgBackup是一个支持去重的备份工具,节省存储空间。
- # 安装BorgBackup
- yum install borgbackup -y
- # 初始化备份仓库
- export BORG_PASSPHRASE='your_passphrase'
- borg init --encryption=repokey /backup/borg-repo
- # 创建备份
- borg create --stats /backup/borg-repo::$(date +%Y-%m-%d) /data/source
- # 列出备份
- borg list /backup/borg-repo
- # 提取备份
- borg extract /backup/borg-repo::2023-07-15
- # 清理旧备份
- borg prune --keep-daily=7 --keep-weekly=4 --keep-monthly=6 /backup/borg-repo
- # 创建备份脚本
- vi /usr/local/bin/borg_backup.sh
- #!/bin/bash
- export BORG_PASSPHRASE='your_passphrase'
- borg create --stats /backup/borg-repo::$(date +%Y-%m-%d) /data/source
- borg prune --keep-daily=7 --keep-weekly=4 --keep-monthly=6 /backup/borg-repo
- date > /backup/last_backup.txt
- # 设置脚本可执行
- chmod +x /usr/local/bin/borg_backup.sh
- # 添加到cron实现定期备份
- echo "0 2 * * * /usr/local/bin/borg_backup.sh" > /etc/cron.d/backup
复制代码
灾难恢复策略
Clonezilla是一个强大的磁盘克隆和备份工具,适合系统级备份。
- # 安装Clonezilla
- yum install clonezilla -y
- # 创建系统备份
- # 需要使用Clonezilla Live CD或PXE启动
- # 恢复系统备份
- # 同样需要使用Clonezilla Live CD或PXE启动
复制代码
ReaR(Relax and Recover)是一个灾难恢复框架,可以创建可启动的恢复媒体。
- # 安装ReaR
- yum install rear genisoimage syslinux -y
- # 配置ReaR
- vi /etc/rear/local.conf
- # 添加以下配置
- OUTPUT=ISO
- OUTPUT_URL=file:///backup/rear
- BACKUP=NETFS
- BACKUP_URL=file:///backup/rear
- NETFS_KEEP_OLD_BACKUP_COPY=y
- # 创建恢复介质
- rear -v mkbackup
- # 恢复系统
- # 使用创建的ISO启动系统,然后运行rear recover
复制代码
Bareos是一个开源的企业级备份解决方案。
- # 安装Bareos仓库
- yum install -y https://download.bareos.org/bareos/release/18.2/CentOS_7/bareos-release-18.2-1.el7.x86_64.rpm
- # 安装Bareos服务器
- yum install bareos bareos-database-postgresql -y
- # 配置数据库
- su - postgres
- createuser bareos
- createdb -O bareos bareos
- exit
- # 初始化Bareos数据库
- /usr/lib/bareos/scripts/create_bareos_database
- /usr/lib/bareos/scripts/make_bareos_tables
- /usr/lib/bareos/scripts/grant_bareos_privileges
- # 启动Bareos服务
- systemctl start bareos-dir
- systemctl start bareos-sd
- systemctl start bareos-fd
- # 配置Bareos客户端
- yum install bareos-client -y
- systemctl start bareos-fd
复制代码
数据完整性验证
AIDE(Advanced Intrusion Detection Environment)是一个文件完整性检查工具。
- # 安装AIDE
- yum install aide -y
- # 初始化AIDE数据库
- aide --init
- # 移动数据库到正确位置
- mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
- # 运行AIDE检查
- aide --check
- # 创建AIDE检查脚本
- vi /usr/local/bin/aide_check.sh
- #!/bin/bash
- aide --check
- if [ $? -ne 0 ]; then
- echo "AIDE check failed on $(date)" | mail -s "AIDE Alert" admin@example.com
- fi
- # 设置脚本可执行
- chmod +x /usr/local/bin/aide_check.sh
- # 添加到cron实现定期检查
- echo "0 4 * * * /usr/local/bin/aide_check.sh" > /etc/cron.d/aide
复制代码
Tripwire是另一个流行的文件完整性检查工具。
- # 安装Tripwire
- yum install tripwire -y
- # 初始化Tripwire配置
- tripwire --init
- # 运行Tripwire检查
- tripwire --check
- # 更新Tripwire数据库
- tripwire --update
- # 创建Tripwire检查脚本
- vi /usr/local/bin/tripwire_check.sh
- #!/bin/bash
- tripwire --check
- if [ $? -ne 0 ]; then
- echo "Tripwire check failed on $(date)" | mail -s "Tripwire Alert" admin@example.com
- fi
- # 设置脚本可执行
- chmod +x /usr/local/bin/tripwire_check.sh
- # 添加到cron实现定期检查
- echo "0 4 * * * /usr/local/bin/tripwire_check.sh" > /etc/cron.d/tripwire
复制代码
故障排除与维护
存储系统的故障排除与维护是确保数据安全和系统稳定运行的关键环节。在CentOS环境中,管理员需要掌握各种工具和技术来诊断和解决存储问题。本节将详细介绍常见的存储问题及其解决方案,以及存储系统的最佳维护实践。
磁盘故障诊断
SMART(Self-Monitoring, Analysis and Reporting Technology)是一种磁盘自我监测技术,可以提前预警磁盘故障。
- # 安装smartmontools软件包
- yum install smartmontools -y
- # 启动并启用smartd服务
- systemctl start smartd
- systemctl enable smartd
- # 查看磁盘SMART信息
- smartctl -i /dev/sda
- # 查看磁盘SMART健康状态
- smartctl -H /dev/sda
- # 查看磁盘SMART详细信息
- smartctl -a /dev/sda
- # 运行磁盘自检
- smartctl -t short /dev/sda
- smartctl -t long /dev/sda
- # 查看自检结果
- smartctl -l selftest /dev/sda
复制代码
badblocks是一个用于检测磁盘坏道的工具。
- # 非破坏性读测试(只读)
- badblocks -sv /dev/sda
- # 非破坏性读写测试
- badblocks -nsv /dev/sda
- # 破坏性写测试(会破坏数据)
- badblocks -wsv /dev/sda
- # 将坏块列表保存到文件
- badblocks -sv /dev/sda > /tmp/bad-blocks.txt
- # 使用fsck标记坏块
- fsck -l /tmp/bad-blocks.txt /dev/sda1
复制代码
dmesg命令显示内核消息,包括磁盘错误信息。
- # 查看所有内核消息
- dmesg
- # 查看与磁盘相关的消息
- dmesg | grep -i "sd\|ata\|error"
- # 实时查看磁盘错误
- dmesg -w | grep -i "sd\|ata\|error"
复制代码
文件系统故障排除
fsck(File System Check)是检查和修复文件系统的工具。
- # 检查文件系统(不修复)
- fsck -n /dev/sda1
- # 检查并修复文件系统(交互式)
- fsck /dev/sda1
- # 自动修复所有问题
- fsck -y /dev/sda1
- # 强制检查(即使文件系统标记为干净)
- fsck -f /dev/sda1
- # 检查特定文件系统类型
- fsck -t ext4 /dev/sda1
复制代码
XFS文件系统使用xfs_repair工具进行修复。
- # 检查XFS文件系统
- xfs_repair -n /dev/sda1
- # 修复XFS文件系统
- xfs_repair /dev/sda1
- # 对于严重损坏的文件系统,可能需要使用-L选项(会丢失日志中的数据)
- xfs_repair -L /dev/sda1
复制代码
使用testdisk和photorec工具可以尝试恢复删除的文件。
- # 安装testdisk和photorec
- yum install testdisk -y
- # 使用testdisk恢复分区表
- testdisk
- # 使用photorec恢复文件
- photorec
复制代码
LVM故障排除
LVM元数据损坏可能导致卷组或逻辑卷无法访问。
- # 查看LVM元数据备份
- ls /etc/lvm/archive/
- ls /etc/lvm/backup/
- # 从备份恢复LVM元数据
- vgcfgrestore -f /etc/lvm/archive/vg_data_00000-1234567890.vg vg_data
- # 查看物理卷信息
- pvdisplay -v
- # 重建物理卷
- pvcreate --uuid "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" --restorefile /etc/lvm/archive/vg_data_00000-1234567890.vg /dev/sdb1
复制代码
逻辑卷可能因各种原因变为不活动状态。
- # 查看逻辑卷状态
- lvdisplay
- # 激活所有逻辑卷
- vgchange -ay
- # 激活特定卷组中的逻辑卷
- vgchange -ay vg_data
- # 激活特定的逻辑卷
- lvchange -ay /dev/vg_data/lv_data
复制代码
LVM镜像中的磁盘故障需要特殊处理。
- # 查看镜像状态
- lvs -a -o +devices
- # 将故障磁盘标记为故障
- lvchange --detachprofile /dev/vg_data/lv_mirror
- # 移除故障磁盘
- lvconvert --mirrors 0 vg_data/lv_mirror /dev/faulty_disk
- # 添加新磁盘到镜像
- lvconvert --mirrors 1 vg_data/lv_mirror /dev/new_disk
复制代码
RAID故障排除
定期检查RAID状态可以及早发现问题。
- # 查看RAID状态
- cat /proc/mdstat
- # 查看RAID详细信息
- mdadm --detail /dev/md0
- # 查看RAID事件日志
- mdadm --examine --brief /dev/sdb1
复制代码
RAID磁盘故障需要及时处理以维持数据安全。
- # 将故障磁盘标记为故障
- mdadm --fail /dev/md0 /dev/sdb1
- # 移除故障磁盘
- mdadm --remove /dev/md0 /dev/sdb1
- # 添加新磁盘
- mdadm --add /dev/md0 /dev/sdc1
- # 观察重建过程
- watch cat /proc/mdstat
复制代码
降级的RAID阵列需要尽快恢复以维持冗余。
- # 查看降级的RAID阵列
- mdadm --detail /dev/md0 | grep degraded
- # 添加新磁盘到降级的RAID
- mdadm --add /dev/md0 /dev/sdc1
- # 对于RAID 5/6,可能需要手动启动重建
- echo repair > /sys/block/md0/md/sync_action
- # 观察重建过程
- watch cat /proc/mdstat
复制代码
网络存储故障排除
NFS问题通常与网络、权限或配置有关。
- # 检查NFS服务状态
- systemctl status nfs-server
- # 查看NFS共享
- exportfs -v
- # 检查NFS挂载
- mount | grep nfs
- # 查看NFS活动
- nfsstat
- # 测试NFS连接
- showmount -e server.example.com
- rpcinfo -p server.example.com
- # 查看NFS客户端状态
- nfsstat -c
- # 查看NFS服务器状态
- nfsstat -s
复制代码
iSCSI问题通常与网络、认证或目标配置有关。
- # 检查iSCSI服务状态
- systemctl status iscsid
- # 查看iSCSI会话
- iscsiadm -m session
- # 发现iSCSI目标
- iscsiadm -m discovery -t st -p target-ip
- # 登录到iSCSI目标
- iscsiadm -m node -T iqn.target -p target-ip -l
- # 查看iSCSI错误日志
- journalctl -u iscsid
复制代码
多路径I/O问题通常与路径管理或配置有关。
- # 检查multipathd服务状态
- systemctl status multipathd
- # 查看多路径设备
- multipath -ll
- # 查看多路径拓扑
- multipath -t
- # 重新加载多路径配置
- multipath -F
- multipath -v2
- # 查看多路径日志
- journalctl -u multipathd
复制代码
性能问题诊断
iostat是一个强大的I/O性能监控工具。
- # 安装sysstat软件包
- yum install sysstat -y
- # 查看I/O统计信息
- iostat -xz 2
- # 解释关键指标
- # %util: 设备利用率,接近100%表示设备饱和
- # await: 平均I/O等待时间,高值表示I/O瓶颈
- # svctm: 平均服务时间,高值表示设备性能问题
- # r/s, w/s: 每秒读/写请求数
- # rkB/s, wkB/s: 每秒读/写千字节数
复制代码
iotop是一个类似top的工具,用于显示I/O使用情况。
- # 安装iotop软件包
- yum install iotop -y
- # 运行iotop
- iotop
- # 只显示实际进行I/O的进程
- iotop -o
- # 只显示进程而不是线程
- iotop -P
复制代码
blktrace是一个详细的I/O跟踪工具,用于深入分析I/O问题。
- # 安装blktrace软件包
- yum install blktrace -y
- # 跟踪设备I/O
- blktrace /dev/sda
- # 使用blkparse解析跟踪数据
- blkparse /dev/sda
- # 使用btt分析I/O模式
- btt -i /dev/sda
复制代码
存储维护最佳实践
- # 创建磁盘健康检查脚本
- vi /usr/local/bin/disk_health_check.sh
- #!/bin/bash
- # 检查所有磁盘的SMART健康状态
- for disk in $(ls /dev/sd[a-z]); do
- smartctl -H $disk | grep -q "PASSED"
- if [ $? -ne 0 ]; then
- echo "SMART health check failed for $disk on $(date)" | mail -s "SMART Alert" admin@example.com
- fi
- done
- # 设置脚本可执行
- chmod +x /usr/local/bin/disk_health_check.sh
- # 添加到cron实现定期检查
- echo "0 3 * * 0 /usr/local/bin/disk_health_check.sh" > /etc/cron.d/disk_health
复制代码- # 创建文件系统检查脚本
- vi /usr/local/bin/fs_check.sh
- #!/bin/bash
- # 检查所有文件系统的错误
- for fs in $(mount | grep -E "ext[234]|xfs|btrfs" | awk '{print $1}'); do
- if echo $fs | grep -q "/dev/mapper"; then
- # 对于LVM设备,使用设备路径
- fs="/dev/mapper/$(echo $fs | cut -d/ -f3-)"
- fi
- fsck -n $fs > /tmp/fs_check_$$.txt 2>&1
- if [ $? -ne 0 ]; then
- cat /tmp/fs_check_$$.txt | mail -s "Filesystem Check Alert for $fs" admin@example.com
- fi
- rm -f /tmp/fs_check_$$.txt
- done
- # 设置脚本可执行
- chmod +x /usr/local/bin/fs_check.sh
- # 添加到cron实现定期检查
- echo "0 4 * * 0 /usr/local/bin/fs_check.sh" > /etc/cron.d/fs_check
复制代码- # 创建RAID状态检查脚本
- vi /usr/local/bin/raid_check.sh
- #!/bin/bash
- # 检查所有RAID设备的状态
- for md in $(ls /dev/md*); do
- mdadm --detail $md | grep -q "degraded"
- if [ $? -eq 0 ]; then
- echo "RAID device $md is degraded on $(date)" | mail -s "RAID Alert" admin@example.com
- fi
- mdadm --detail $md | grep -q "recovering\|resyncing"
- if [ $? -eq 0 ]; then
- echo "RAID device $md is recovering/resyncing on $(date)" | mail -s "RAID Recovery Alert" admin@example.com
- fi
- done
- # 设置脚本可执行
- chmod +x /usr/local/bin/raid_check.sh
- # 添加到cron实现定期检查
- echo "*/30 * * * * /usr/local/bin/raid_check.sh" > /etc/cron.d/raid_check
复制代码- # 创建清理脚本
- vi /usr/local/bin/cleanup.sh
- #!/bin/bash
- # 清理30天前的日志
- find /var/log -type f -name "*.log.*" -mtime +30 -delete
- # 清理临时文件
- find /tmp -type f -mtime +7 -delete
- find /var/tmp -type f -mtime +30 -delete
- # 清理用户会话
- find /tmp -name "sess_*" -mtime +1 -delete
- # 清理核心转储
- find /var/crash -type f -mtime +30 -delete
- # 设置脚本可执行
- chmod +x /usr/local/bin/cleanup.sh
- # 添加到cron实现定期清理
- echo "0 2 * * 0 /usr/local/bin/cleanup.sh" > /etc/cron.d/cleanup
复制代码
总结与展望
通过本文的全面介绍,我们深入探讨了CentOS高级存储配置的各个方面,从基础的磁盘分区和格式化,到高级的逻辑卷管理、软件RAID配置,再到网络文件系统、高级存储技术、性能优化、安全备份以及故障排除与维护。这些知识和技能将帮助您构建高效、可靠、安全的企业级存储解决方案。
关键要点回顾
1. 存储基础:理解存储设备识别、文件系统类型和基本存储工具是构建复杂存储解决方案的基础。
2. 磁盘分区与格式化:掌握MBR与GPT分区表的区别,以及使用fdisk和parted进行分区的方法,对于有效利用存储空间至关重要。
3. 逻辑卷管理(LVM):LVM提供了灵活的存储管理能力,包括动态调整大小、创建快照和镜像等功能,是企业存储管理的核心工具。
4. 软件RAID配置:通过mdadm配置不同级别的RAID,可以提高存储性能、可靠性或两者兼备,是构建高可用存储系统的关键技术。
5. 网络文件系统:NFS和Samba提供了跨平台文件共享能力,是实现集中式存储管理的重要手段。
6. 高级存储技术:iSCSI、FCoE、GlusterFS和Ceph等高级存储技术提供了更强大的功能和可扩展性,满足企业级应用的需求。
7. 存储性能优化:通过调整I/O调度器、文件系统参数、虚拟内存设置和应用层配置,可以显著提升存储性能。
8. 存储安全与备份:实施适当的加密、访问控制和备份策略,对于保护关键业务数据至关重要。
9. 故障排除与维护:掌握各种故障诊断工具和维护最佳实践,可以确保存储系统的稳定运行和快速恢复。
存储基础:理解存储设备识别、文件系统类型和基本存储工具是构建复杂存储解决方案的基础。
磁盘分区与格式化:掌握MBR与GPT分区表的区别,以及使用fdisk和parted进行分区的方法,对于有效利用存储空间至关重要。
逻辑卷管理(LVM):LVM提供了灵活的存储管理能力,包括动态调整大小、创建快照和镜像等功能,是企业存储管理的核心工具。
软件RAID配置:通过mdadm配置不同级别的RAID,可以提高存储性能、可靠性或两者兼备,是构建高可用存储系统的关键技术。
网络文件系统:NFS和Samba提供了跨平台文件共享能力,是实现集中式存储管理的重要手段。
高级存储技术:iSCSI、FCoE、GlusterFS和Ceph等高级存储技术提供了更强大的功能和可扩展性,满足企业级应用的需求。
存储性能优化:通过调整I/O调度器、文件系统参数、虚拟内存设置和应用层配置,可以显著提升存储性能。
存储安全与备份:实施适当的加密、访问控制和备份策略,对于保护关键业务数据至关重要。
故障排除与维护:掌握各种故障诊断工具和维护最佳实践,可以确保存储系统的稳定运行和快速恢复。
未来发展趋势
随着技术的不断发展,存储领域也在持续演进。以下是一些值得关注的未来发展趋势:
1. 软件定义存储(SDS):SDS将存储硬件与存储软件分离,提供更高的灵活性和可扩展性,是未来存储架构的重要方向。
2. NVMe over Fabrics (NVMe-oF):NVMe-oF技术将NVMe的低延迟和高性能扩展到网络存储,有望彻底改变存储网络架构。
3. 持久内存(Persistent Memory):持久内存技术(如Intel Optane)结合了内存的速度和存储的持久性,将为存储性能带来革命性提升。
4. 存储类内存(SCM):SCM技术填补了传统存储和内存之间的性能差距,为高性能计算和实时分析应用提供新的可能性。
5. AI驱动的存储管理:人工智能和机器学习技术正在被应用于存储管理,实现智能预测、自动化优化和故障预防。
软件定义存储(SDS):SDS将存储硬件与存储软件分离,提供更高的灵活性和可扩展性,是未来存储架构的重要方向。
NVMe over Fabrics (NVMe-oF):NVMe-oF技术将NVMe的低延迟和高性能扩展到网络存储,有望彻底改变存储网络架构。
持久内存(Persistent Memory):持久内存技术(如Intel Optane)结合了内存的速度和存储的持久性,将为存储性能带来革命性提升。
存储类内存(SCM):SCM技术填补了传统存储和内存之间的性能差距,为高性能计算和实时分析应用提供新的可能性。
AI驱动的存储管理:人工智能和机器学习技术正在被应用于存储管理,实现智能预测、自动化优化和故障预防。
持续学习建议
存储技术发展迅速,作为IT专业人员,持续学习至关重要。以下是一些建议:
1. 关注行业动态:定期阅读存储行业的技术博客、新闻和报告,了解最新发展。
2. 参与社区:加入存储相关的开源社区(如Ceph、GlusterFS社区),参与讨论和贡献。
3. 实验新技术:在测试环境中尝试新的存储技术和工具,积累实践经验。
4. 获取认证:考虑获取存储相关的专业认证(如Red Hat Certified Specialist in Storage Administration)。
5. 分享知识:通过博客、演讲或培训分享您的存储知识和经验,促进社区交流。
关注行业动态:定期阅读存储行业的技术博客、新闻和报告,了解最新发展。
参与社区:加入存储相关的开源社区(如Ceph、GlusterFS社区),参与讨论和贡献。
实验新技术:在测试环境中尝试新的存储技术和工具,积累实践经验。
获取认证:考虑获取存储相关的专业认证(如Red Hat Certified Specialist in Storage Administration)。
分享知识:通过博客、演讲或培训分享您的存储知识和经验,促进社区交流。
通过不断学习和实践,您将能够掌握最新的存储技术,为企业构建更加高效、可靠、安全的存储解决方案,推动业务发展和技术创新。 |
|