<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.linuxsa.org/index.php?action=history&amp;feed=atom&amp;title=Haproxy%E5%AE%89%E8%A3%85%E5%92%8C%E9%85%8D%E7%BD%AE</id>
	<title>Haproxy安装和配置 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.linuxsa.org/index.php?action=history&amp;feed=atom&amp;title=Haproxy%E5%AE%89%E8%A3%85%E5%92%8C%E9%85%8D%E7%BD%AE"/>
	<link rel="alternate" type="text/html" href="https://wiki.linuxsa.org/index.php?title=Haproxy%E5%AE%89%E8%A3%85%E5%92%8C%E9%85%8D%E7%BD%AE&amp;action=history"/>
	<updated>2026-04-19T08:53:06Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.linuxsa.org/index.php?title=Haproxy%E5%AE%89%E8%A3%85%E5%92%8C%E9%85%8D%E7%BD%AE&amp;diff=439&amp;oldid=prev</id>
		<title>Evan：​导入1个版本</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxsa.org/index.php?title=Haproxy%E5%AE%89%E8%A3%85%E5%92%8C%E9%85%8D%E7%BD%AE&amp;diff=439&amp;oldid=prev"/>
		<updated>2019-10-14T13:48:51Z</updated>

		<summary type="html">&lt;p&gt;导入1个版本&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==总的为==&lt;br /&gt;
[[搭建keepalived+haproxy双主高可用负载均衡系统]]&lt;br /&gt;
&lt;br /&gt;
==haproxy安装==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
master and backup 都要&lt;br /&gt;
https://www.haproxy.org/download/&lt;br /&gt;
&lt;br /&gt;
wget -c https://www.haproxy.org/download/1.5/src/haproxy-1.5.9.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar xvf haproxy-1.5.9.tar.gz  &amp;amp;&amp;amp; cd haproxy-1.5.9&lt;br /&gt;
make TARGET=linux2628 PREFIX=/usr/local/haproxy -j3&lt;br /&gt;
make install PREFIX=/usr/local/haproxy&lt;br /&gt;
mkdir /usr/local/haproxy/conf&lt;br /&gt;
cp examples/haproxy.cfg /usr/local/haproxy/conf/&lt;br /&gt;
&lt;br /&gt;
# - linux26     for Linux 2.6 and above&lt;br /&gt;
#- linux2628   for Linux 2.6.28, 3.x, and above (enables splice and tproxy)&lt;br /&gt;
&lt;br /&gt;
#这个脚本不好用 跳过  可能要改一下相关的 bin config 路径就行 了 &lt;br /&gt;
#cp  examples/init.haproxy /etc/init.d/haproxy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==haproxy配置==&lt;br /&gt;
===配置文件===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
global&lt;br /&gt;
##  20170617 am 参考了 http://nmshuishui.blog.51cto.com/1850554/1405486&lt;br /&gt;
        log 127.0.0.1 local0 info&lt;br /&gt;
        maxconn 4096&lt;br /&gt;
        user nobody&lt;br /&gt;
        group nobody&lt;br /&gt;
        daemon&lt;br /&gt;
        nbproc 2&lt;br /&gt;
        pidfile  /var/run/haproxy.pid &lt;br /&gt;
&lt;br /&gt;
defaults&lt;br /&gt;
        mode http&lt;br /&gt;
        retries 3&lt;br /&gt;
        timeout connect 10s&lt;br /&gt;
        timeout client 20s&lt;br /&gt;
        timeout server 30s&lt;br /&gt;
        timeout check 5s&lt;br /&gt;
&lt;br /&gt;
listen admin_stats&lt;br /&gt;
        bind 0.0.0.0:8888&lt;br /&gt;
        mode http&lt;br /&gt;
        log 127.0.0.1 local0 err&lt;br /&gt;
        stats refresh 30s&lt;br /&gt;
        stats uri /haproxy-status&lt;br /&gt;
        stats realm welcome login\ Haproxy&lt;br /&gt;
        stats auth evan:evan&lt;br /&gt;
        stats hide-version&lt;br /&gt;
        stats admin if TRUE&lt;br /&gt;
&lt;br /&gt;
frontend www&lt;br /&gt;
         bind 192.168.30.88:80&lt;br /&gt;
         #bind *:80&lt;br /&gt;
         mode   http&lt;br /&gt;
         option  httplog&lt;br /&gt;
         option  forwardfor&lt;br /&gt;
         #option  httpclose&lt;br /&gt;
         log     global&lt;br /&gt;
&lt;br /&gt;
        acl host_www           hdr_dom(host)   -i      www.zb.com&lt;br /&gt;
        acl host_static        hdr_dom(host)   -i      static.zb.com&lt;br /&gt;
#        acl host_video            hdr_dom(host)   -i      video.zb.com&lt;br /&gt;
&lt;br /&gt;
        use_backend server_www     if      host_www&lt;br /&gt;
        use_backend server_static  if      host_static&lt;br /&gt;
#        use_backend server_video   if      host_video&lt;br /&gt;
&lt;br /&gt;
#here 0617&lt;br /&gt;
backend  server_www&lt;br /&gt;
        mode    http&lt;br /&gt;
        option   redispatch&lt;br /&gt;
        option   abortonclose&lt;br /&gt;
        balance  roundrobin&lt;br /&gt;
        #cookie   SERVERID&lt;br /&gt;
        option   httpchk GET /index.html&lt;br /&gt;
        server  webapp1 192.168.30.71:80  weight 6 check inter 2000 rise 2 fall 3&lt;br /&gt;
        server  webapp2 192.168.30.72:80  weight 6 check inter 2000 rise 2 fall 3&lt;br /&gt;
         #上面是两台 real web vm &lt;br /&gt;
        #        #server  iivey234 192.168.81.234:8080 cookie server2 weight 3 check inter 2000 rise 2 fall 3&lt;br /&gt;
## here 20160616&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
backend  server_static&lt;br /&gt;
        mode    http&lt;br /&gt;
        option   redispatch&lt;br /&gt;
        option   abortonclose&lt;br /&gt;
        balance  roundrobin&lt;br /&gt;
        option   httpchk GET /index.html&lt;br /&gt;
        server  webapp2 192.168.30.72:80  weight 6 check inter 2000 rise 2 fall 3&lt;br /&gt;
&lt;br /&gt;
#backend  server_video&lt;br /&gt;
#        mode    http&lt;br /&gt;
#        option   redispatch&lt;br /&gt;
#        option   abortonclose&lt;br /&gt;
#        balance  roundrobin&lt;br /&gt;
#        option   httpchk GET /index.html&lt;br /&gt;
#        server  237server 192.168.30.71:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===启动脚本===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#!/bin/sh &lt;br /&gt;
# chkconfig 2345 on &lt;br /&gt;
# cat /etc/init.d/haproxy &lt;br /&gt;
# description: HAProxy is a TCP/HTTP reverse proxy which is particularly suited for high availability environments.&lt;br /&gt;
if [ -f /etc/init.d/functions ]; then &lt;br /&gt;
 . /etc/init.d/functions &lt;br /&gt;
elif [ -f /etc/rc.d/init.d/functions ] ; then &lt;br /&gt;
 . /etc/rc.d/init.d/functions &lt;br /&gt;
else &lt;br /&gt;
 exit 0 &lt;br /&gt;
fi&lt;br /&gt;
# Source networking configuration. &lt;br /&gt;
. /etc/sysconfig/network&lt;br /&gt;
# Check that networking is up. &lt;br /&gt;
#[ ${NETWORKING} = &amp;quot;no&amp;quot; ] &amp;amp;&amp;amp; exit 0&lt;br /&gt;
[ &amp;quot;${NETWORKING}&amp;quot; = &amp;quot;no&amp;quot; ] &amp;amp;&amp;amp; exit 0&lt;br /&gt;
&lt;br /&gt;
config=&amp;quot;/usr/local/haproxy/conf/haproxy.cfg&amp;quot;&lt;br /&gt;
exec=&amp;quot;/usr/local/haproxy/sbin/haproxy&amp;quot;&lt;br /&gt;
prog=$(basename $exec)&lt;br /&gt;
lockfile=/var/lock/subsys/haproxy&lt;br /&gt;
&lt;br /&gt;
PID=&amp;quot;/var/run/haproxy.pid&amp;quot;&lt;br /&gt;
check(){&lt;br /&gt;
   $exec -c -V -f $config&lt;br /&gt;
}&lt;br /&gt;
#[ -f $config ] || exit 1 &lt;br /&gt;
#RETVAL=0 &lt;br /&gt;
start() { &lt;br /&gt;
   $exec -c -q -f $config &lt;br /&gt;
  #daemon $exec -c -q -f $config &lt;br /&gt;
 # daemon $exec  -f $config &lt;br /&gt;
    if [ $? -ne 0 ]; then &lt;br /&gt;
        echo &amp;quot;Errors found in configuration file.&amp;quot; &lt;br /&gt;
        return 1 &lt;br /&gt;
    fi &lt;br /&gt;
&lt;br /&gt;
  echo -n &amp;quot;Starting HAproxy: &amp;quot; &lt;br /&gt;
  daemon $exec -D -f $config -p $PID&lt;br /&gt;
  RETVAL=$? &lt;br /&gt;
  echo &lt;br /&gt;
  [ $RETVAL -eq 0 ] &amp;amp;&amp;amp; touch /var/lock/subsys/haproxy &lt;br /&gt;
  return $RETVAL &lt;br /&gt;
}&lt;br /&gt;
stop() { &lt;br /&gt;
 echo -n &amp;quot;Shutting down HAproxy: &amp;quot; &lt;br /&gt;
 #kill  $(cat $PID)&lt;br /&gt;
 killproc haproxy  &lt;br /&gt;
 RETVAL=$? &lt;br /&gt;
 echo &lt;br /&gt;
 [ $RETVAL -eq 0 ] &amp;amp;&amp;amp; rm -f /var/lock/subsys/haproxy &lt;br /&gt;
 [ $RETVAL -eq 0 ] &amp;amp;&amp;amp; rm -f $PID &lt;br /&gt;
 return $RETVAL &lt;br /&gt;
}&lt;br /&gt;
restart() { &lt;br /&gt;
   $exec -c -q -f $config &lt;br /&gt;
   if [ $? -ne 0 ]; then &lt;br /&gt;
       echo &amp;quot;Errors found in configuration file, check it with &amp;#039;haproxy check&amp;#039;.&amp;quot; &lt;br /&gt;
       return 1 &lt;br /&gt;
   fi &lt;br /&gt;
 stop &lt;br /&gt;
 start &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
reload(){&lt;br /&gt;
    $exec -c -q  -f $config&lt;br /&gt;
   if [ $? -ne 0 ]; then &lt;br /&gt;
       echo &amp;quot;Errors found in configuration file, check it with &amp;#039;haproxy check&amp;#039;.&amp;quot; &lt;br /&gt;
       return 1 &lt;br /&gt;
   fi &lt;br /&gt;
   echo -n $&amp;quot;reloading haproxy:&amp;quot;&lt;br /&gt;
   $exec -D -f $config -p $PID -sf $(cat $PID)&lt;br /&gt;
    RETVAL=$? &lt;br /&gt;
    echo &lt;br /&gt;
return  $RETVAL&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
force_reload(){&lt;br /&gt;
    restart&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fdr_status(){&lt;br /&gt;
status $prog&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
##&lt;br /&gt;
rhstatus() { &lt;br /&gt;
 status haproxy &lt;br /&gt;
}&lt;br /&gt;
# See how we were called. &lt;br /&gt;
case &amp;quot;$1&amp;quot; in &lt;br /&gt;
 start) &lt;br /&gt;
        start &lt;br /&gt;
        ;; &lt;br /&gt;
 stop) &lt;br /&gt;
        stop &lt;br /&gt;
        ;; &lt;br /&gt;
 restart) &lt;br /&gt;
        restart &lt;br /&gt;
        ;; &lt;br /&gt;
 check)&lt;br /&gt;
        check&lt;br /&gt;
        ;; &lt;br /&gt;
 status) &lt;br /&gt;
        rhstatus &lt;br /&gt;
        ;; &lt;br /&gt;
 *) &lt;br /&gt;
        echo $&amp;quot;Usage: haproxy {start|stop|restart|status}&amp;quot; &lt;br /&gt;
        RETVAL=1 &lt;br /&gt;
        esac &lt;br /&gt;
        exit $RETVAL &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===配置日志 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HAProxy 不会直接输出文件日志，需要借助 Linux 的 rsyslog 来让 HAProxy 输出日志。&lt;br /&gt;
0)&lt;br /&gt;
emerg 0 系统不可用&lt;br /&gt;
alert 1 必须马上采取行动的事件&lt;br /&gt;
crit 2 关键的事件&lt;br /&gt;
err 3 错误事件&lt;br /&gt;
warning 4 警告事件&lt;br /&gt;
notice 5 普通但重要的事件&lt;br /&gt;
info 6 有用的信息&lt;br /&gt;
debug 7 调试信息&lt;br /&gt;
&lt;br /&gt;
1）修改 haproxy.cfg&lt;br /&gt;
&lt;br /&gt;
在配置文件的 global 和 defaults 域中添加以下字段：&lt;br /&gt;
&lt;br /&gt;
global&lt;br /&gt;
    ...&lt;br /&gt;
    log 127.0.0.1 local0 info&lt;br /&gt;
    log 127.0.0.1 local1 warning&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
defaults&lt;br /&gt;
    ...&lt;br /&gt;
    log global&lt;br /&gt;
    ...&lt;br /&gt;
意思是将 info 级（及以上）的日志推送到 rsyslog 的 local0 接口，将 warn 级（及以上）的日志推送到 rsyslog 的 local1 接口，并且所有 frontend 都默认使用 global 中的日志配置。&lt;br /&gt;
注意：info 级的日志会打印 HAProxy 处理的每一条请求，会占用很大的磁盘空间，在生产环境中，建议将日志级别调整为 notice。&lt;br /&gt;
&lt;br /&gt;
2）为 rsyslog 添加 haproxy 日志的配置&lt;br /&gt;
&lt;br /&gt;
 vi /etc/rsyslog.d/haproxy.conf&lt;br /&gt;
#配置文件内容如下：&lt;br /&gt;
&lt;br /&gt;
$ModLoad imudp&lt;br /&gt;
$UDPServerRun 514&lt;br /&gt;
$FileCreateMode 0644  #日志文件的权限&lt;br /&gt;
$FileOwner root  #日志文件的owner&lt;br /&gt;
local0.*     /var/log/haproxy.log  #local0接口对应的日志输出文件&lt;br /&gt;
local1.*     /var/log/haproxy_warn.log  #local1接口对应的日志输出文件&lt;br /&gt;
&lt;br /&gt;
3）修改 rsyslog 的启动参数&lt;br /&gt;
&lt;br /&gt;
 vi /etc/sysconfig/rsyslog&lt;br /&gt;
# 置文件内容如下：&lt;br /&gt;
&lt;br /&gt;
# Options for rsyslogd&lt;br /&gt;
# Syslogd options are deprecated since rsyslog v3.&lt;br /&gt;
# If you want to use them, switch to compatibility mode 2 by &amp;quot;-c 2&amp;quot;&lt;br /&gt;
# See rsyslogd(8) for more details&lt;br /&gt;
SYSLOGD_OPTIONS=&amp;quot;-c 2 -r -m 0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4）重启 rsyslog&lt;br /&gt;
service rsyslog restart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5）用 logrotate 进行日志切分&lt;br /&gt;
&lt;br /&gt;
通过 rsyslog 输出的日志是不会切分的，所以需要通过 Linux 提供的 logrotate 来对日志文件进行切分。&lt;br /&gt;
&lt;br /&gt;
使用 root 用户，创建 haproxy 日志切分配置文件：&lt;br /&gt;
&lt;br /&gt;
# mkdir /root/logrotate&lt;br /&gt;
# vi /root/logrotate/haproxy&lt;br /&gt;
配置文件内容如下：&lt;br /&gt;
&lt;br /&gt;
/var/log/haproxy.log /var/log/haproxy_warn.log {  #切分的两个文件名&lt;br /&gt;
    daily        #按天切分&lt;br /&gt;
    rotate 7     #保留7份&lt;br /&gt;
    create 0644 root root  #创建新文件的权限、用户、用户组&lt;br /&gt;
    compress     #压缩旧日志&lt;br /&gt;
    delaycompress  #延迟一天压缩&lt;br /&gt;
    missingok    #忽略文件不存在的错误&lt;br /&gt;
    dateext      #旧日志加上日志后缀&lt;br /&gt;
    sharedscripts  #切分后的重启脚本只运行一次&lt;br /&gt;
    postrotate   #切分后运行脚本重载rsyslog，让rsyslog向新的日志文件中输出日志&lt;br /&gt;
    /bin/kill -HUP $(/bin/cat /var/run/syslogd.pid 2&amp;gt;/dev/null) &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    endscript&lt;br /&gt;
}&lt;br /&gt;
6）将 logrotate 配置在 crontab 中：&lt;br /&gt;
&lt;br /&gt;
0 0 * * * /usr/sbin/logrotate /root/logrotate/haproxy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x /etc/init.d/haproxy&lt;br /&gt;
&lt;br /&gt;
手工启动&lt;br /&gt;
config=&amp;quot;/usr/local/haproxy/conf/haproxy.cfg&amp;quot;&lt;br /&gt;
exec=&amp;quot;/usr/local/haproxy/sbin/haproxy&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#检查配置文件 语法&lt;br /&gt;
$exec -c     -f $config&lt;br /&gt;
#Configuration file is valid&lt;br /&gt;
&lt;br /&gt;
#run &lt;br /&gt;
$exec    -f $config&lt;br /&gt;
&lt;br /&gt;
ha1 &lt;br /&gt;
http://192.168.30.76:8888/haproxy-status&lt;br /&gt;
&lt;br /&gt;
ha2&lt;br /&gt;
http://192.168.30.76:8888/haproxy-status &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==问题及解决回顾==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
搞了一个早上 看书才知道  原来是要这样直接打开的 不能不加 haproxy-status&lt;br /&gt;
&lt;br /&gt;
http://192.168.30.75:8888/haproxy-status&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
在其它机器 telnet 不通ha2  80 and 888 port &lt;br /&gt;
systemctl stop firewalld&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: Starting frontend www: cannot bind socket [192.168.30.88:80]&lt;br /&gt;
&lt;br /&gt;
frontend www&lt;br /&gt;
         bind 192.168.30.88:80 &lt;br /&gt;
先改为 bind *:80 或者先启动keepalived &lt;br /&gt;
&lt;br /&gt;
关闭selinux  或者&lt;br /&gt;
echo &amp;#039;net.ipv4.ip_nonlocal_bind=1&amp;#039; &amp;gt;&amp;gt;/etc/sysctl.conf&lt;br /&gt;
sysctl -p&lt;br /&gt;
&lt;br /&gt;
下面是解说 &lt;br /&gt;
Add net.ipv4.ip_nonlocal_bind=1 on /etc/sysctl.conf&lt;br /&gt;
sysctl -p&lt;br /&gt;
Restart the haproxy service(service restart haproxy). it will work.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
nbproc 2 只能是一个提示而已&lt;br /&gt;
[root@localhost conf]# $exec -c     -f $config&lt;br /&gt;
[WARNING] 165/230507 (26045) : Proxy &amp;#039;admin_stats&amp;#039;: in multi-process mode, stats will be limited to process assigned to the current request.&lt;br /&gt;
[WARNING] 165/230507 (26045) : Proxy &amp;#039;admin_stats&amp;#039;: stats admin will not work correctly in multi-process mode.&lt;br /&gt;
Configuration file is valid&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==参考==&lt;br /&gt;
&lt;br /&gt;
haproxy 配置详解good&lt;br /&gt;
http://freehat.blog.51cto.com/1239536/1347882&lt;br /&gt;
&lt;br /&gt;
haproxy日志配置&lt;br /&gt;
http://www.zhengdazhi.com/archives/1360&lt;br /&gt;
&lt;br /&gt;
HAproxy均衡负载部署和配置文件详解&lt;br /&gt;
https://my.oschina.net/duxuefeng/blog/35232&lt;br /&gt;
&lt;br /&gt;
负载均衡工具haproxy安装，配置，使用&lt;br /&gt;
http://blog.51yip.com/server/868.html&lt;br /&gt;
&lt;br /&gt;
[HAProxy]实现haproxy启动/关闭/重启SHELL脚本&lt;br /&gt;
http://lxsym.blog.51cto.com/1364623/852363&lt;br /&gt;
&lt;br /&gt;
HAproxy均衡负载部署和配置文件详解&lt;br /&gt;
https://my.oschina.net/duxuefeng/blog/35232&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
haproxy配置详解&lt;br /&gt;
http://leejia.blog.51cto.com/4356849/1421882&lt;br /&gt;
&lt;br /&gt;
负载均衡工具haproxy安装，配置，使用&lt;br /&gt;
http://blog.51yip.com/server/868.html&lt;br /&gt;
&lt;br /&gt;
haproxy日志配置 + rsyslog&lt;br /&gt;
https://www.ttlsa.com/linux/haproxy-log-configuration-syslog/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:ops]]&lt;/div&gt;</summary>
		<author><name>Evan</name></author>
	</entry>
</feed>