1 )源代码安装haproxy

[root@mysql-slave src]# tar xf haproxy-1.6.4.tar.gz 

[root@mysql-slave src]# cd haproxy-1.6.4

[root@mysql-slave haproxy-1.6.4]# make TARGET=linux26 PREFIX=/usr/local/haproxy 

[root@mysql-slave haproxy-1.6.4]# echo $?

0

[root@mysql-slave haproxy-1.6.4]# make install PREFIX=/usr/local/haproxy

[root@mysql-slave haproxy-1.6.4]# mkdir  /usr/local/haproxy/conf

[root@mysql-slave haproxy-1.6.4]# ls

CHANGELOG  CONTRIBUTING  ebtree    haproxy                  include  MAINTAINERS  README   src      tests    VERSION

contrib    doc           examples  haproxy-systemd-wrapper  LICENSE  Makefile     ROADMAP  SUBVERS  VERDATE

[root@mysql-slave haproxy-1.6.4]# cp examples/option-http_proxy.cfg /usr/local/haproxy/conf/haproxy.cfg


2)haproxy的启动脚本配置

由于我的安装包是下载在/usr/local/src下的,我们查看下解压后的haproxy的文件

[root@mysql-slave examples]# pwd

/usr/local/src/haproxy-1.6.4/examples

[root@mysql-slave examples]# ls

acl-content-sw.cfg  check.conf             debug2html  haproxy.init  init.haproxy           ssl.cfg

auth.cfg            content-sw-sample.cfg  debugfind   haproxy.spec  option-http_proxy.cfg  stats_haproxy.sh

check               debug2ansi             errorfiles  haproxy.vim   seamless_reload.txt    transparent_proxy.cfg

如上,我们可以看到一个名为haproxy.init文件

简单查看下haproxy.init的内容

[root@mysql-slave examples]# cat haproxy.init 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#!/bin/sh
#
# chkconfig: - 85 15
# description: HA-Proxy is a TCP/HTTP reverse proxy which is particularly suited \
#              for high availability environments.
# processname: haproxy
# config: /etc/haproxy/haproxy.cfg
# pidfile: /var/run/haproxy.pid
# Script Author: Simon Matter <simon.matter@invoca.ch>
# Version: 2004060600
# Source function library.
if  [ -f  /etc/init .d /functions  ];  then
   /etc/init .d /functions
elif  [ -f  /etc/rc .d /init .d /functions  ] ;  then
   /etc/rc .d /init .d /functions
else
   exit  0
fi
# Source networking configuration.
/etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} =  "no"  ] &&  exit  0
# This is our service name
BASENAME=` basename  $0`
if  [ -L $0 ];  then
   BASENAME=` find  $0 -name $BASENAME - printf  %l`
   BASENAME=` basename  $BASENAME`
fi
BIN= /usr/sbin/ $BASENAME
CFG= /etc/ $BASENAME/$BASENAME.cfg
[ -f $CFG ] ||  exit  1
PIDFILE= /var/run/ $BASENAME.pid
LOCKFILE= /var/lock/subsys/ $BASENAME
RETVAL=0
start() {
   quiet_check
   if  [ $? - ne  0 ];  then
     echo  "Errors found in configuration file, check it with '$BASENAME check'."
     return  1
   fi
   echo  -n  "Starting $BASENAME: "
   daemon $BIN -D -f $CFG -p $PIDFILE
   RETVAL=$?
   echo
   [ $RETVAL - eq  0 ] &&  touch  $LOCKFILE
   return  $RETVAL
}
stop() {
   echo  -n  "Shutting down $BASENAME: "
   killproc $BASENAME -USR1
   RETVAL=$?
   echo
   [ $RETVAL - eq  0 ] &&  rm  -f $LOCKFILE
   [ $RETVAL - eq  0 ] &&  rm  -f $PIDFILE
   return  $RETVAL
}
restart() {
   quiet_check
   if  [ $? - ne  0 ];  then
     echo  "Errors found in configuration file, check it with '$BASENAME check'."
     return  1
   fi
   stop
   start
}
reload() {
   if  ! [ -s $PIDFILE ];  then
     return  0
   fi
   quiet_check
   if  [ $? - ne  0 ];  then
     echo  "Errors found in configuration file, check it with '$BASENAME check'."
     return  1
   fi
   $BIN -D -f $CFG -p $PIDFILE -sf $( cat  $PIDFILE)
}
check() {
   $BIN -c -q -V -f $CFG
}
quiet_check() {
   $BIN -c -q -f $CFG
}
rhstatus() {
   status $BASENAME
}
condrestart() {
   [ -e $LOCKFILE ] && restart || :
}
# See how we were called.
case  "$1"  in
   start)
     start
     ;;
   stop)
     stop
     ;;
   restart)
     restart
     ;;
   reload)
     reload
     ;;
   condrestart)
     condrestart
     ;;
   status)
     rhstatus
     ;;
   check)
     check
     ;;
   *)
     echo  $ "Usage: $BASENAME {start|stop|restart|reload|condrestart|status|check}"
     exit  1
esac
  
exit  $?

我们发现,稍微调整下,就是一个完整的haproxy的启动脚本,所以偷下懒,直接修改两个位置:

BIN=/usr/local/haproxy/sbin/haproxy

# haproxy命令所在的位置

CFG=/usr/local/haproxy/conf/haproxy.cfg

# haproxy.cfg为haproxy的配置文件

修改完成后,将修改后的haproxy.init拷贝到/etc/init.d/目录下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@mysql-slave examples] # cp /usr/local/src/haproxy-1.6.4/examples/haproxy.init /etc/init.d/
[root@mysql-slave examples] # mv /etc/init.d/haproxy.init /etc/init.d/haproxy
[root@mysql-slave examples] # chmod +x /etc/init.d/haproxy
[root@mysql-slave examples] # /etc/init.d/haproxy 
Usage: haproxy {start|stop|restart|reload|condrestart|status|check}
简单的测试下:
[root@mysql-slave examples] # /etc/init.d/haproxy status
haproxy (pid  54309) 正在运行...
[root@mysql-slave examples] # /etc/init.d/haproxy stop
Shutting down haproxy:                                     [确定]
[root@mysql-slave examples] # /etc/init.d/haproxy status
haproxy 已停
[root@mysql-slave examples] # /etc/init.d/haproxy start
Starting haproxy:                                          [确定]
[root@mysql-slave examples] # /etc/init.d/haproxy reload
[root@mysql-slave examples] # echo $?
0
[root@mysql-slave examples] # /etc/init.d/haproxy condrestart
Shutting down haproxy:                                     [确定]
Starting haproxy:                                          [确定]
[root@mysql-slave examples] # /etc/init.d/haproxy check
Configuration  file  is valid
到此,haproxy的安装与脚本的配置就已经完成