📖 背景介绍
在虚拟化环境管理和集群部署过程中,我们经常需要批量配置多台虚拟机的基础信息,包括主机名、IP地址、网络配置等。传统的手动配置方式效率低下且容易出错。本文将介绍如何使用Shell脚本实现一键自动化配置,显著提高运维效率。
🛠️ 环境准备
系统要求
-
虚拟化平台:VMware Workstation
-
操作系统:CentOS 7
-
节点规划:
-
node1: 192.168.139.151
-
node2: 192.168.139.152
-
node3: 192.168.139.153
-
前置条件
-
已完成第一台VM(node1)的基础系统安装
-
确保网络连通性正常
-
具备root或sudo权限
📁 核心脚本实现
1. 基础配置脚本
#!/bin/bash
# configure-vm.sh - 主机名和IP配置脚本
# 配置参数
NEW_HOSTNAME="node1"
IP_ADDRESS="192.168.139.151"
NETMASK="255.255.255.0"
GATEWAY="192.168.139.2"
DNS_SERVERS="8.8.8.8 8.8.4.4"
INTERFACE="ens33"
# 检查root权限
check_root() {
if [[ $EUID -ne 0 ]]; then
echo "错误: 此脚本需要root权限运行"
echo "请使用: sudo bash $0"
exit 1
fi
}
# 设置主机名
set_hostname() {
echo "设置主机名: $NEW_HOSTNAME"
hostnamectl set-hostname "$NEW_HOSTNAME"
echo "$NEW_HOSTNAME" > /etc/hostname
sed -i "/127.0.1.1/d" /etc/hosts 2>/dev/null
echo "127.0.1.1 $NEW_HOSTNAME" >> /etc/hosts
echo "✅ 主机名设置完成"
}
# 配置网络
configure_network() {
echo "配置网络接口: $INTERFACE"
# 备份原配置
cp "/etc/sysconfig/network-scripts/ifcfg-${INTERFACE}" "/etc/sysconfig/network-scripts/ifcfg-${INTERFACE}.bak" 2>/dev/null
# 创建网络配置
cat > "/etc/sysconfig/network-scripts/ifcfg-${INTERFACE}" << EOF
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=$INTERFACE
DEVICE=$INTERFACE
ONBOOT=yes
IPADDR=$IP_ADDRESS
NETMASK=$NETMASK
GATEWAY=$GATEWAY
DNS1=8.8.8.8
DNS2=8.8.4.4
EOF
echo "重启网络服务..."
systemctl restart network
echo "✅ 网络配置完成"
}
# 验证配置
verify_config() {
echo ""
echo "=== 配置验证 ==="
echo "主机名: $(hostname)"
echo "IP地址: $(hostname -I | awk '{print \$1}')"
echo "网络接口状态:"
ip addr show $INTERFACE
}
# 主执行流程
main() {
check_root
echo "🚀 开始配置VM..."
set_hostname
configure_network
verify_config
echo "✅ 配置完成!建议重启系统。"
}
main "$@"

2. 智能集群配置脚本
#!/bin/bash
# setup_cluster.sh - 智能集群配置脚本
NODE_PREFIX="node"
BASE_IP="192.168.139"
GATEWAY="192.168.139.2"
# 自动检测配置
auto_configure() {
local current_ip=$(hostname -I | awk '{print \$1}')
local ip_suffix=${current_ip##*.}
local new_hostname="${NODE_PREFIX}${ip_suffix}"
local new_ip="${BASE_IP}.${ip_suffix}"
echo "🔧 自动检测配置:"
echo " 主机名: $new_hostname"
echo " IP地址: $new_ip"
echo " 网关: $GATEWAY"
read -p "确认应用此配置? (y/n): " confirm
if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
apply_configuration "$new_hostname" "$new_ip"
else
manual_configure
fi
}

3. 批量部署脚本
#!/bin/bash
# bulk_deploy.sh - 多机批量部署
declare -A VM_CONFIGS=(
["192.168.139.151"]="node1"
["192.168.139.152"]="node2"
["192.168.139.153"]="node3"
)
SSH_USER="root"
SSH_OPTS="-o StrictHostKeyChecking=no"
bulk_deploy() {
for vm_ip in "${!VM_CONFIGS[@]}"; do
hostname=${VM_CONFIGS[$vm_ip]}
echo "配置 $hostname ($vm_ip)"
scp $SSH_OPTS setup_cluster.sh $SSH_USER@$vm_ip:/tmp/
ssh $SSH_OPTS $SSH_USER@$vm_ip "cd /tmp && bash setup_cluster.sh"
[ $? -eq 0 ] && echo "✅ $hostname 成功" || echo "❌ $hostname 失败"
done
}
🚀 实施步骤
步骤1:基础环境准备
# 在node1上创建配置脚本
vim setup_cluster.sh
chmod +x setup_cluster.sh
步骤2:VMware克隆操作
-
关闭node1虚拟机
-
右键 → 管理 → 克隆
-
创建完整克隆:node2、node3
-
启动所有虚拟机

步骤3:脚本分发与执行
# 复制脚本到各节点
scp setup_cluster.sh root@192.168.139.152:~/
scp setup_cluster.sh root@192.168.139.153:~/
# 在各节点执行配置
ssh root@192.168.139.152 "./setup_cluster.sh"
ssh root@192.168.139.153 "./setup_cluster.sh"
步骤4:配置验证
# 创建集群验证脚本
cat > check_cluster.sh << 'EOF'
#!/bin/bash
nodes=("node1" "node2" "node3")
ips=("192.168.139.151" "192.168.139.152" "192.168.139.153")
for i in "${!nodes[@]}"; do
node=${nodes[i]}
ip=${ips[i]}
echo "检查 $node ($ip)"
if ping -c 1 -W 1 $ip &> /dev/null; then
echo "✅ 在线 - $(ssh root@$ip 'hostname'): $(ssh root@$ip 'hostname -I')"
else
echo "❌ 离线"
fi
done
EOF
⚠️ 注意事项
-
权限管理:确保执行脚本的用户具有足够的权限
-
网络规划:提前规划好IP地址分配,避免冲突
-
配置备份:重要配置文件修改前务必备份
-
测试验证:在生产环境使用前充分测试
🎯 方案优势
-
高效性:从小时级手动配置提升到分钟级自动化
-
准确性:避免人工操作错误,确保配置一致性
-
可扩展:轻松支持节点扩展和批量管理
-
灵活性:支持自定义配置参数和部署策略
🔧 故障排查
常见问题及解决方案
SSH连接超时
# 检查防火墙状态
systemctl status firewalld
systemctl stop firewalld
权限被拒绝
# 检查SSH配置
cat /etc/ssh/sshd_config | grep PermitRootLogin
网络配置不生效
# 重启网络服务
systemctl restart network
# 或重启系统
reboot
📊 效果对比
| 配置方式 | 时间消耗 | 错误率 | 可维护性 |
|---|---|---|---|
| 手动配置 | 30分钟/台 | 高 | 差 |
| 脚本自动化 | 2分钟/台 | 低 | 优秀 |
💡 经验总结
通过本次实践,我们成功实现了:
-
标准化流程:建立统一的虚拟机配置标准
-
自动化部署:大幅提升部署效率和准确性
-
可复用方案:脚本可适应不同环境和需求
-
运维规范化:为后续集群管理奠定基础
📚 扩展应用
该方案可进一步扩展至:
-
Docker容器集群配置
-
Kubernetes节点初始化
-
云环境实例自动化配置
-
持续集成/持续部署流水线
1602

被折叠的 条评论
为什么被折叠?



