Last active
June 3, 2019 06:46
-
-
Save ShenXuGongZi/ed726c2339673eccc9ed10d8005f0864 to your computer and use it in GitHub Desktop.
haproxy.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin | |
export PATH | |
#================================================= | |
# System Required: CentOS/Debian/Ubuntu | |
# Description: HaProxy | |
# Version: 1.0.7 | |
# Author: Toyo | |
# Blog: https://doub.io/wlzy-19/ | |
#================================================= | |
HaProxy_file="/etc/haproxy" | |
HaProxy_cfg_file="/etc/haproxy/haproxy.cfg" | |
#检查是否安装HaProxy | |
check_HaProxy(){ | |
HaProxy_exist=`haproxy -v` | |
if [[ ${HaProxy_exist} = "" ]]; then | |
echo -e "\033[41;37m [错误] \033[0m 没有安装HaProxy,请检查 !" && exit 1 | |
fi | |
} | |
#检查系统 | |
check_sys(){ | |
if [[ -f /etc/redhat-release ]]; then | |
release="centos" | |
elif cat /etc/issue | grep -q -E -i "debian"; then | |
release="debian" | |
elif cat /etc/issue | grep -q -E -i "ubuntu"; then | |
release="ubuntu" | |
elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat"; then | |
release="centos" | |
elif cat /proc/version | grep -q -E -i "debian"; then | |
release="debian" | |
elif cat /proc/version | grep -q -E -i "ubuntu"; then | |
release="ubuntu" | |
elif cat /proc/version | grep -q -E -i "centos|red hat|redhat"; then | |
release="centos" | |
fi | |
#bit=`uname -m` | |
} | |
# 设置 防火墙规则 | |
Save_iptables(){ | |
if [[ ${release} == "centos" ]]; then | |
service iptables save | |
else | |
iptables-save > /etc/iptables.up.rules | |
fi | |
} | |
Set_iptables(){ | |
if [[ ${release} == "centos" ]]; then | |
service iptables save | |
chkconfig --level 2345 iptables on | |
else | |
iptables-save > /etc/iptables.up.rules | |
echo -e '#!/bin/bash\n/sbin/iptables-restore < /etc/iptables.up.rules' > /etc/network/if-pre-up.d/iptables | |
chmod +x /etc/network/if-pre-up.d/iptables | |
fi | |
} | |
# 安装HaProxy | |
installHaProxy(){ | |
HaProxy_exist=`haproxy -v` | |
if [[ ${HaProxy_exist} != "" ]]; then | |
echo -e "\033[41;37m [错误] \033[0m 已经安装HaProxy,请检查 !" && exit 1 | |
fi | |
if [[ ${release} == "centos" ]]; then | |
yum update && yum install -y vim haproxy | |
else | |
apt-get update && apt-get install -y vim haproxy | |
fi | |
chmod +x /etc/rc.local | |
HaProxy_exist=`haproxy -v` | |
if [[ ${HaProxy_exist} = "" ]]; then | |
echo -e "\033[41;37m [错误] \033[0m 安装HaProxy失败,请检查 !" && exit 1 | |
else | |
Set_iptables | |
if [[ ${release} == "centos" ]]; then | |
cat /etc/redhat-release |grep 7\..*|grep -i centos>/dev/null | |
if [[ $? = 0 ]]; then | |
systemctl enable haproxy.service | |
else | |
chmod +x /etc/init.d/haproxy | |
chkconfig --add haproxy | |
chkconfig haproxy on | |
fi | |
else | |
chmod +x /etc/init.d/haproxy | |
update-rc.d -f haproxy defaults | |
fi | |
setHaProxy | |
fi | |
} | |
setHaProxy(){ | |
check_HaProxy | |
read -e -p "请输入 HaProxy 的 本地监听端口(转发端口) [1-65535](支持端口段: 2333-6666): " HaProxyport | |
[[ -z "${HaProxyport}" ]] && echo "取消..." && exit 1 | |
read -e -p "请输入 HaProxy 欲转发的 IP:" HaProxyip | |
[[ -z "${HaProxyip}" ]] && echo "取消..." && exit 1 | |
echo | |
echo "——————————————————————————————" | |
echo " 请检查 HaProxy 配置是否有误 !" | |
echo | |
echo -e " 本地监听端口 : \033[41;37m ${HaProxyport} \033[0m" | |
echo -e " 欲转发 IP : \033[41;37m ${HaProxyip} \033[0m" | |
echo "——————————————————————————————" | |
echo | |
read -e -p "请按任意键继续,如有配置错误请使用 Ctrl+C 退出。" var | |
HaProxy_port_1=`cat ${HaProxy_cfg_file} | sed -n "12p" | cut -c 12-23 | grep "-"` | |
HaProxy_port=`cat ${HaProxy_cfg_file} | sed -n "12p" | cut -c 12-23` | |
if [[ ${HaProxy_port_1} = "" ]]; then | |
iptables -D INPUT -p tcp --dport ${HaProxy_port} -j ACCEPT | |
else | |
HaProxy_port_1=`echo ${HaProxy_port_1} | sed 's/-/:/g'` | |
iptables -D INPUT -p tcp --dport ${HaProxy_port_1} -j ACCEPT | |
fi | |
cat > ${HaProxy_cfg_file}<<-EOF | |
global | |
defaults | |
log global | |
mode tcp | |
option dontlognull | |
timeout connect 5000 | |
timeout client 15000 | |
timeout server 15000 | |
frontend ss-in1 | |
bind *:${HaProxyport} | |
default_backend ss-out1 | |
backend ss-out1 | |
server server1 ${HaProxyip} maxconn 20480 | |
EOF | |
restartHaProxy | |
} | |
# 查看HaProxy列表 | |
viewHaProxy(){ | |
check_HaProxy | |
HaProxy_port=`cat ${HaProxy_cfg_file} | sed -n "12p" | cut -c 12-23` | |
HaProxy_ip=`cat ${HaProxy_cfg_file} | sed -n "16p" | awk '{print $3}'` | |
ip=`wget -qO- -t1 -T2 ipinfo.io/ip` | |
[[ -z $ip ]] && ip="VPS_IP" | |
echo | |
echo "——————————————————————————————" | |
echo " HaProxy 配置信息: " | |
echo | |
echo -e " 本地 IP : \033[41;37m ${ip} \033[0m" | |
echo -e " 本地监听端口 : \033[41;37m ${HaProxy_port} \033[0m" | |
echo | |
echo -e " 欲转发 IP : \033[41;37m ${HaProxy_ip} \033[0m" | |
echo -e " 欲转发端口 : \033[41;37m ${HaProxy_port} \033[0m" | |
echo "——————————————————————————————" | |
echo | |
} | |
# 启动aProxy | |
startHaProxy(){ | |
check_HaProxy | |
PID=`ps -ef | grep "haproxy" | grep -v grep | grep -v "haproxy.sh" | awk '{print $2}'` | |
[[ ! -z $PID ]] && echo -e "\033[41;37m [错误] \033[0m 发现 HaProxy 正在运行,请检查 !" && exit 1 | |
if [[ ${release} == "centos" ]]; then | |
cat /etc/redhat-release |grep 7\..*|grep -i centos>/dev/null | |
if [[ $? = 0 ]]; then | |
systemctl start haproxy.service | |
else | |
/etc/init.d/haproxy start | |
fi | |
else | |
/etc/init.d/haproxy start | |
fi | |
sleep 2s | |
PID=`ps -ef | grep "haproxy" | grep -v grep | grep -v "haproxy.sh" | awk '{print $2}'` | |
[[ -z $PID ]] && echo -e "\033[41;37m [错误] \033[0m HaProxy 启动失败 !" && exit 1 | |
HaProxy_port_1=`cat ${HaProxy_cfg_file} | sed -n "12p" | cut -c 12-23 | grep "-"` | |
HaProxy_port=`cat ${HaProxy_cfg_file} | sed -n "12p" | cut -c 12-23` | |
if [[ ${HaProxy_port_1} = "" ]]; then | |
iptables -I INPUT -p tcp --dport ${HaProxy_port} -j ACCEPT | |
else | |
HaProxy_port_1=`echo ${HaProxy_port_1} | sed 's/-/:/g'` | |
iptables -I INPUT -p tcp --dport ${HaProxy_port_1} -j ACCEPT | |
fi | |
echo && echo "——————————————————————————————" && echo | |
echo " HaProxy 已启动 !" | |
Save_iptables | |
viewHaProxy | |
} | |
# 停止aProxy | |
stopHaProxy(){ | |
check_HaProxy | |
PID=`ps -ef | grep "haproxy" | grep -v grep | grep -v "haproxy.sh" | awk '{print $2}'` | |
[[ -z $PID ]] && echo -e "\033[41;37m [错误] \033[0m 发现 HaProxy 没有运行,请检查 !" && exit 1 | |
if [[ ${release} == "centos" ]]; then | |
cat /etc/redhat-release |grep 7\..*|grep -i centos>/dev/null | |
if [[ $? = 0 ]]; then | |
systemctl stop haproxy.service | |
else | |
/etc/init.d/haproxy stop | |
fi | |
else | |
/etc/init.d/haproxy stop | |
fi | |
HaProxy_port_1=`cat ${HaProxy_cfg_file} | sed -n "12p" | cut -c 12-23 | grep "-"` | |
HaProxy_port=`cat ${HaProxy_cfg_file} | sed -n "12p" | cut -c 12-23` | |
if [[ ${HaProxy_port_1} = "" ]]; then | |
iptables -D INPUT -p tcp --dport ${HaProxy_port} -j ACCEPT | |
else | |
HaProxy_port_1=`echo ${HaProxy_port_1} | sed 's/-/:/g'` | |
iptables -D INPUT -p tcp --dport ${HaProxy_port_1} -j ACCEPT | |
fi | |
sleep 2s | |
PID=`ps -ef | grep "haproxy" | grep -v grep | grep -v "haproxy.sh" | awk '{print $2}'` | |
if [[ ! -z $PID ]]; then | |
echo -e "\033[41;37m [错误] \033[0m HaProxy 停止失败 !" && exit 1 | |
else | |
Save_iptables | |
echo " HaProxy 已停止 !" | |
fi | |
} | |
restartHaProxy(){ | |
# 检查是否安装 | |
check_HaProxy | |
PID=`ps -ef | grep "haproxy" | grep -v grep | grep -v "haproxy.sh" | awk '{print $2}'` | |
if [[ ! -z $PID ]]; then | |
stopHaProxy | |
fi | |
startHaProxy | |
} | |
statusHaProxy(){ | |
check_HaProxy | |
PID=`ps -ef | grep "haproxy" | grep -v grep | grep -v "haproxy.sh" | awk '{print $2}'` | |
if [[ ! -z $PID ]]; then | |
echo -e "\033[42;37m [信息] \033[0m HaProxy 正在运行,PID: ${PID} !" | |
else | |
echo -e "\033[42;37m [信息] \033[0m HaProxy 没有运行 !" | |
fi | |
} | |
uninstallHaProxy(){ | |
check_HaProxy | |
echo "确定要卸载 HaProxy ? [y/N]" | |
read -e -p "(默认: n):" unyn | |
[[ -z ${unyn} ]] && unyn="n" | |
if [[ ${unyn} == [Yy] ]]; then | |
PID=`ps -ef | grep "haproxy" | grep -v grep | grep -v "haproxy.sh" | awk '{print $2}'` | |
if [[ ! -z $PID ]]; then | |
stopHaProxy | |
fi | |
if [[ ${release} == "centos" ]]; then | |
yum remove haproxy -y | |
else | |
apt-get remove haproxy -y | |
apt-get autoremove | |
fi | |
rm -rf ${HaProxy_file} | |
HaProxy_exist=`haproxy -v` | |
if [[ ${HaProxy_exist} != "" ]]; then | |
echo -e "\033[41;37m [错误] \033[0m HaProxy卸载失败,请检查 !" && exit 1 | |
fi | |
echo && echo " HaProxy 已卸载 !" && echo | |
else | |
echo && echo "卸载已取消..." && echo | |
fi | |
} | |
check_sys | |
action=$1 | |
[[ -z $1 ]] && action=install | |
case "$action" in | |
install|set|view|start|stop|restart|status|uninstall) | |
${action}HaProxy | |
;; | |
*) | |
echo "输入错误 !" | |
echo "用法: { install | view | set | start | stop | restart | status | uninstall }" | |
;; | |
esac |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment