lx86 发表于 2019-1-1 08:14:12

Haproxy的介绍和安装

  Haproxy的介绍和安装
Haproxy介绍
软件介绍
Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热备,虚拟主机,基于TCP和HTTP应用代理等功能。配置简单,而且拥有服务器节点的健康检查功能(相当于keepalived健康检查),当后端服务器宕机时,haproxy会自动将故障服务器摘除,当服务器故障恢复后,再自动加入到集群中。
Haproxy特别在适用于那些访问量很大,但又需要会话保持或七层应用的业务。支持两种主要的代理模式:4层Tcp代理(例如邮件服务,mysql业务,ssh等)和7层(HTTP代理)。在4层tcp模式下,haproxy仅在客户端和服务器之间转发双向流量。7层模式下haproxy会分析应用层协议,并且能通过允许,拒绝,交换,增加,修改或者删除请求或者回应里指定内容来控制协议
  Haproxy采用的是NAT模式,数据包来去都会经过haproxy。
4层代理和7层代理介绍
  Haproxy软件的4层tcp代理应用非常优秀,配置非常简单方便,比lvs和nginx要方便的多,haproxy不需要在RS端执行脚本即可实现应用代理
http://s3.运维网.com/wyfs02/M01/6E/A1/wKioL1WBRQixnaolAAOHoxZE8bc088.jpg
  从上图可以看出,haproxy采用的是NAT的工作模式,网站所有流量都经过haproxy,所以适用于那些访问量不是特别大的网站,在一般的中小型公司,建议使用haproxy做负载均衡。
  Haproxy最大额优点在于其7层的根据URL请求头应用过滤的功能,在门户网站的高并发生产架构中。Haproxy软件一般用在LVS软件的下一层,或挂在硬件负载均衡althon、NS、F5下使用
http://s3.运维网.com/wyfs02/M02/6E/A5/wKiom1WBQ2zRnLSvAAQmjxeSqpQ525.jpg
Haproxy安装部署
下载软件包,并安装
cd /usr/src
wget http://down1.chinaunix.net/distfiles/haproxy-1.4.21.tar.gz
tar zxf haproxy-1.4.21.tar.gz
cd haproxy-1.4.21
make TARGET=linux26 ARCH=x86_64
make PREFIX=/usr/local/haproxy-1.4.21 install
ln -s /usr/local/haproxy-1.4.21/ /usr/local/haproxy
说明:
1.      make TARGET=linux26ARCH=x86_64                是64位系统的编译方式
32位系统的编译方式为:
makeTARGET=linux26 ARCH=x86
2. TARGET 后面是系统内核,不同版本的linux系统,内核版本不一样。可以 moreREADME 查看详细信息

创建相关目录,使软件更结构化
  默认的文件结构为:
# tree
├── doc
│└── haproxy
│       ├── architecture.txt
│       ├── configuration.txt
│       ├── haproxy-en.txt
│       └── haproxy-fr.txt
├── sbin
│└── haproxy
└── share
    └── man
      └── man1
            └── haproxy.1
6 directories, 6 files
现在创建 bin conf logsvar/chroot var/run等目录
cd /usr/local/haproxy
mkdir -p conf bin logs var/run var/chroot

查看:
# tree
.
├── bin
├── conf
├── doc
│   └── haproxy
│       ├──architecture.txt
│       ├──configuration.txt
│       ├── haproxy-en.txt
│       └── haproxy-fr.txt
├── logs
├── sbin
│   └── haproxy
├── share
│   └── man
│       └── man1
│         └── haproxy.1
└── var
    ├── chroot
    └── run

12 directories, 6 files
至此,haproxy已经安装完成。配置需要我们手动创建,下面先简单进行配置,并测试
Haproxy主配置文件
cat >/usr/local/haproxy/conf/haproxy.conf&1
         $PROG-f $CONFFILE
       [ $?-eq 0 ] && {
      action"haproxy start isOK..."/bin/true
} || action"haproxy start is error..." /bin/false
         ;;
status)
         if [ !-f $PIDFILE ]; then
                   echo"pid not found"
                   exit1
         fi
         forpid in $(cat $PIDFILE); do
                   kill-0 $pid
                   RETVAL="$?"
                   if[ ! "$RETVAL" = "0" ]; then
                            echo"process $pid died"
                            exit1
                   fi
         done
         echo"process is running"
         ;;
restart)
         $PROG-f $CONFFILE -sf $(cat $PIDFILE) >/dev/null 2>&1
         ;;
stop)
         kill$(cat $PIDFILE)
[ $? -eq 0 ] && {
      action"haproxy stop isOK..."/bin/true
} || action"haproxy stop is error..." /bin/false
         ;;
*)
         echo"USAGE: $0 start|restart|status|stop"
         exit 1
         ;;
esac
  把启动文件放在bin目录下,并赋予执行权限,添加开机自启动
chmod 755 haproxy
echo "/usr/local/haproxy/bin/haproxystart" >> /etc/rc.local
tail -1 /etc/rc.local
查看结果: /usr/local/haproxy/bin/haproxy start

  启动haproxy,并测试
/usr/local/haproxy/bin/haproxy start
启动结果:
# /usr/local/haproxy/bin/haproxystart
269/165754 (1791) : Proxy 'admin_status': in multi-process mode, stats willbe limited to process assigned to the current request.
haproxystart isOK...                                    [确定]
# netstat -anput | grep haproxy
tcp         0      0 192.168.1.104:80            0.0.0.0:*                   LISTEN      1792/haproxy
tcp         0      0 0.0.0.0:8080                0.0.0.0:*                   LISTEN      1792/haproxy
udp         0      0 0.0.0.0:38073               0.0.0.0:*                               1792/haproxy
# ps -aux | grephaproxy
Warning:bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
haproxy   1792   0.00.618312   3348 ?      Ss   16:57    0:00 /usr/local/haproxy/sbin/haproxy -f/usr/local/haproxy/conf/haproxy.conf
haproxy   1793   0.00.618312   3348 ?      Ss   16:57    0:00 /usr/local/haproxy/sbin/haproxy -f/usr/local/haproxy/conf/haproxy.conf
haproxy   1794   0.00.618312   3348 ?      Ss   16:57    0:00 /usr/local/haproxy/sbin/haproxy -f/usr/local/haproxy/conf/haproxy.conf
haproxy   1795   0.00.618312   3348 ?      Ss   16:57    0:00 /usr/local/haproxy/sbin/haproxy -f/usr/local/haproxy/conf/haproxy.conf
haproxy   1796   0.00.618312   3348 ?      Ss   16:57    0:00 /usr/local/haproxy/sbin/haproxy -f/usr/local/haproxy/conf/haproxy.conf
haproxy   1797   0.00.618312   3348 ?      Ss   16:57    0:00 /usr/local/haproxy/sbin/haproxy -f/usr/local/haproxy/conf/haproxy.conf
haproxy   1798   0.00.618312   3348 ?      Ss   16:57    0:00 /usr/local/haproxy/sbin/haproxy -f/usr/local/haproxy/conf/haproxy.conf
haproxy   1799   0.00.618312   3348 ?      Ss   16:57    0:00 /usr/local/haproxy/sbin/haproxy -f/usr/local/haproxy/conf/haproxy.conf
root      1804   0.00.1 103244   868 pts/0    S+    16:59   0:00 grep haproxy
haproxy已经成功启动。查看发现,80端口和8080端口已经监听,而且有8个进程在系统后台。下面开始测试
# for ((i=1;i>/etc/rsyslog.conf/etc/sysctl.conf
sysctl -p

所以这种方法有效解决了在主备haproxy环境下,VIP不在备haproxy上时,备haproxy能正常启动的问题
由于haproxy工作模式是NAT模式,为了更好的实现转发请求,需要开启linux本身的转发功能
sed -i "s/net.ipv4.ip_forward =0/net.ipv4.ip_forward = 1/g" /etc/sysctl.conf
sysctl -p

Haproxy多实例配置
  Haproxy支持多实例,每个实例可以有自己的单独配置文件。启动的时候用-f指定配置文件即可。下面增加一个实例,用来代理ssh服务
cat > /usr/local/haproxy/conf/haproxy-ssh.conf
页: [1]
查看完整版本: Haproxy的介绍和安装