keepalived+LVS-DR+nginx+NFS web高负载高可用集群部署脚本---亲测可用

该集群架构:五台centos7服务器

两台负责调度(keepalived+LVS-DR),一主一备。

两台提供真实的web服务(nginx)(当然也可以是其他服务器,如mail,dns等等)

一台NFS服务器模拟网络共享存储(生产状态请使用专业存储器)

 调度服务器脚本:

运行脚本前请准备好两台提供真实的web服务器的IP以及一个空闲的IP作为VIP,运行脚本时需要输入。

注意,脚本运行中选择1,这台服务器为master;选择2,这台服务器为backup。

#!/bin/bash
#function:keepalived+lvs
#author:tommypeng 20220716 final version
###############root用户判断#######################
if
  [  "$USER"  != "root"   ]
then
   echo "错误:非root用户,权限不足!"
  exit  0
fi
############防火墙与高级权限##########
systemctl stop firewalld && systemctl disable firewalld  && echo "防火墙已经关闭"
sed -i 's/SELINUX=.*/SELINUX=disabled/g'  /etc/selinux/config  && echo "关闭selinux"
##############网络测试##############
ping   -c  3  www.baidu.com
if
  [ $? = 0 ]
  then
    echo "外网通讯良好!"
  else
    echo  "丫的你在逗我吗?网都没有安装个毛线!"
   exit  1
fi
#################脚本提示############
echo  "该脚本需要提供一个空闲ip地址作为虚拟地址,还须提供两台web服务器的IP地址用于配置,请提前查看准备好!!"  
sleep  5
read -p  "以上是否已经准备好?请输入yes 或者 no  :"   guaiguai
case $guaiguai in
    yes)
    echo  "真是个乖孩子"
    ;;
    no)
    echo  "完犊子了,因为你的不听话,只能退出脚本运行了,你还是慢慢敲命令吧!"
    exit 0
    ;;
    *)
     echo "你好像不认识汉字也不认识英文,要不要我推荐你去厚街小学上学啊"
    exit 1
esac
###########ip获取与配置#####################
read  -p  "请输入您的主机网卡名:"  ppo
IP=$(ip a  | grep "inet "|grep "$ppo" | awk '{print $2}' | awk  -F '/' '{print $1}')
MASk=$(ip a  | grep "inet "|grep "$ppo" | awk '{print $2}' | awk  -F '/' '{print $2}')
A=$(echo "$IP"  | awk -F . '{print $1}')
B=$(echo "$IP"  | awk -F . '{print $2}')
C=$(echo "$IP"  | awk -F . '{print $3}')
SS2="$A.$B.$C"
read  -p  "请输入一个主机网卡所在网段的空闲IP作为虚拟IP(主备节点必须相同),主机所在网段为:$SS2.0/$MASK:"  vip
read -p  "请输入提供真实web服务的服务器ip:  " server1ip 
read -p  "请输入另一台提供真实web服务的服务器ip:  " server2ip 
#################安装################
yum install ipvsadm keepalived -y  ##### echo  "lvs及keepalived部署成功"
if [ $? -eq 0 ]
then
  echo "lvs及keepalived部署成功"
else  
   echo "完犊子了,出现致命错误,即将退出"
    exit  1
fi
#############配置#############
function install_master()
{
if [[ "$1" -eq "1" ]];then
echo  "即将将本台服务器配置为主要节点,ctrl+c可强行终止!!!"
sleep 5
mv  /etc/keepalived/keepalived.conf   /etc/keepalived/keepalived.conf.bak
cat >>/etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER
    interface $ppo
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        $vip
    }
}

virtual_server $vip 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server $server1ip 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
   real_server $server2ip 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}
EOF
fi
echo  "配置为主节点成功,即将退出!!"
sleep  5
exit 0
}

function install_backup()
{
if [[ "$1" -eq "2" ]];then
echo  "即将将本台服务器配置为备用节点,ctrl+c可强行终止!!!"
sleep 5
mv  /etc/keepalived/keepalived.conf   /etc/keepalived/keepalived.conf.bak
cat >>/etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP
    interface $ppo
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        $vip
    }
}

virtual_server $vip 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server $server1ip 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
   real_server $server2ip 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}
EOF
fi
echo  "配置为备用节点成功,即将退出!!"
sleep  5
exit 1
}

PS3="请选择:将这台服务器作为主节点还是备用节点,输入对应数字即可:"
select i in master  backup  exit
do

case $i in
    master)
    install_master 1
    ;;
    backup)
    install_backup 2
    ;;
    exit)
    echo "脚本将退出"
    exit
esac

done







nginx服务器脚本:

注意,脚本运行中需要您输入VIP地址,请设置与上面调度脚本的VIP相同。

#!/bin/bash
#function:nginx
#author:tommypeng 20220714 final version
##########################################
 if
  [  "$USER"  != "root"   ]
then
   echo "错误:非root用户,权限不足!"
  exit  0
fi
###############防火墙及SElinux############
systemctl stop firewalld && systemctl disable firewalld  && echo "防火墙已经关闭"
sed -i 's/SELINUX=.*/SELINUX=disabled/g'  /etc/selinux/config  && echo "关闭selinux"
###############网络############
ping -c 3   www.baidu.com
if
   [ $? -eq 0 ]
   then
   echo -e "\n\033[32m-----------------------------------------------\033[0m"
                	echo -e "\033[32m网络畅通,即将安装依赖包\033[0m"
   else 
     echo -e "\n\033[32m-----------------------------------------------\033[0m"
                	echo -e "\033[32m即将退出,请检查外网通讯 !\033[0m"
        exit  0
fi
#######################依赖包###################
yum -y install  gcc gcc-c++ autoconf automake libtool make openssl openssl-devel pcre pcre-devel  wget
#############下载安装包##############
cd  /usr/local/src/    &&   wget  http://nginx.org/download/nginx-1.8.1.tar.gz 
if
   [ $? -eq 0 ]
   then
   echo -e "\n\033[32m-----------------------------------------------\033[0m"
                	echo -e "\033[32m安装包已经下载成功\033[0m"
   else 
     echo -e "\n\033[32m-----------------------------------------------\033[0m"
                	echo -e "\033[32m哟吼,滚犊子的下载失败了,即将退出 !\033[0m"
        exit  0
fi
###############编译及安装#############
    cd  /usr/local/src/  &&  	tar -zxvf nginx-1.8.1.tar.gz
if [ $? -eq 0 ];then
cd  /usr/local/src/nginx-1.8.1        #####./configure  --help#####
./configure \
--prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre
make  && make install
             if  [ $? -eq 0 ];then
                	echo -e "\n\033[32m-----------------------------------------------\033[0m"
                	echo -e "\033[32m nginx编译安装成功 !\033[0m"
        	 else
                	echo -e "\033[32m nginx编译安装失败,请检查! \033[0m"
                	exit 1
        	 fi
	fi
echo "
常用命令:
# 进入生成目录
cd  /usr/local/nginx
# 测试
/usr/local/nginx/sbin/nginx -t
# 查看编译模块信息
/usr/local/nginx/sbin/nginx -V
# 启动
/usr/local/nginx/sbin/nginx
# 重新载入配置文件
/usr/local/nginx/sbin/nginx  -s reload
# 重启
/usr/local/nginx/sbin/nginx  -s reopen
# 停止
/usr/local/nginx/sbin/nginx  -s stop  "

以上nginx服务器还须运行如下网络配置脚本(注意VIP与前面的vip相同):

#!/bin/bash
#function:网络配置
#author:tommypeng 20220716 final version
###############root用户判断#######################
if
  [  "$USER"  != "root"   ]
then
   echo "错误:非root用户,权限不足!"
  exit  0
fi
############防火墙与高级权限##########
systemctl stop firewalld && systemctl disable firewalld  && echo "防火墙已经关闭"
sed -i 's/SELINUX=.*/SELINUX=disabled/g'  /etc/selinux/config  && echo "关闭selinux"
###############网络############
read  -p  "请输入keepalived集群虚拟IP地址,您在运行相关脚本自行输入的空闲IP即是  "    vip
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
###########温馨提示###########
请检查nginx服务是否开启

其实上述集群差不多已经部署成功了,需要共享存储的请看下面:

NFS脚本

请参考博主相关脚本,链接为:

nginx+tomcat+nfs--web集群脚本分享,亲测可用_IT大白鼠的博客-CSDN博客

最后您将nginx的网站根目录指向NFS的共享目录即可(通过挂载命令)

命令请参考上述文章的tomcat脚本。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT大白鼠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值