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

[经验分享] 使用 HAProxy 完成 網站分流, 平衡負載

[复制链接]

尚未签到

发表于 2019-1-2 07:53:09 | 显示全部楼层 |阅读模式
/etc/init.d/haproxy start # 啟動  HAProxy 錯誤排除
  在上述啟動時, 若有出現下述錯誤:
  Starting haproxy: [ALERT] 015/191034 (15631) : Starting proxy webfarm: cannot bind socket...on both load balancers
  或
  [ALERT] 056/103843 (1358) : Starting proxy www-balancer: cannot bind socket
  解法

  • 暫時解法, 直接先修改設定, 讓它先跑起來:  sysctl -e net.ipv4.ip_nonlocal_bind=1
  • 永久解法, 讓開機時自動設此參數.
  • sysctl -a | grep nonlocal # 看是否已經有設定此參數
  • vim /etc/sysctl.conf # 最下面加入  net.ipv4.ip_nonlocal_bind=1
  不過, 就直接啟動, 沒有做什麼任何的事情, 再來就來看看設定檔, 來把想做的事情設一設~ :)
  HAProxy 設定檔 Debug 模式
  HAProxy 的設定檔預設是放在 /etc/haproxy/haproxy.cfg (Debian), 要看是否設定正確, 來源資料是否走對路等等, 要先知道如何 Debug.

  • Debug mode 啟動: /usr/sbin/haproxy -d -f /etc/haproxy/haproxy.cfg
  HAProxy 設定檔(haproxy.cfg)
  HAProxy 設定檔, 詳細文件可見:
  HAProxy Documentation
  想要直接取用設定(下述是我的設定), 可以直接修改取用(
  haproxy.cfg 下載
  ), haproxy.cfg 內容如下:
  global
  maxconn 32768
  #chroot /usr/share/haproxy
  user haproxy
  group haproxy
  daemon
  nbproc 8
  #debug
  #quiet
  defaults
  log    global
  mode    http
  option    httplog
  option    dontlognull
  retries    3
  option redispatch
  option httpclose
  maxconn    32768
  contimeout    5000
  clitimeout    50000
  srvtimeout    50000
  #listen    www-balancer 0.0.0.0:80
  listen    www-balancer
  bind 0.0.0.0:80
  balance         roundrobin
  server          w1 11.11.11.11:80 weight 3 check
  server          w2 22.22.22.22:80 weight 3 check
  option          httpchk GET /robots.txt
  option          forwardfor
  HAProxy 常用參數說明
  HAProxy 上述 cfg 檔內容, 詳細可見:
  HAProxy Reference Manual
  (簡體版:
  HAProxy 配置手冊
  )
  下述內容主要來自上述文件:
  haproxy.cfg 三大項目
  haproxy.cfg 有分下列三種: (haproxy.cfg 的三個主項目)

  • global
  • listen
  • defaults
  註:

  • 下述所有  都必須由 大/小 寫字母, 數字, -, . : 組成. (大小寫會視為不同名稱)
  • defaults : 下面所有參數的預設設定值, 下面的設定值會蓋掉上面的.
  • listen   : 完整的 Proxy 代理, frontend / backend 都在這個設定裡 (用於 TCP)
  global 分類
  global 部分有下述幾類:

  • 行程管理和安全
  • chroot
  • daemon: 執行 -D 也是同樣
  • gid
  • group
  • log
  • nbproc: deamon 才能使用, 也是最推薦的模式, 如果小檔案很多, 建議要多開幾個, 但是 debug 時不建議開此參數. (arg: nbproc )
  • pidfile
  • uid
  • ulimit-n: 設定每個行程最大文件數, 此值會自動計算, 不建議設定此參數 (arg: ulimit-n )
  • user
  • stats
  • 性能調校
  • maxconn: 最大連接數, 同 -n (arg: maxconn )
  • noepoll: 在 Linux 系統不使用 epoll, 等同 -de
  • nokqueue: 在 BSD 不使用 kqueue polling, 同 -dk
  • nopoll: 此 poll 在任何機器都可以跑, 不建議關閉, 同 -dp
  • nosepoll: 在 Linux 系統不使用 speculative epoll, 等同 -ds
  • spread-checks: 多久去 check 一次, 預設值 0 (arg: spread-checks )
  • tune.maxaccept
  • tune.maxpollevents
  • 測試
  • debug: 將所有訊息都顯示到畫面上, 同 -d
  • quiet: 不顯示任何訊息, 同 -v
  listen 分類

  • listen  [ :[,...] ]
  listen 部分有下述幾類:

  • bind
  • mode: TCP / HTTP / health
  • balance: roundrobin / source / url / url_param
  • server
  • option
  • # defaults 的參數都可於此寫入, 於此 listen 的設定中, 會以此寫入的為主.
  defaults 參數
  defaults 的參數說明: (註: 下述非完整參數, 只把可能會用到的簡單做個筆記.)

  • acl   [flags] [operator]  ...
  • balance  [  ] (設定 load balancing algorithm, ex: balance roundrobin)
  • balance url_param  [check_post []] (ex: balance url_param userid 或 balance url_param session_id check_post 64)
  • bind []: [, ...] (ex: bind :80,:443 或 bind 10.0.0.1:10080,10.0.0.1:10443)
  • contimeout : 設定連結到 server 的最大等待時間.
  • clitimeout : 設定 Client 最大等待時間
  • errorfile   (ex: errorfile 400 /etc/haproxy/errors/400.http,  支援的 HTTP status code 有:  400, 403, 408, 500, 502, 503, and 504.)
  • log global
  • log   [] (ex: log 127.0.0.1:514 local0 notice)
  • maxconn : 同時最大連線數量
  • mode { tcp|http|health } (defaults 為 http)
  • monitor fail [if | unless] : 如果發現掛掉時, 要做什麼事.
  • monitor-net  (ex: monitor-net 192.168.0.252/31 # addresses .252 and .253 are just probing us.)
  • monitor-uri  (ex: monitor-uri /haproxy_test # Use /haproxy_test to report haproxy's status)
  • option dontlognull: Enable or disable logging of null connections.
  • option forwardfor [ except  ]: 如果有 X-Forwarded-For header 都送到 server 去.
  • option httpchk: 於下面範例解釋
  • option httpclose: Enable or disable passive HTTP connection closing
  • option httplog: Enable logging of HTTP request, session state and timers
  • option logasap: Enable or disable early logging of HTTP requests
  • option persist: 當 client 連到死的機器時, 持續繼續連線, 搭配 redispatch 會再幫他導到其它機器.
  • option redispatch: 當 client 連到死的機器時, 重新再分配.
  • option smtpchk
  • option smtpchk   (ex: option smtpchk HELO mydomain.org)
  • option srvtcpka: Enable or disable the sending of TCP keepalive packets on the server side
  • option ssl-hello-chk: Use SSLv3 client hello health checks for server testing
  • option tcpka: Enable or disable the sending of TCP keepalive packets on both sides
  • option tcplog: Enable advanced logging of TCP connections with session state and timers
  • option transparent: Enable client-side transparent proxying
  • reqadd : Add a header at the end of the HTTP request
  • reqallow   (ex: reqiallow ^Host:\ www\.)
  • reqiallow   (ignore case) (ex: reqiallow ^Host:\ www\.)
  • reqdel   (ex: reqdel ^X-Forwarded-For:.*)
  • reqidel   (ignore case) (ex: reqidel ^Cookie:.*SERVER=)
  • reqdeny
  • reqideny   (ignore case) (ex: reqideny  ^Host:\ .*\.local)
  • reqpass
  • reqipass   (ignore case) (ex: reqipass  ^Host:\ www.private\.local)
  • reqrep    (ex: reqrep ^([^\ ]*)\ /static/(.*)  \1\ /\2)
  • reqirep     (ignore case) (ex: reqirep ^Host:\ www.mydomain.com   Host:\ www)
  • rspadd : Add a header at the end of the HTTP response
  • rspdel
  • rspidel   (ignore case)
  • server  [:port] [param*]: Declare a server in a backend (ex: server first  10.1.1.1:1080 cookie first  check inter 1000 或 server second 10.1.1.2:1080 cookie second check inter 1000)
  • stats auth : (ex: stats auth admin1:AdMiN123)
  • srvtimeout : 設定在 server side 的 最大等待時間
  • retries : 重試次數
  httpchk 範例
  httpchk (啟用 HTTP 的 server health check.) 特別重要, 範例多記錄一點.
  option httpchk
  option httpchk
  option httpchk
  option httpchk
  ex:

  #>  # using HTTP request "OPTIONS * HTTP/1.1" on port 80.
  backend https_relay
  mode tcp
  option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
  server apache1 192.168.1.1:443 check port 80
  option  httpchk GET /robots.txt
  option  httpchk GET /index.html
  option  httpchk *
  option  httpchk GET /robots.txt # 指的是 GET /robots.txt HTTP/1.0
  option  httpchk # 指的是 OPTIONS / HTTP/1.0
  option  httpchk * # 指的是 OPTIONS * HTTP/1.0


运维网声明 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-658459-1-1.html 上篇帖子: Haproxy的ACL规则和获取样本 下篇帖子: HAProxy 学习笔记-- 配置日志
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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