集群文件系统是一种允许多个节点同时挂载并读写同一存储设备的文件系统,在Linux高可用集群、负载均衡集群场景中应用广泛,能够保障多节点访问时的数据一致性,避免单点存储故障影响业务运行。

主流集群文件系统方案对比
Linux生态下常用的集群文件系统主要有GFS2和OCFS2两种,两者适用场景略有差异,具体对比如下:
| 对比项 | GFS2 | OCFS2 |
|---|---|---|
| 所属项目 | Red Hat主导开发 | Oracle主导开发 |
| 适用系统 | 主要适配RHEL、CentOS等Red Hat系发行版 | 适配多数主流Linux发行版 |
| 依赖组件 | 需要corosync、pacemaker集群框架支持 | 自带集群栈,也可对接外部集群框架 |
| 典型场景 | 高可用数据库、虚拟化存储共享 | Oracle RAC、Web集群共享存储 |
配置前环境准备
在开始配置前,需要完成以下准备工作:
- 至少2台Linux节点,节点之间网络互通,建议配置专用心跳网络
- 共享存储设备,如SAN存储、iSCSI共享磁盘,所有节点都能识别到同一块共享磁盘
- 所有节点配置好hosts解析,确保节点之间可以通过主机名互相访问
- 关闭所有节点的防火墙和SELinux,或者配置对应放通规则
基于GFS2的集群文件系统配置步骤
1. 安装依赖组件
所有节点执行以下命令安装集群和GFS2相关软件包,以CentOS 7为例:
# 安装集群基础组件和GFS2工具 yum install -y corosync pacemaker pcs gfs2-utils lvm2-cluster # 设置pcs服务开机自启 systemctl enable pcsd systemctl start pcsd # 为hacluster用户设置密码,所有节点密码保持一致 echo "your_password" | passwd --stdin hacluster
2. 组建集群
在其中一个节点执行以下命令完成集群认证和组建:
# 认证所有集群节点,输入hacluster用户的密码 pcs cluster auth node1 node2 # 创建名为my_cluster的集群,包含node1和node2两个节点 pcs cluster setup --name my_cluster node1 node2 # 启动集群服务 pcs cluster start --all # 设置集群服务开机自启 pcs cluster enable --all
3. 配置共享存储和集群LVM
所有节点执行以下命令启用集群LVM功能:
# 修改lvm配置文件,启用集群锁 echo "locking_type = 3" >> /etc/lvm/lvm.conf echo "system_id_source = "uname"" >> /etc/lvm/lvm.conf # 在共享磁盘上创建物理卷,假设共享磁盘为/dev/sdb pvcreate /dev/sdb # 创建卷组 vgcreate cluster_vg /dev/sdb # 创建逻辑卷 lvcreate -L 10G -n cluster_lv cluster_vg
4. 格式化和挂载GFS2文件系统
执行以下命令完成文件系统创建和挂载:
# 格式化逻辑卷为GFS2文件系统,指定集群名称为my_cluster mkfs.gfs2 -p lock_dlm -t my_cluster:gfs2_fs -j 2 /dev/cluster_vg/cluster_lv # 创建挂载目录 mkdir -p /mnt/cluster_fs # 挂载文件系统 mount /dev/cluster_vg/cluster_lv /mnt/cluster_fs # 设置开机自动挂载,编辑/etc/fstab添加以下内容 echo "/dev/cluster_vg/cluster_lv /mnt/cluster_fs gfs2 defaults 0 0" >> /etc/fstab
基于OCFS2的集群文件系统配置步骤
1. 安装OCFS2相关组件
所有节点执行安装命令:
# 安装OCFS2工具和集群组件 yum install -y ocfs2-tools corosync # 启动corosync服务 systemctl start corosync systemctl enable corosync
2. 配置OCFS2集群
编辑所有节点的OCFS2配置文件/etc/ocfs2/cluster.conf,内容如下:
node:
ip_port = 7777
ip_address = 192.168.0.1
number = 0
name = node1
cluster = ocfs2_cluster
node:
ip_port = 7777
ip_address = 192.168.0.2
number = 1
name = node2
cluster = ocfs2_cluster
cluster:
node_count = 2
name = ocfs2_cluster
3. 格式化和挂载OCFS2文件系统
执行以下命令完成配置:
# 在共享磁盘上创建OCFS2文件系统,假设共享磁盘为/dev/sdb mkfs.ocfs2 /dev/sdb # 所有节点启动OCFS2服务 systemctl start o2cb systemctl enable o2cb # 创建挂载目录 mkdir -p /mnt/ocfs2_fs # 挂载文件系统 mount /dev/sdb /mnt/ocfs2_fs # 设置开机自动挂载,编辑/etc/fstab添加以下内容 echo "/dev/sdb /mnt/ocfs2_fs ocfs2 defaults 0 0" >> /etc/fstab
配置注意事项
- 共享存储必须保证所有节点识别到的设备路径一致,避免因为设备名不同导致挂载失败
- 集群节点时间必须同步,建议配置NTP服务,避免因为时间偏差导致集群锁异常
- GFS2的日志数量(-j参数)不能少于集群节点数量,否则部分节点无法挂载
- 生产环境建议为集群配置 fence设备,避免节点异常时出现脑裂问题导致数据损坏
验证配置结果
可以在一个节点上创建测试文件,在另一个节点查看文件是否存在,验证多节点共享读写功能:
# 节点1执行 echo "cluster fs test" > /mnt/cluster_fs/test.txt # 节点2执行 cat /mnt/cluster_fs/test.txt # 如果输出cluster fs test则表示配置成功