该集群架构:五台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脚本。