高可用双向存储服务GlusterFS
一、环境准备
1. 节点信息(示例)
节点角色 | 主机名 | IP 地址 | 存储目录(用于 GlusterFS) |
---|---|---|---|
节点 1 | gluster-node1 | 192.168.1.101 | /data/gluster/brick1 |
节点 2 | gluster-node2 | 192.168.1.102 | /data/gluster/brick1 |
2. 系统初始化(两台节点均执行)
# 关闭 SELinux(临时+永久)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config# 更新系统
sudo dnf update -y && sudo dnf install -y vim chrony# 配置时间同步(确保节点时间一致)
sudo systemctl enable --now chronyd
sudo chronyc sources # 验证时间同步状态# 设置主机名(节点1执行)
sudo hostnamectl set-hostname gluster-node1
# 节点2执行
sudo hostnamectl set-hostname gluster-node2# 配置 hosts 解析(两台节点均执行)
sudocat <<EOF >> /etc/hosts
192.168.1.101 gluster-node1
192.168.1.102 gluster-node2
EOF
二、安装 GlusterFS 服务
1. 安装软件包(两台节点均执行)
# 启用 GlusterFS 存储库(CentOS Stream 9 默认包含)yum install -y centos-release-gluster#删除原始源换成国内源
rm -rf /etc/yum.repos.d/CentOS-Gluster-9.repo
yum install -y yum-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/centos/7/storage/x86_64/gluster-9/#加入一行
cat mirrors.aliyun.com_centos_7_storage_x86_64_gluster-9_.repo [mirrors.aliyun.com_centos_7_storage_x86_64_gluster-9_]
name=added from: https://mirrors.aliyun.com/centos/7/storage/x86_64/gluster-9/
baseurl=https://mirrors.aliyun.com/centos/7/storage/x86_64/gluster-9/
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Storage ###加入这一行# 安装 GlusterFS 服务端yum install -y glusterfs-server# 启动并设置开机自启systemctl enable --now glusterd# 验证服务状态(确保 Active: active (running))
systemctl status glusterd
三、防火墙详细配置(两台节点均执行)
GlusterFS 需要开放以下端口:
• 24007/tcp:集群管理端口
• 24008/tcp:节点间通信端口
• 49152-49156/tcp:数据传输端口(动态范围)
# 开放 GlusterFS 必需端口
sudo firewall-cmd --permanent --add-port=24007/tcp
sudo firewall-cmd --permanent --add-port=24008/tcp
sudo firewall-cmd --permanent --add-port=49152-49156/tcp# 允许节点间 SSH 通信(便于管理)
sudo firewall-cmd --permanent --add-service=ssh# 重新加载防火墙规则
sudo firewall-cmd --reload# 验证开放的端口
sudo firewall-cmd --list-ports
# 预期输出包含:24007/tcp 24008/tcp 49152-49156/tcp
四、建立 GlusterFS 集群信任关系
1. 节点间互相认证(仅在节点 1 执行)
# 探测节点2,建立信任关系
sudo gluster peer probe gluster-node2# 验证集群状态(显示节点2为 "Peer in Cluster")
sudo gluster peer status
2. 检查集群状态(两台节点均执行)
sudo gluster peer status
# 节点1输出示例:
# Number of Peers: 1
# Hostname: gluster-node2
# Uuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
# State: Peer in Cluster (Connected)
五、准备存储目录(两台节点均执行)
# 创建存储目录(GlusterFS 数据存储位置)
sudo mkdir -p /data/gluster/brick1# 设置目录权限(确保 GlusterFS 进程可访问)
sudo chown -R root:root /data/gluster
sudo chmod -R 755 /data/gluster# 验证目录权限
ls -ld /data/gluster/brick1
# 预期输出:drwxr-xr-x 2 root root ... /data/gluster/brick1
六、创建 GlusterFS 复制卷(高可用)
1. 创建卷(仅在节点 1 执行)
# 创建 replica 2 复制卷(数据在两台节点同步)
sudo gluster volume create gv0 replica 2 \gluster-node1:/data/gluster/brick1 \gluster-node2:/data/gluster/brick1 \force# 启动卷
sudo gluster volume start gv0# 验证卷状态(确保 "Status: Started")
sudo gluster volume info gv0
2. 卷配置说明
•
replica 2
:数据在两台节点实时同步,确保单节点故障时数据不丢失•
gv0
:卷名称(可自定义)•
force
:忽略目录非空警告(首次创建时目录为空,可选)
七、测试 GlusterFS 集群
1. 在客户端挂载卷(可在任意节点或第三方服务器执行)
# 安装 GlusterFS 客户端
sudo dnf install -y glusterfs-client# 创建挂载点
sudo mkdir -p /mnt/glusterfs# 临时挂载卷(通过节点1挂载)
sudo mount.glusterfs gluster-node1:/gv0 /mnt/glusterfs# 验证挂载(显示卷容量)
df -h /mnt/glusterfs
# 预期输出:gluster-node1:/gv0 <总容量> 0 <总容量> 0% /mnt/glusterfs
2. 测试数据同步
# 在挂载点创建测试文件
sudo touch /mnt/glusterfs/test.txt
sudo echo "GlusterFS 集群测试" > /mnt/glusterfs/test.txt# 查看文件内容
cat /mnt/glusterfs/test.txt# 在节点2的存储目录验证文件是否同步
cat /data/gluster/brick1/test.txt
# 预期输出:GlusterFS 集群测试(与节点1内容一致)
3. 设置永久挂载(客户端执行)
# 编辑 /etc/fstab,添加自动挂载
sudo echo "gluster-node1:/gv0 /mnt/glusterfs glusterfs defaults,_netdev 0 0" >> /etc/fstab# 验证自动挂载(重启后生效)
sudo mount -a
八、集群维护常用命令
# 查看卷状态
sudo gluster volume status# 停止卷(维护时使用)
sudo gluster volume stop gv0# 扩容卷(添加新节点后执行)
sudo gluster volume add-brick gv0 gluster-node3:/data/gluster/brick1# 修复数据不一致(节点故障恢复后)
sudo gluster volume heal gv0 full
注意事项
1. 脑裂风险:双节点复制卷(replica 2)存在脑裂风险(网络中断时两端独立写入),生产环境建议扩展为 3 节点 replica 3 或 arbiter 卷。
2. 防火墙:若后续修改节点 IP 或端口,需同步更新防火墙规则。
3. 存储性能:建议使用独立磁盘挂载
/data/gluster
,避免与系统盘共用 IO。