共有4个文件 ip.txt 存放服务器ip地址,ip数量可随意删减
bond 网卡绑定脚本
scp.sh 将bond文件拷贝至每个客户端服务器
mv.sh 执行程序脚本
执行步骤(需执行两个脚本):
#bash scp.sh
#bash mv.sh
其中每个服务器的bond0 ip是递加的 while循环的时候,将每个拷入客户端的文件命名为(1,2,3......) ;本例中从1开始,根据实际情况调整;不能和已使用ip冲突,否则会导致网卡绑定失败
declire -i n=1 声明为整数
n=$(($n+1)) 在循环中递加;将n的值赋给文件名
bond0的ip 192.168.25.$0 $0为文件名 例如 192.168.25.1 192.168.25.2
多服务器原理:while循环,逐条读取
expect :实现自动和交互式任务进行通信
spawn :是进入expect环境后才可以执行的expect内部命令
ip.txt (只用了两个服务器,作演示用,ip只要能ssh进入就行)
192.168.25.177
192.168.25.178
bond (拷入客户端文件)
device% 网卡名
#!/bin/bash
device1=`ifconfig |awk ‘NR==1 {print $1}‘`
device2=`ifconfig |awk ‘NR==10 {print $1}‘`
mask=`ifconfig |awk ‘NR==2 {print $4}‘|cut -d : -f 2`
echo -e "auto bond0\n iface bond0 inet static\n address 192.168.25.$0\n netmask $mask\n gateway 192.168.25.250\n dns-nameservers 8.8.8.8\n up ifenslave bond0 $device1 $device2\n down ifenslave -d bond0 $device1 $device2" >> /etc/network/interfaces
echo bonding mode=0 miimon=100 >> /etc/modules
apt-get install ifenslave
scp.sh (执行拷贝脚本)
exp_continue 在本例中:继续向下执行,遇EOF结束
#!/bin/bash
passwd=‘root‘
cat /home/gm/ip.txt |while read LINE
do
/usr/bin/expect <<-EOF
spawn scp /home/gm/bond root@$LINE:/root
expect {
"*yes/no" { send "yes\r"; exp_continue }
"*password:" { send "$passwd\r" }
}
expect eof
exit
EOF
sleep 5
done
mv.sh (执行程序脚本,包括给bond改名字)
declire -i n=1 声明为整数
n=$(($n+1)) 在循环中递加
将n的值赋给文件名
send "bash $n\r" 执行网卡绑定脚本;必须用bash执行,否则脚本内$0得到的文件名不是数字,影响bond0 ip
#!/bin/bash
passwd=‘root‘
declire -i n=1
cat /home/gm/ip.txt |while read LINE
do
n=$(($n+1))
/usr/bin/expect <<-EOF
spawn ssh root@$LINE
expect {
"*yes/no" { send "yes\r"; exp_continue }
"*password:" { send "$passwd\r" }
}
expect "*#"
send "cd /root\r"
expect "*#"
send "mv bond $n\r"
expect "*#"
send "bash $n\r"
expect "*#"
send "reboot\r"
expect eof
exit
EOF
sleep 5
done
本文出自 “11634758” 博客,请务必保留此出处http://11644758.blog.51cto.com/11634758/1840085
原文地址:http://11644758.blog.51cto.com/11634758/1840085