HAProxy服务启动脚本

HAProxy是一个开源的、高性能的、基于TCP(第四层)和HTTP(第七层)应用的负载均衡软件,借助HAProxy可以快速、可靠地提供基于TCP和HTTP应用的负载均衡解决方案。

显著优点:

  • 可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美;
  • 最高可以同时维护40 000~50 000个并发连接,单位时间处理的最大请求数为20 000个,最大数据处理能力可达10Gbps
  • 支持多于8种负载均衡算法,同时也支持session(会话)保持。
  • 支持虚拟主机功能,这样实现web负载均衡更加灵活
  • 支持(HAProxy1.3版本之后)连接拒绝、全透明代理等功能,这些是其他负载均衡器所不具备的
  • 拥有一个功能强大的服务器状态监控页面,通过此页面可以实时了解系统的运行状况
  • 拥有功能强大的ACL支持,能给使用带来很大方便

我们这里采用源码包的安装方法:

http://haproxy.1wt.eu(官方网址)

安装方法这里不做介绍,重点是是服务启动的方法:

  • 源码包安装方式是没有启动脚本的,是能通过命令的方式进行启动和关闭,什么都不会输出,只能通过netstat 的方式进行验证,很是麻烦

HAProxy安装完成后,会在根目录的sbin目录下生成一个可执行的二进制文件haproxy,对HAProxy的启动,关闭,重启等维护操作都是通过它来实现的,执行“haproxy -h ”即可得到此文件的用法:

Haproxy [-f <配置文件>] [-vdVD] [-n 最大并发连接总数] [-N 默认的连接数]

  • 我们习惯使用service xxx start|restart|stop|status的方式,于是有了下面的脚本的编写:

示例1:

########################################

#!/bin/bash

#chkconfig: 2345 85 15

#description:HAProxy
load balancer

DAEMON=haproxy

PROG_DIR=/usr/local/haproxy

RETVAL=0

success() {                     #这个函数的是为了动态的显示“.”,借助了python,使得语句简洁,优美

ma=`python <<eof

print 5*" ."

eof

`

for j in $ma

do

sleep
0.2

echo
-n "$j"

done

}

start() {

PROG_STAT=$(netstat
-antpu | grep ${DAEMON})

if
[ -z "$PROG_STAT" ];then

haproxy
-f $PROG_DIR/conf/haproxy.cfg

sta=$(netstat
-antpu | grep ${DAEMON})

if [
-z "$PROG_STAT" ];then

echo
-ne "Service is starting\t\t" && success  && echo -en
"\e[32m[OK!!]\e[0m" 
&&  echo

fi

else

echo
"Service is already started!"

RETVAL=65

fi

}

stop() {

PROG_STAT=$(netstat
-antpu | grep ${DAEMON})

if
[ -z "$PROG_STAT" ];then

echo
"Service is already stoped!"

else

kill
-9 $(cat $PROG_DIR/run/${DAEMON}.pid)

PROG_STAT=$(netstat
-antpu | grep ${DAEMON})

if [
-z "$PROG_STAT" ];then

echo
-ne "Service is
stoping\t\t"   &&
success  &&  echo -en
"\e[32m[OK!!]\e[0m" 
&& echo

RETVAL=66

fi

fi

}

restart() {

haproxy
-f $PROG_DIR/conf/haproxy.cfg -st `pidof ${DAEMON}`

PROG_STAT=$(netstat
-antpu | grep ${DAEMON})

if
[ -n "$PROG_STAT" ];then

echo
-ne "Service is restarting\t\t" && 
success  &&  echo -en
"\e[32m[OK!!]\e[0m" 
&& echo

fi

}

status() {

PROG_STAT=$(netstat
-antpu | grep ${DAEMON})

if
[ -z "$PROG_STAT" ];then

echo
"Service is stoped!!"

else

echo  "Service is running......"

fi

}

case $1 in

"start")                                         #每个变量内容建议用“”括起来

start

;;

"stop")

stop

;;

"restart")

restart

;;

"status")

status

;;

*)                                                 #  *代表所有其他值,不要加“”

echo
"Usage: /etc/init.d/${DAEMON} {start|stop|restart|staus} "

;;

esac

exit $RETVAL

===========================================

示例2:(更加精简,有效)

########################################

#!/bin/bash

#

# chkconfig: 2345 85
15

# descrition: haproxy
loadbalancer

DAEMON=haproxy

PROG_DIR=/usr/local/haproxy

RETVAL=0

success() {                       #跟朋友的探讨,使用shell本身来实现;当然也可以使用for的遍历循环,

总之方法有很多种

for ((i=0;i<=5;i++))

do

sleep 0.2

echo -n "."

done

}

start ()

{

PROG_STAT=$(netstat -tlnp | grep
${DAEMON})

if [ -z "$PROG_STAT" ]; then

$PROG_DIR/sbin/$DAEMON
-f $PROG_DIR/conf/${DAEMON}.cfg

echo -ne "Starting
${DAEMON}......\t\t\t"  && success

echo -e
"\e[32m[OK]\e[0m"

else

echo "$DAEMON is already
running"

RETVAL=65

fi

}

stop ()

{

PROG_STAT=$(netstat -tlnp | grep
${DAEMON})

if [ -n "$PROG_STAT" ]; then

echo -ne
"stopping ${DAEMON}......\t\t\t"  && success

PROG_PID=$(cat
$PROG_DIR/run/${DAEMON}.pid)

kill $PROG_PID

echo -e "\e[32m[OK]\e[0m"

else

echo "$DAEMON is already
stopped"

RETVAL=66

fi

}

restart()

{

echo -ne "restarting
${DAEMON}......\t\t\t"   && success

PROG_PID=$(cat
$PROG_DIR/run/${DAEMON}.pid)

$PROG_DIR/sbin/$DAEMON -f
$PROG_DIR/conf/${DAEMON}.cfg -st $PROG_PID

echo -e "\e[32m[OK]\e[0m"

}

status ()

{

PROG_STAT=$(netstat -tlnp | grep
${DAEMON})

if [ -z "$PROG_STAT" ]; then

echo "${DAEMON} stopped"

else

echo "${DAEMON} running"

fi

}

case "$1" in

start)

start

;;

stop)

stop

;;

restart)

restart

;;

status)

status

;;

*)

echo "Usage /etc/init.d/$DAEMON
{start | stop | restart | status}"

RETVAL=67

esac

exit $RETVAL

===================================

cp haproxy
/etc/init.d/

chkconfig
--add haproxy

chkconfig
--list haproxy

service
haproxy start|restart|stop|status

经过反复测试,相当好用!

小结:

1) 在编写一个脚本时,最好将基本结构搭建起来,将之后的心思放在内容的实现之上

2) 在调用python功能时,报错信息很重要,英语的重要性可见一斑;(我这里提示"indent"

(缩进)的异常)

3) 实现了基本功能,剩下的就是功能的完善,示例1和示例2的最大差别就是逻辑的前后之差,导致代码结构明显改变

时间: 2024-10-19 02:52:26

HAProxy服务启动脚本的相关文章

logstash服务启动脚本

logstash服务启动脚本 最近在弄ELK,发现logstash没有sysv类型的服务启动脚本,于是按照网上一个老外提供的模板自己进行修改 #添加用户 useradd logstash -M -s /sbin/nologin mkdir /var/log/logstash/ chown -R logstash:logstash /var/log/logstash/ chown -R logstash:logstash /usr/local/logstash-2.0.0/ vi /etc/ini

利用shell开发rsync服务启动脚本

利用shell函数开发rsync服务启动脚本,之前的不够专业 #!/bin/bash #chkconfig: 2345  20 80                       #这两行加入kconfig #description: Saves and restores system entropy  pool source /etc/init.d/functions    #调用标准的函数库 aa() {   echo "plz one canshu"   exit 5 } bb()

nginx 源码编译安装并编写服务启动脚本

1. 使用xshell将nginx源码包上传到server 2. 安装依赖的软件包工具 zlib-devel?? pcre-devel?? gcc? gcc-c++ yum -y install zlib-devel pcere-devel gcc gcc-c++ 验证一下: 3. 指定nginx的运行用户 (创建nginx用户不使其登录系统.-M不创建宿主目录) [[email protected] ~]# useradd -s /sbin/nologin -M nginx 4. 编译安装ng

[shell脚本] mysql服务启动脚本

服务启动脚本(初始化.启动.登录) #!/bin/bash export PID=/usr/local/nestdb_master/bin/mysqld export PASSWORD=123456 function status() { ps -ef | grep -v 'grep'|grep ${PID} >/dev/null if [ $? -eq 0 ]; then echo "running" return 0 else echo "not running&q

Apache 服务启动脚本

Apache的启动脚本一般情况,如果是手动编译LAMP的话,一般情况下apache是没有启动脚本的,也就是说用户不能通过简单的/etc/init.d/httpd start/stop/restart来启动/关闭/重新启动 其实在源码里已经有启动的脚本,我们要修改下即可,把Apache加入系统SysV服务中来. 在源码httpd-2.x.x/build/rpm中存在httpd.initcp httpd.init /etc/init.d/httpd vim /etc/init.d/httpd #!/

mysql服务启动脚本详解

1 #!/bin/sh 2 # Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB 3 # This file is public domain and comes with NO WARRANTY of any kind 4 5 # MySQL daemon start/stop script. 6 7 # Usually this is put in /etc/init.d (at lea

Nginx的编译安装及服务启动脚本

1.解决依赖关系 编译安装nginx需要事先需要安装开发包组"Development Tools"和 "Development Libraries".同时,还需要专门安装pcre-devel包:# yum -y install pcre-devel 2.添加系统用户,实现与之运行nginx的服务进程 groupadd -r nginx useradd -r -g nginx nginx id nginx    查看新建的用户id 3.下载源码包上传编译安装 (www

spring cloud 微服务启动脚本

#!/bin/bash APP_NAME=xxx JAR_FILE=$APP_NAME.jar LOG_PATH=/home/chen/logs/log start(){ checkpid if [ ! -n "$pid" ]; then echo "启动命令" echo "nohup java -jar $JAR_FILE >nohup.out &" nohup java -jar $JAR_FILE >nohup.out

通过Shell开发企业级标准服务启动脚本案例(MySQL)

老男孩教育Linux高端运维班Shell课后必会考试题: 企业Shell面试题10:开发企业级MySQL启动脚本 说明: MySQL启动命令为: /bin/sh mysqld_safe --pid-file=$mysqld_pid_file_path 2>&1 >/dev/null & 停止命令逻辑脚本为: mysqld_pid=`cat "$mysqld_pid_file_path"` if (kill -0 $mysqld_pid 2>/dev/n