任务5:如何创建shell脚本一键实现主机名、 IP等基础配置并在多台VM上实现

📖 背景介绍

在虚拟化环境管理和集群部署过程中,我们经常需要批量配置多台虚拟机的基础信息,包括主机名、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克隆操作

  1. 关闭node1虚拟机

  2. 右键 → 管理 → 克隆

  3. 创建完整克隆:node2、node3

  4. 启动所有虚拟机

步骤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

⚠️ 注意事项

  1. 权限管理:确保执行脚本的用户具有足够的权限

  2. 网络规划:提前规划好IP地址分配,避免冲突

  3. 配置备份:重要配置文件修改前务必备份

  4. 测试验证:在生产环境使用前充分测试

🎯 方案优势

  • 高效性:从小时级手动配置提升到分钟级自动化

  • 准确性:避免人工操作错误,确保配置一致性

  • 可扩展:轻松支持节点扩展和批量管理

  • 灵活性:支持自定义配置参数和部署策略

🔧 故障排查

常见问题及解决方案

SSH连接超时

# 检查防火墙状态
systemctl status firewalld
systemctl stop firewalld

权限被拒绝

# 检查SSH配置
cat /etc/ssh/sshd_config | grep PermitRootLogin

网络配置不生效

# 重启网络服务
systemctl restart network
# 或重启系统
reboot

📊 效果对比

配置方式时间消耗错误率可维护性
手动配置30分钟/台
脚本自动化2分钟/台优秀

💡 经验总结

通过本次实践,我们成功实现了:

  1. 标准化流程:建立统一的虚拟机配置标准

  2. 自动化部署:大幅提升部署效率和准确性

  3. 可复用方案:脚本可适应不同环境和需求

  4. 运维规范化:为后续集群管理奠定基础

📚 扩展应用

该方案可进一步扩展至:

  • Docker容器集群配置

  • Kubernetes节点初始化

  • 云环境实例自动化配置

  • 持续集成/持续部署流水线

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值