该脚本没有以往智能,需要键盘输入获取变量值
当前局限于两台Web节点服务器,后期改善
每台服务器需要配置好yum源
多处使用免交互,需耐心等待
一、随便找一台服务器
随便找一台服务器,该服务器被设定为NFS共享服务器
创建一个脚本文件,将以下内容复制进去
#!/bin/bash
b=`ip a | grep "ens33" | awk NR==2'{print}' | awk -F/ '{print$1}' | awk '{print$2}'`
z=`echo $b | awk -F. '{print$1"."$2"."$3}'`
echo -e "\033[31m 请准备四台服务器 \033[0m"
echo -e "\033[31m 本台服务器为NFS共享服务器($b)\033[0m"
read -p "请输入root密码:" h
read -p "请输入VIP:" e
read -p "请输入负载调度器IP:" a
read -p "请输入Web节点服务器1IP:" c
read -p "请输入Web节点服务器2IP:" d
read -p "请输入共享目录1(例:kgc):" f
read -p "请输入共享目录2(例:benet):" g
yum -y install expect
systemctl stop firewalld.service
setenforce 0
yum -y install nfs-utils rpcbind
mkdir /opt/$f
mkdir /opt/$g
chmod -R 777 /opt/$f
chmod -R 777 /opt/$g
echo "/opt/$f $z.0/24(rw,sync)
/opt/$g $z.0/24(rw,sync)" > /etc/exports
systemctl restart rpcbind.service
systemctl restart nfs.service
#Web1内容导入/opt/$f
cat > /opt/$f/Web1.sh <<EOF
#!/bin/bash
function Web1 {
systemctl stop firewalld.service
setenforce 0
yum -y install nfs-utils rpcbind httpd
systemctl restart rpcbind
systemctl restart httpd
mount.nfs $b:/opt/$f /var/www/html
echo "this is $f web" > /var/www/html/index.html
echo "DEVICE=lo:0
ONBOOT=yes
IPADDR=$e
NETMASK=255.255.255.255" > /etc/sysconfig/network-scripts/ifcfg-lo:0
ifup lo:0
route add -host $e dev lo:0
echo "net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
sysctl -p
}
Web1
EOF
chmod -R 777 /opt/$f
#Web2内容导入/opt/$g
cat > /opt/$g/Web2.sh <<EOF
#!/bin/bash
function Web2 {
systemctl stop firewalld.service
setenforce 0
yum -y install nfs-utils rpcbind httpd
systemctl restart rpcbind
systemctl restart httpd
mount.nfs $b:/opt/$g /var/www/html
echo "this is $g web" > /var/www/html/index.html
echo "DEVICE=lo:0
ONBOOT=yes
IPADDR=$e
NETMASK=255.255.255.255" > /etc/sysconfig/network-scripts/ifcfg-lo:0
ifup lo:0
route add -host $e dev lo:0
echo "net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
sysctl -p
}
Web2
EOF
chmod -R 777 /opt/$g
#将负载调度器配置导入/opt/$f
cat > /opt/$f/DR.sh <<-EOF
#!/bin/bash
function DR {
systemctl stop firewalld
setenforce 0
modprobe ip_vs
cat /proc/net/ip_vs
yum -y install ipvsadm
#配置虚拟IP地址
echo "DEVICE=ens33:0
ONBOOT=yes
IPADDR=$e
NETMASK=255.255.255.255" > /etc/sysconfig/network-scripts/ifcfg-ens33:0
systemctl restart network
echo "net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0" >> /etc/sysctl.conf
sysctl -p
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
ipvsadm -C
ipvsadm -A -t $e:80 -s rr
ipvsadm -a -t $e:80 -r $c:80 -g
ipvsadm -a -t $e:80 -r $d:80 -g
ipvsadm
}
DR
EOF
chmod -R 777 /opt/$f
#登陆Web1执行共享脚本
/usr/bin/expect <<-EOF
spawn ssh root@$c
expect "(yes/no)" {send "yes\r"}
expect "password" {send "$h\r"}
expect "~]#" {send "yum -y install nfs-utils rpcbind httpd\r"}
expect "~]#" {send "mount.nfs $b:/opt/$f /var/www/html\r"}
expect "~]#" {send ". /var/www/html/Web1.sh\r"}
expect eof
EOF
#登陆Web2执行共享脚本
/usr/bin/expect <<-EOF
spawn ssh root@$d
expect "(yes/no)" {send "yes\r"}
expect "password" {send "$h\r"}
expect "~]#" {send "yum -y install nfs-utils rpcbind httpd\r"}
expect "~]#" {send "mount.nfs $b:/opt/$g /var/www/html\r"}
expect "~]#" {send ". /var/www/html/Web2.sh\r"}
expect eof
EOF
#登陆负载调度器执行共享脚本
/usr/bin/expect <<-EOF
spawn ssh root@$a
expect "(yes/no)" {send "yes\r"}
expect "password" {send "$h\r"}
expect "~]#" {send "yum -y install nfs-utils rpcbind httpd\r"}
expect "~]#" {send "mount.nfs $b:/opt/$f /var/www/html\r"}
expect "~]#" {send ". /var/www/html/DR.sh\r"}
expect eof
EOF
echo -e "\033[31m 此时可使用NFS共享服务器,浏览器访问VIP:$e,间隔5秒点击刷新,验证负载均衡策略是否成功。 \033[0m"
二、执行脚本
三、可使用NFS共享服务访问虚拟IP,验证负载均衡策略是否完成