Centos 编译安装 haproxy

haproxy_install.sh
#!/bin/bash 
#install haproxy  
#20111207 by dongnan 

#variables 
dir=/usr/local 
ha_dir=${dir}/haproxy 
ha_cfg=${ha_dir}/haproxy.cfg 
kernel=`uname -r | grep '2.6'` 
pcre=$(rpm -qa | grep 'pcre' | wc -l) 
echo "$dir, $ha_dir, $ha_cfg, $kernel, $pcre" 

#check 
if [ ! "$kernel" -o "$pcre" -lt "2" ];then 
    echo -e "the script need linux 2.6 kernel and pcre pcre-devel \nyou can usage 'yum install pcre pcre-devel' or 'rpm -ivh pcre-devel-6.6-2.el5_1.7.x86_64.rpm'" 
    exit 1 
fi 

#function 

install_ha_cfg (){ 
#configure haproxy.cfg 
#default configure file for test,but need your change the frontend server and backend server ip address, 
#good luck! 

echo ' 
global 
    log 127.0.0.1   local0 
    maxconn 4096              #最大连接数 
    chroot /usr/local/haproxy #安装目录 
    uid 99                    #用户haproxy 
    gid 99                    #组haproxy 
    daemon                    #守护进程运行 
    nbproc 1                  #进程数量 
    pidfile /usr/local/haproxy/logs/haproxy.pid #haproxy pid 

defaults 
   log     global 
   mode    http               #7层 http;4层tcp  
   option  httplog            #http 日志格式 
   option  httpclose          #主动关闭http通道 
   option  redispatch         #serverId对应的服务器挂掉后,强制定向到其他健康的服务器 

   option  dontlognull 
   maxconn 2000               #最大连接数 
   contimeout      5000       #连接超时(毫秒) 
   clitimeout      50000      #客户端超时(毫秒) 
   srvtimeout      50000      #服务器超时(毫秒) 

frontend haproxy_test         #定义前端服务器(haproxy) 
        bind 10.0.1.251:80    #监听地址 
        default_backend server_pool  #指定后端服务器群 
        #errorfile 502 /usr/local/haproxy/html/maintain.html 
        #errorfile 503 /usr/local/haproxy/html/maintain.html 
        #errorfile 504 /usr/local/haproxy/html/maintain.html 

backend server_pool           #定义后端服务器群(web server/apache/nginx/iis..) 
        mode http 
        option  forwardfor    #后端服务器(apache/nginx/iis/*),从Http Header中获得客户端IP 
        #balance roundrobin    #负载均衡的方式,轮询方式 
        balance leastconn     #负载均衡的方式,最小连接 
        cookie SERVERID       #插入serverid到cookie中,serverid后面可以定义 
        option  httpchk HEAD /check.html #用来做健康检查html文档 
        server server1 10.0.1.252:80 cookie server1 check inter 2000 rise 3 fall 3 weight 3 
        server server2 10.0.1.253:80 cookie server2 check inter 2000 rise 3 fall 3 maxconn 120 weight 3 
        server server3 10.0.1.254:80 cookie server3 check maxconn 90 rise 2 fall 3 weight 3 
#服务器定义: 
#cookie server1表示serverid为server1; 
#check inter 2000 是检测心跳频率(check 默认 ); 
#rise 3 表示 3次正确认为服务器可用; 
#fall 3 表示 3次失败认为服务器不可用; 
#weight 表示权重。 

listen admin_stat                   #status 
    bind *:8080                     #监听端口 
    mode http                       #http的7层模式 
    stats refresh 30s               #统计页面自动刷新时间 
    stats uri /haproxy-stats        #统计页面URL 
    stats realm Haproxy\ Statistics #统计页面密码框上提示文本 
    stats auth admin:admin          #统计页面用户名和密码设置 
    stats hide-version              #隐藏统计页面上HAProxy的版本信息 
    stats admin if TRUE             #手工启用/禁用,后端服务器 
' > "$ha_cfg" && sed -i '1 d' "$ha_cfg" 
} 

#install 
if [ ! -e "$ha_dir" ];then 
   tar zxf haproxy*.tar.gz 
   cd haproxy*/ 
   make TARGET=linux26 USE_STATIC_PCRE=1 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy && mkdir /usr/local/haproxy/{html,logs} 
   cd ../ 
# 
   if [ ! -e "$ha_dir" ];then 
       echo "error! can't install haproxy  please check ! Will now out of the script !" 
       exit 1 
   else 
       ! grep 'haproxy' /etc/syslog.conf && echo 'local1.*            /var/log/haproxy.log' >> /etc/syslog.conf 
       sed -ir 's/SYSLOGD_OPTIONS="-m 0"/SYSLOGD_OPTIONS="-r -m 0"/g' /etc/sysconfig/syslog && /etc/init.d/syslog restart 
       install_ha_cfg 
       rm -rf haproxy*/ 
   fi 
else 
   echo "haproxy is already exists!" 
fi 

haproxy.sh

# cat /usr/local/sbin/haproxy.sh  
#!/bin/bash 
#haproxy command  
#ver:0.1bate 
#20111129 by dongnan 

#/usr/local/haproxy/sbin/haproxy  
#HA-Proxy version 1.4.18 2011/09/16 
#Copyright 2000-2011 Willy Tarreau <w@1wt.eu> 
# 
#Usage : haproxy [-f <cfgfile>]* [ -vdVD ] [ -n <maxconn> ] [ -N <maxpconn> ] 
#        [ -p <pidfile> ] [ -m <max megs> ] 
#        -v displays version ; -vv shows known build options. 
#        -d enters debug mode ; -db only disables background mode. 
#        -V enters verbose mode (disables quiet mode) 
#        -D goes daemon 
#        -q quiet mode : don't display messages 
#        -c check mode : only check config files and exit 
#        -n sets the maximum total # of connections (2000) 
#        -m limits the usable amount of memory (in MB) 
#        -N sets the default, per-proxy maximum # of connections (2000) 
#        -p writes pids of all children to this file 
#        -de disables epoll() usage even when available 
#        -ds disables speculative epoll() usage even when available 
#        -dp disables poll() usage even when available 
#        -sf/-st [pid ]* finishes/terminates old pids. Must be last arguments. 

#variables 
haproxy_dir=/usr/local/haproxy/ 
haproxy_conf=${haproxy_dir}haproxy.cfg 
haproxy_pid=${haproxy_dir}logs/haproxy.pid 
haproxy_cmd=${haproxy_dir}sbin/haproxy 
#test variables 
#file $haproxy_dir; file $haproxy_conf; file $haproxy_cmd; file $haproxy_pid 

if [ "$#" -eq "0" ];then 
    echo "usage: $0 {start|stop|restart}" 
    exit 1 
fi 

if [ "$1" = "start" ];then 
#echo $1 
    $haproxy_cmd -f $haproxy_conf 
elif [ "$1" = "stop" ];then 
#echo $1 
    kill `cat $haproxy_pid` 
elif [ "$1" = "restart" ];then 
#echo $1 
    $haproxy_cmd -f $haproxy_conf -st `cat $haproxy_pid` 

else 
   echo "usage: $0 arguments only start and stop or restart !" 
fi

3 评论

发表回复