logo资料库

haproxy1.8.7安装与配置详解.pdf

第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
资料共16页,剩余部分请下载后查看
1. 简介
2. 安装
3. 配置
4. 启停
4.1 手动启停
4.2 启停脚本
5. 日志配置
6. 相关参数
6.1 负载均衡算法
6.2 mode
6.3 maxconn
6.4 cookie
6.5 weight
6.6 option forwardfor
6.7 ACL
6.8 cookie
6.9 健康检查
6.9.1 基于tcp端口
6.9.2 基于http
6.9.3 基于某个域名
6.9.4 其他服务的健康检查
7. 功能实例
7.1 实现四层代理
7.2 实现七层代理
haproxy1.8.7 安装及配置详解 1. 简介 HAProxy 提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理,支持虚拟 主机,它是免费、快速并且可靠的一种解决方案。根据官方数据,其最高极限支 持 10G 的并发。 HAProxy 特别适用于那些负载特大的 web 站点,这些站点通常又需要会话保持或 七层处理。HAProxy 运行在当前的硬件上,完全可以支持数以万计的并发连接。 并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保 护你的 web 服务器不被暴露到网络上。 其支持从 4 层至 7 层的网络交换,即覆盖所有的 TCP 协议。就是说,Haproxy 甚 至还支持 Mysql 的均衡负载。 如果说在功能上,能以 proxy 反向代理方式实现 WEB 均衡负载,这样的产品有 很多。包括 Nginx,ApacheProxy,lighttpd,Cheroke 等。 但要明确一点的,Haproxy 并不是 Http 服务器。以上提到所有带反向代理均衡负 载的产品,都清一色是 WEB 服务器。简单说,就是他们能自个儿提供静态 (html,jpg,gif..)或动态(php,cgi..)文件的传输以及处理。而 Haproxy 仅仅,而且专门 是一款的用于均衡负载的应用代理。其自身并不能提供 http 服务。 2. 安装 #tar zxvf haproxy-1.8.7.tar.gz #cd haproxy-1.8.7 # make TARGET=linux2.6 PREFIX=/data/haproxy # make install PREFIX=/data/haproxy (TARGET 后面根据本机操作系统内核版本来填写,查看内核版本 uname –r 或 cat /proc/version。PREFIX 是要安装到的目录。) 安装完成后会在安装目录下生成 doc,sbin,share 三个文件夹。解压的源码文件也 可以删除掉。 1 / 16
haproxy1.8.7 安装及配置详解 3. 配置 1. 添加 haproxy 运行的用户 #useradd -s /sbin/nologin www 2. 在安装目录下建立配置文件目录 #mkdir conf logs 3. 在新创建的目录下创建配置文件 #vi haproxy.cfg 4. 在创建的 haproxy.cfg 文件中加入如下内容 global log 127.0.0.1 local0 info #[err warning info debug] #全局的日志配置其中日志级别是[err warning info debug] #local0 是日志设备,必须为如下 24 种标准 syslog 设备的一种: #kern user mail daemon auth syslog lpr news uucp cron auth2 ftp ntp audit alert cron2 #local0 local1 local2 local3 local4 local5 local6 local7 #在/etc/syslog.conf 文件中定义的是 local0,这里也是用 local0 maxconn 4096 #最大连接数 user www group www #运行的用户、组 daemon #使 HAProxy 进程进入后台运行。这是推荐的运行模式 nbproc 1 #创建 1 个进程进入 deamon 模式运行。运行模式须为"daemon" pidfile /data/haproxy/logs/haproxy.pid #将所有进程的 pid 写入文件启动进程的用户必须有权限访问此文件 defaults #默认的模式 mode { tcp|http|health },tcp 是 4 层,http 是 7 层,health 只会返回 OK retries 3 #三次连接失败就认为是服务器不可用,也可以通过后面设置 option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接 maxconn 2000 #默认的最大连接数 timeout connect 5000 #连接超时 timeout client 30000 #客户端超时 timeout server 30000 #服务器超时 timeout check 2000 2 / 16
haproxy1.8.7 安装及配置详解 #心跳检测超时,一些参数值为时间,比如说 timeout。时间值通常单位为毫秒(ms),但是也可 以通过加#后缀,来使用其他的单位。 #- us : microseconds. 1 microsecond = 1/1000000 second #- ms : milliseconds. 1 millisecond = 1/1000 second. This is the default. #- s : seconds. 1s = 1000ms #- m : minutes. 1m = 60s = 60000ms #- h : hours. 1h = 60m = 3600s = 3600000ms #- d : days. 1d = 24h = 1440m = 86400s = 86400000ms listen admin_stats bind 0.0.0.0:1080 #监听端口 mode http #http 的 7 层模式 log 127.0.0.1 local0 info #日志设置 stats uri /admin?stats #统计页面 URL,可通过 http://192.168.10.1:1080/admin?stats 访问监控页面 stats realm Gemini\ Haproxy #统计页面密码框上提示文本 stats auth admin:admin #统计页面用户名和密码设置 stats auth admin1:admin1 stats refresh 5s #每隔 5 秒自动刷新监控页面 stats hide-version #隐藏统计页面上 HAProxy 的版本信息 listen localhost 192.168.10.1:81 #localhost 主机名,需要在/etc/hosts 添加,否则会报错 mode http option httpclose #每次请求完毕后主动关闭 http 通道 option forwardfor #如果后端服务器需要获得客户端真实 ip 需要配置的参数,可以从 Http Header 中获得客户 端 ip balance roundrobin # 负载均衡的方式,roundrobin 平均方式 option redispatch #serverId 对应的服务器挂掉后,强制定向到其他健康的服务器 cookie SERVERID server app_1 192.168.10.1:8080 cookie 1 check inter 1500 rise 3 fall 3 weight 1 server app_2 192.168.10.1:8081 cookie 2 check inter 1500 rise 3 fall 3 weight 1 #服务器定义,cookie 1 表示 serverid 为 app_1,check inter 1500 是检测心跳频率,rise 3 是 3 次正确认为服务器可用,fall 3 是 3 次失败认为服务器不可用,weight 代表权重 3 / 16
haproxy1.8.7 安装及配置详解 4. 启停 4.1 手动启停 1. 启动服务: # /data/haproxy/sbin/haproxy -f /data/haproxy/conf/haproxy.cfg -f /data/haproxy/conf/haproxy.cfg -st `cat 2. 重启服务: #/data/haproxy/sbin/haproxy /data/haproxy/logs/haproxy.pid` 3. 停止服务: # killall haproxy 4.2 启停脚本 #vi hactl.sh #!/bin/bash # HAPROXY - this script starts and stops the HAPROXY daemon HAPROXY_DIR=/data/haproxy HAPROXY=${HAPROXY_DIR}/sbin/haproxy PROG=$(basename ${HAPROXY}) HAPROXY_CONF_FILE=${HAPROXY_DIR}/conf/haproxy.cfg HAPROXY_PID=${HAPROXY_DIR}/logs/haproxy.pid C_RED="\033[0;31m" C_GREEN="\033[1;32m" C_CLOSED="\033[0m" COUNT(){ PROG_COUNT=$(ps -C ${PROG} -o pid|wc -l) } start() { COUNT if [ ${PROG_COUNT} -gt 1 ];then else echo "Starting $PROG." echo "[-] ${PROG} is already running." exit 1 4 / 16
haproxy1.8.7 安装及配置详解 echo "Stopping $PROG." sleep 0.5 sleep 0.5 if [ ${PROG_COUNT} -gt 1 ];then echo -e "${C_GREEN}[+] Successful.${C_CLOSED}" else echo -e "${C_RED}[-] Faild.${C_CLOSED}" ${HAPROXY} -f ${HAPROXY_CONF_FILE} COUNT fi fi } stop() { COUNT if [ ${PROG_COUNT} -le 1 ];then echo "[-] ${PROG} is not running." exit 1 else kill -9 $(cat ${HAPROXY_PID}) && rm -f ${HAPROXY_PID} COUNT if [ ${PROG_COUNT} -le 1 ];then echo -e "${C_GREEN}[+] Successful.${C_CLOSED}" else echo -e "${C_RED}[-] Faild.${C_CLOSED}" fi fi } restart() { if [ -e ${HAPROXY_PID} ];then stop fi start } status() { COUNT if [ ${PROG_COUNT} -le 1 ];then echo "${PROG} is not running." else echo "${PROG} is running..." fi 5 / 16
haproxy1.8.7 安装及配置详解 } case "$1" in start) $1 ;; stop) $1 ;; restart) $1 ;; status) $1 ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 2 esac 5. 日志配置 配置 rsyslog(没有需要安装) 1. 创建日志目录 #mkdir -p /data/haproxy/logs 2. 开启 rsyslog 记录 haproxy 日志功能,编辑"/etc/rsyslog.conf"打开如下配置项: # Provides UDP syslog reception $ModLoad imudp $UDPServerRun 514 3. 添加如下内容: # Save haproxy log local0.* /data/haproxy/haproxy.log haproxy.log 地 址 代 表 了 需 要 存 储 日 志 的 地 址 , 其 中 local0 这 个 级 别 要 和 haproxy.cfg 配置的 log 级别一样。 6 / 16
haproxy1.8.7 安装及配置详解 4. 修改“/etc/sysconfig/rsyslog”文件,内容如下 # Options for rsyslogd # Syslogd options are deprecated since rsyslog v3. # If you want to use them, switch to compatibility mode 2 by "-c 2" # See rsyslogd(8) for more details SYSLOGD_OPTIONS="-r -m 0 -c 2" 5. 编辑 haproxy 配置文件,进行如下内容修改 log 127.0.0.1 local0 info 6. 重启 haproxy 和 rsyslog #service rsyslog restart 6. 相关参数 6.1 负载均衡算法  roundrobin 基于权重进行轮叫,在服务器的处理时间保持均匀分布时,这是最平衡、最公平 的算法。此算法是动态的,这表示其权重可以在运行时进行调整,不过,在设计 上,每个后端服务器仅能最多接受 4128 个连接;  static-rr 基于权重进行轮叫,与 roundrobin 类似,但是为静态方法,在运行时调整其服务 器权重不会生效;不过,其在后端服务器连接数上没有限制;  leastconn 新的连接请求被派发至具有最少连接数目的后端服务器;在有着较长时间会话的 场景中推荐使用此算法,如 LDAP、SQL 等,其并不太适用于较短会话的应用层 协议,如 HTTP;此算法是动态的,可以在运行时调整其权重;  source 将请求的源地址进行 hash 运算,并由后端服务器的权重总数相除后派发至某匹 7 / 16
haproxy1.8.7 安装及配置详解 配的服务器;这可以使得同一个客户端 IP 的请求始终被派发至某特定的服务器; 不过,当服务器权重总数发生变化时,如某服务器宕机或添加了新的服务器,许 多客户端的请求可能会被派发至与此前请求不同的服务器;常用于负载均衡无 cookie 功能的基于 TCP 的协议;其默认为静态,不过也可以使用 hash-type 修改 此特性;  uri 对 URI 的左半部分(“问题”标记之前的部分)或整个 URI 进行 hash 运算,并由服 务器的总权重相除后派发至某匹配的服务器;这可以使得对同一个 URI 的请求总 是被派发至某特定的服务器,除非服务器的权重总数发生了变化;此算法常用于 代理缓存或反病毒代理以提高缓存的命中率;需要注意的是,此算法仅应用于 HTTP 后端服务器场景;其默认为静态算法,不过也可以使用 hash-type 修改此特 性;  url_param 通过为 URL 指定的参数在每个 HTTP GET 请求中将会被检索;如果找 到了指定的参数且其通过等于号“=”被赋予了一个值,那么此值将被执行 hash 运算并被服务器的总权重相除后派发至某匹配的服务器;此算法可以通过追踪请 求中的用户标识进而确保同一个用户 ID 的请求将被送往同一个特定的服务器, 除非服务器的总权重发生了变化;如果某请求中没有出现指定的参数或其没有有 效值,则使用轮叫算法对相应请求进行调度;此算法默认为静态的,不过其也可 以使用 hash-type 修改此特性;  hdr() 对于每个 HTTP 请求,通过指定的 HTTP 首部将会被检索;如果相应的首 部没有出现或其没有有效值,则使用轮叫算法对相应请求进行调度;其有一个可 选选项“use_domain_only”,可在指定检索类似 Host 类的首部时仅计算域名部分 (比如通过 www.magedu.com 来说,仅计算 magedu 字符串的 hash 值)以降低 hash 算法的运算量;此算法默认为静态的,不过其也可以使用 hash-type 修改此特性; 6.2 mode mode { tcp|http|health } 8 / 16
分享到:
收藏