本文目录导读:

我来提供几个不同场景下的GlusterFS自动化配置脚本。
双节点复制卷配置脚本
#!/bin/bash
# glusterfs-auto-setup.sh
# 自动配置GlusterFS复制卷
set -euo pipefail
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查root权限
check_root() {
if [[ $EUID -ne 0 ]]; then
log_error "请以root用户运行此脚本"
exit 1
fi
}
# 配置参数
NODE1=""
NODE2=""
BRICK_PATH="/data/brick1"
VOLUME_NAME="gv0"
REPLICA_COUNT=2
# 验证IP/主机名
validate_node() {
local node=$1
if ! ping -c 1 -W 1 "$node" &> /dev/null; then
log_warn "节点 $node 无法ping通,请确认网络连接"
return 1
fi
return 0
}
# 初始化节点
init_node() {
local node=$1
log_info "初始化节点 $node..."
# 创建挂载目录
ssh "$node" "mkdir -p $BRICK_PATH"
# 格式化并挂载磁盘(示例:使用/dev/sdb)
# 根据实际情况调整
if ssh "$node" "[ -b /dev/sdb ]" 2>/dev/null; then
ssh "$node" "
mkfs.xfs -f /dev/sdb 2>/dev/null || true
mount /dev/sdb $BRICK_PATH 2>/dev/null || true
echo '/dev/sdb $BRICK_PATH xfs defaults 0 0' >> /etc/fstab
"
log_info "磁盘已挂载到 $BRICK_PATH"
else
log_warn "未找到额外的磁盘,使用现有目录"
fi
}
# 配置防火墙
configure_firewall() {
local node=$1
log_info "配置 $node 防火墙规则..."
ssh "$node" "
# GlusterFS 端口
firewall-cmd --zone=public --add-port=24007-24008/tcp --permanent
firewall-cmd --zone=public --add-port=49152-49251/tcp --permanent
firewall-cmd --zone=public --add-port=111/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all
" 2>/dev/null || log_warn "防火墙配置失败,请手动配置"
}
# 安装GlusterFS
install_glusterfs() {
local node=$1
log_info "在 $node 安装GlusterFS..."
ssh "$node" "
# CentOS/RHEL
yum install -y centos-release-gluster 2>/dev/null || true
yum install -y glusterfs-server glusterfs glusterfs-fuse
# 启动服务
systemctl start glusterd
systemctl enable glusterd
systemctl status glusterd
"
}
# 配置集群
setup_cluster() {
log_info "配置GlusterFS集群..."
# 在第一个节点上探测其他节点
gluster peer probe "$NODE2"
sleep 5
# 检查节点状态
gluster peer status
}
# 创建卷
create_volume() {
log_info "创建复制卷 $VOLUME_NAME..."
# 移除已存在的卷
gluster volume delete "$VOLUME_NAME" force 2>/dev/null || true
# 创建复制卷
gluster volume create "$VOLUME_NAME" \
replica "$REPLICA_COUNT" \
transport tcp \
"$NODE1:$BRICK_PATH" \
"$NODE2:$BRICK_PATH" \
force
# 启动卷
gluster volume start "$VOLUME_NAME"
# 配置卷选项
gluster volume set "$VOLUME_NAME" performance.cache-size 256MB
gluster volume set "$VOLUME_NAME" performance.io-thread-count 32
gluster volume set "$VOLUME_NAME" network.ping-timeout 10
}
# 挂载卷
mount_volume() {
local mount_point="/mnt/glusterfs"
log_info "挂载卷到 $mount_point..."
mkdir -p "$mount_point"
# 安装客户端
yum install -y glusterfs-fuse 2>/dev/null || true
# 挂载
mount -t glusterfs "$NODE1:/$VOLUME_NAME" "$mount_point"
# 添加到fstab
if ! grep -q "$VOLUME_NAME" /etc/fstab; then
echo "$NODE1:/$VOLUME_NAME $mount_point glusterfs defaults,_netdev 0 0" >> /etc/fstab
fi
}
# 验证配置
verify_setup() {
log_info "验证配置..."
echo "=== 节点状态 ==="
gluster peer status
echo -e "\n=== 卷信息 ==="
gluster volume info "$VOLUME_NAME"
echo -e "\n=== 卷状态 ==="
gluster volume status "$VOLUME_NAME"
}
# 主函数
main() {
clear
echo "========================================="
echo " GlusterFS 自动配置脚本"
echo "========================================="
check_root
# 获取输入
read -p "请输入第一个节点IP/主机名: " NODE1
read -p "请输入第二个节点IP/主机名: " NODE2
read -p "Brick路径 (默认: /data/brick1): " input_path
BRICK_PATH=${input_path:-/data/brick1}
read -p "卷名称 (默认: gv0): " input_vol
VOLUME_NAME=${input_vol:-gv0}
# 验证节点
echo -e "\n验证节点连接..."
validate_node "$NODE1" || exit 1
validate_node "$NODE2" || exit 1
# 配置所有节点
for node in "$NODE1" "$NODE2"; do
echo -e "\n${YELLOW}配置节点: $node${NC}"
install_glusterfs "$node"
configure_firewall "$node"
init_node "$node"
done
# 本节点配置
echo -e "\n${YELLOW}配置本地节点${NC}"
systemctl start glusterd
systemctl enable glusterd
# 设置集群
setup_cluster
# 创建卷
create_volume
# 挂载
mount_volume
# 验证
verify_setup
log_info "配置完成!"
echo -e "\n可用命令:"
echo " gluster peer status - 查看节点状态"
echo " gluster volume info - 查看卷信息"
echo " gluster volume status - 查看卷状态"
echo " df -h /mnt/glusterfs - 查看挂载状态"
}
# 执行主函数
main "$@"
分布式卷配置脚本
#!/bin/bash
# glusterfs-distributed.sh
# 分布式卷配置
# 配置参数
NODES=("node1" "node2" "node3" "node4")
VOLUME_NAME="dist-vol"
BRICK_PATH="/data/brick"
DIST_COUNT=4
# 创建分布式卷
create_distributed_volume() {
local brick_list=""
for node in "${NODES[@]}"; do
brick_list+=" $node:$BRICK_PATH"
done
# 创建卷
gluster volume create "$VOLUME_NAME" \
transport tcp \
$brick_list force
# 配置卷
gluster volume set "$VOLUME_NAME" performance.cache-size 512MB
gluster volume start "$VOLUME_NAME"
}
# 添加新节点
add_node() {
local new_node=$1
local new_brick="$new_node:$BRICK_PATH"
# 探测新节点
gluster peer probe "$new_node"
# 添加brick
gluster volume add-brick "$VOLUME_NAME" \
replica 2 \
"$new_brick" force
# 重新平衡
gluster volume rebalance "$VOLUME_NAME" start
}
监控脚本
#!/bin/bash
# glusterfs-monitor.sh
# GlusterFS状态监控
monitor_gluster() {
local email="admin@example.com"
local log_file="/var/log/gluster-monitor.log"
# 检查节点状态
local peer_status=$(gluster peer status 2>&1)
if [[ $? -ne 0 ]]; then
echo "节点异常: $peer_status" | mail -s "GlusterFS Alert" "$email"
fi
# 检查卷状态
for vol in $(gluster volume list 2>/dev/null); do
local vol_status=$(gluster volume status "$vol" 2>&1)
if echo "$vol_status" | grep -q "Offline"; then
echo "卷 $vol 离线" | mail -s "GlusterFS Alert" "$email"
fi
done
# 记录日志
echo "[$(date)] 状态检查完成" >> "$log_file"
}
# 每5分钟运行一次
while true; do
monitor_gluster
sleep 300
done
一键安装配置脚本
#!/bin/bash
# glusterfs-oneclick.sh
# 一键安装配置
# 支持的发行版
detect_os() {
if [ -f /etc/redhat-release ]; then
echo "centos"
elif [ -f /etc/debian_version ]; then
echo "ubuntu"
else
echo "unknown"
fi
}
install_dependencies() {
local os=$1
case $os in
centos|rhel)
yum install -y wget curl tar
;;
ubuntu|debian)
apt-get update
apt-get install -y wget curl tar software-properties-common
;;
esac
}
install_gluster() {
local os=$1
case $os in
centos|rhel)
yum install -y epel-release
yum install -y glusterfs-server
;;
ubuntu|debian)
add-apt-repository -y ppa:gluster/glusterfs-9
apt-get update
apt-get install -y glusterfs-server
;;
esac
systemctl start glusterd
systemctl enable glusterd
}
# 主流程
OS=$(detect_os)
install_dependencies "$OS"
install_gluster "$OS"
echo "GlusterFS安装完成"
使用说明
- 保存脚本: 将脚本保存为
.sh文件 - 设置权限:
chmod +x script.sh - 运行:
./script.sh
注意事项
- 确保所有节点间网络互通
- 配置好主机名解析(/etc/hosts)
- 关闭防火墙或配置相应规则
- 每个brick使用独立磁盘分区
- 生产环境建议使用RAID或分布式复制卷
这些脚本涵盖了GlusterFS的自动部署、配置和监控,可以根据实际环境调整参数。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播