首页 > 代码库 > 【haproxy初始化】haproxy_ctl.sh

【haproxy初始化】haproxy_ctl.sh

【haproxy初始化】haproxy_ctl.sh

#!/bin/bash
#
# modify dir path here
d_haproxy_log=‘/data/log/haproxy‘
[ -d ${d_haproxy_log} ] || mkdir -p ${d_haproxy_log}
# modify dir path here
d_haproxy_conf=‘/data/ops/conf/haproxy‘
[ -d ${d_haproxy_conf} ] || mkdir -p ${d_haproxy_conf}
# modify file path here
haproxy_bin=‘/usr/sbin/haproxy‘

init_log() {
    d_logrotate=‘/etc/logrotate.d‘
    d_rsyslog=‘/etc/rsyslog.d‘
    [ -d ${d_logrotate} ] || mkdir -p ${d_logrotate}
    [ -d ${d_rsyslog} ] || mkdir -p ${d_rsyslog}
    f_haproxy_rsyslog="${d_rsyslog}/haproxy.conf"
    f_haproxy_logrotate="${d_logrotate}/haproxy"

    # add rsyslog conf
    cat << _CONF >> /etc/rsyslog.conf
\$IncludeConfig ${d_rsyslog}/*.conf
_CONF

    cat << _CONF > ${f_haproxy_rsyslog}
# Enable UDP port 514 to listen to incoming log messages from haproxy
\$ModLoad imudp
\$UDPServerRun 514 
local0.=info -${d_haproxy_log}/haproxy.log
local0.notice -${d_haproxy_log}/haproxy.admin
# don‘t log anywhere else
local0.* ~
_CONF
    service rsyslog restart

# add logrotate conf
    cat << _CONF > ${f_haproxy_logrotate}
${d_haproxy_log}/haproxy.log
{
compress
copytruncate
daily
dateext
missingok
notifempty
rotate 2
}
_CONF

}

create_cfg() {
    f_cfg_name="$1"

    [ -z ${f_cfg_name} ] && f_cfg_name="`hostname`"
    
    f_haproxy="${d_haproxy_conf}/${f_cfg_name}.cfg"

    # add haproxy example conf
    cat << _CONF >${f_haproxy}
#########################################################################
# HAProxy 配置文件(参考未知来源资料)
#########################################################################
 
global
# 使用系统的syslog记录日志(通过udp,默认端口号为514)
log 127.0.0.1 local0 # info [err warning info debug]
chroot ${d_haproxy_log}
 
#限制单个进程的最大连接数
maxconn 65535
 
# 让进程在后台运行,即作为守护进程运行,正式运行的时候开启,此处先禁止,等同于在命令行添加参数 -D
daemon
# 指定作为守护进程运行的时候,要创建多少个进程,默认只创建一个,需要daemon开启模式
nbproc 1
 
# 设置debug模式运行,与daemon模式只能互斥,等同于在命令行添加参数 -d
# debug
pidfile ${d_haproxy_log}/${f_cfg_name}.pid    
 
defaults
# 在连接失败或断开的情况下,允许当前会话被重新分发
option redispatch
# 设置在一个服务器上链接失败后的重连次数
retries 100
# 设置服务器分配算法
balance roundrobin
 
# 不记录空连接
option dontlognull
 
# 设置等待连接到服务器成功的最大时间
timeout connect 30000ms
# 设置客户端的最大超时时间
timeout client 1800000ms
# 设置服务器端的最大超时时间
timeout server 1800000ms


 
# Enable the sending of TCP keepalive packets on both sides, clients and servers
# NOTE: 在服务器CPU强劲的情况下,最好不要开启保活,这样可减少资源消耗
option tcpka
option srvtcpka
option clitcpka
 
##############################统计页面配置##################################
 
listen admin_stat
# 监听端口
bind 127.0.0.1:12202
# http的7层模式
mode http
option httplog
log global
# 统计页面自动刷新时间
stats refresh 30s
# 统计页面URL
stats uri /status
# 统计页面密码框上提示文本
stats realm Haproxy\ Statistics
# 统计页面用户名和密码设置
stats auth admin:password
# 隐藏统计页面上HAProxy的版本信息
stats hide-version
 
###########################TCP连接的监听配置################################
# 后台服务器
# weight  -- 调节服务器的负重
# check -- 允许对该服务器进行健康检查
# inter  -- 设置连续的两次健康检查之间的时间,单位为毫秒(ms),默认值 2000(ms)
# rise  -- 指定多少次连续成功的健康检查后,即可认定该服务器处于可操作状态,默认值 2
# fall  -- 指定多少次不成功的健康检查后,认为服务器为当掉状态,默认值 3
# maxconn  -- 指定可被发送到该服务器的最大并发连接数

## [80]
listen  p80
bind 1.2.10.123:80
mode tcp
maxconn 10000
# 日志记录选项
option tcplog
log global
server ip20_234-p8080 3.4.20.234:8080  check inter 2000 rise 2 fall 3

#########################HTTP连接的监听配置################################
 
#listen  http-in
#bind *:2212
#mode http
#option httplog
#log global
 
# 设置健康检查模式
#option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
#option smtpchk
 
# 后台服务器
#server localhost 0.0.0.0:2234 weight 3 check inter 2000 rise 2 fall 3
#server 192.168.1.100 192.168.1.100:2234 weight 3 check inter 2000 rise 2 fall 3
#server 192.168.1.101 192.168.1.101:2234 weight 3 check inter 2000 rise 2 fall 3 

_CONF

}

haproxy_status() {
    echo "[*] checking.."
    echo "UID        PID  PPID  C STIME TTY          TIME CMD"
    ps -ef |grep haproxy |grep -v grep |grep -v "$0"
    echo " "
}

usage() {
    cat <<_USAGE

Usage:
    
    $0 initlog 
    $0 initcfg [config_file_name(optional)]
    $0 start|stop|status

example:
    $0 initlog
    $0 initcfg
    $0 initcfg ip1_2
    $0 start
    $0 status
    $0 stop

_USAGE
}

case $1 in
    initlog)
        echo "[-] initialize rsyslog and logrotate.."
        init_log
        echo "[*] done."
        ;;
    initcfg)
        echo "[-] initialize cfg file.."
        create_cfg $2
        echo "[*] done."
        ;;
    start)
        echo "[-] starting.."
        for i in `ls ${d_haproxy_conf}/*.cfg`
        do
            echo "[*] load config file: $i"
            ${haproxy_bin} -f $i
        done
        echo "[*] done."
        ;;
    stop)
        haproxy_status
        echo "[-] stopping.."
        killall haproxy
        haproxy_status
        echo "[*] done."
        ;;
    status)
        haproxy_status
        ;;
    *)
        usage
        ;;
esac


【haproxy初始化】haproxy_ctl.sh