设为首页 收藏本站
查看: 854|回复: 0

[经验分享] CentOS 6.3 安装 HAProxy

[复制链接]

尚未签到

发表于 2016-5-9 11:00:51 | 显示全部楼层 |阅读模式
HAProxy是一款开源的高性能的代理转发软件,提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。用途最多的还是将它用着前端的负载均衡器,他可以提供第4层和第7层的负载,用的最多还是第7层(mode  http),HAProxy特别适用于那些负载特大的web站点, 这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。


关于性能方面,haproxy 官方说同等条件下lvs>haproxy>nginx  原因lvs的转发直接在内核空间完成,haproxy 和nginx 还需要使用用户空间的资源,而相对于nginx haproxy调用的资源比较少而已


DSC0000.png


HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作。


DSC0001.png


软件下载:

下载地址:http://www.haproxy.org/download/1.5/src/haproxy-1.5.5.tar.gz

依赖包安装:

# yum install gcc gcc-c++ make zlib-devel bzip2-devel openssl-devel

haproxy安装:

# tar -zvxf haproxy-1.5.5.tar.gz
# cd haproxy-1.5.5
# uname -a      ## 查看linux内核版本
# make TARGET=linux26 PREFIX=/usr/local/haproxy-1.5.5
# make install PREFIX=/usr/local/haproxy-1.5.5

编辑启动文件:
# vi /etc/init.d/haproxy   --添加以下内容

#!/bin/sh
#
# haproxy
#
# haproxy starting and stopping the haproxy load balancer
#
# chkconfig: 345 55 45
# description: HAProxy is a free, very fast and reliable solution
#               offering high availability, load balancing, and
#               proxying for TCP and  HTTP-based applications
# config:      /etc/haproxy/haproxy.cfg
# pidfile:     /var/run/haproxy.pid
# probe: true


# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

[ -f /usr/local/haproxy-1.5.5/sbin/haproxy ] || exit 0

[ -f /etc/haproxy/haproxy.conf ] || exit 0

# Define our actions
checkconfig() {
        # Check the config file for errors
        /usr/local/haproxy-1.5.5/sbin/haproxy -c -q -f /etc/haproxy/haproxy.conf
        if [ $? -ne 0 ]; then
                 echo "Errors found in configuration file."
                return 1
        fi

        # We're OK!
        return 0
}


start() {
        # Check config
        /usr/local/haproxy-1.5.5/sbin/haproxy -c -q -f /etc/haproxy/haproxy.conf
        if [ $? -ne 0 ]; then
                echo "Errors found in configuration file."
                return 1
        fi

        echo -n "Starting HAProxy: "
        daemon /usr/local/haproxy-1.5.5/sbin/haproxy -D -f /etc/haproxy/haproxy.conf -p /var/run/haproxy.pid

        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/haproxy
        return $RETVAL
}

stop() {
        echo -n "Shutting down HAProxy: "
        killproc haproxy -USR1

        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/haproxy
        [ $RETVAL -eq 0 ] && rm -f /var/run/haproxy.pid
        return $RETVAL
}

restart() {
        /usr/local/haproxy-1.5.5/sbin/haproxy -c -q -f /etc/haproxy/haproxy.conf
        if [ $? -ne 0 ]; then
                echo "Errors found in configuration file."
                return 1
        fi

        stop
        start
}

check() {
        /usr/local/haproxy-1.5.5/sbin/haproxy -c -q -V -f /etc/haproxy/haproxy.conf
}

rhstatus() {
        status haproxy
}

reload() {
        /usr/local/haproxy-1.5.5/sbin/haproxy -c -q -f /etc/haproxy/haproxy.conf
        if [ $? -ne 0 ]; then
                echo "Errors found in configuration file."
                return 1
        fi

        echo -n "Reloading HAProxy config: "
        /usr/local/haproxy-1.5.5/sbin/haproxy -f /etc/haproxy/haproxy.conf -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)

        success $"Reloading HAProxy config: "
        echo
}


# Possible parameters
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        rhstatus
        ;;
  restart)
        restart
        ;;
  reload)
        reload
        ;;
  checkconfig)
        check
        ;;
  *)
        echo "Usage: haproxy {start|stop|status|restart|reload|checkconfig}"
        exit 1
esac

exit 0



授权:

# chmod +x /etc/init.d/haproxy


编辑haproxy配置文件:

# mkdir /etc/haproxy
# vi /etc/haproxy/haproxy.conf

global
      maxconn 4096                     #默认最大连接数
      pidfile /var/run/haproxy.pid     #haproxy的pid存放路径
      daemon                           #以后台形式运行haproxy
      nbproc 1                         #进程数量
defaults
        log global
        mode http                      #所处理的类别 (#7层 http;4层tcp  )
        retries 3                      #三次连接失败就认为是服务器不可用
        option httplog
        option httpclose
        option redispatch              #serverId对应的服务器挂掉后,强制定向到其他健康的服务器
        option abortonclose            #当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接
        maxconn 4096                   #最大连接数
        timeout connect 50000          #连接超时
        timeout client 50000           #客户端超时
        timeout server 50000           #服务器超时
        balance roundrobin             #默认的负载均衡的方式,轮询方式

listen mysql_proxy
        bind *:3366                    #监听端口
        mode tcp                       #tcp的4层模式
        balance roundrobin
        option tcpka
        option httpchk
        server mysqldb1 172.16.10.70:3306 weight 1  #weight代表权重
        server mysqldb1 172.16.10.71:3306 weight 1  #weight代表权重
     
listen stats
       bind *:8888
       mode http
       option httplog
       option httpclose
       balance roundrobin
       stats refresh 5s
       stats uri /                     #网站健康检测URL,用来检测HAProxy管理的网站是否可以用,正常返回200,不正常返回503
       stats realm Haproxy\ Statistics
       stats auth admin:admin          #账号密码


启动并检查:

# service haproxy start
# netstat -plantu | grep 3366

tcp   0   0 0.0.0.0:3366    0.0.0.0:*   LISTEN  23626/haproxy

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-214695-1-1.html 上篇帖子: CentOS环境下openJDK安装 下篇帖子: CentOS 7 WiFi连接
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表