Memo/Linux/haproxy

http://dexlab.net/pukiwiki/index.php?Memo%2FLinux%2Fhaproxy
 

HAProxyでフェイルオーバー/負荷分散

L7ロードバランサ。アプリケーション層のHTTPやSMTP等が対象。
対するL4ロードバランサはネットワーク層のTCP/UDP等が対象

  • メリット
    • DB Slave, memcacheノード追加/変更/削除時にアプリケーション側を変更しなくて良い。常にローカル(127.0.0.1:xxxx)へアクセスすれば良い
    • 負荷分散/フェイルオーバー機能を担保してくれるため、アプリ側で実装しなくて良い
    • 上記ノード変更時にサービス停止の可能性が減る
    • 負荷分散/フェイルオーバー機能を持たないソフトでも利用できる場合がある
  • デメリット
    • 複雑性が一つ増す。単一障害点が一つ増す。(対策:複数台用意する事でリスクを減らす)
  • 注意
    • 起動時にDNS名前解決を行いIPアドレスをキャッシュするので、ELBのように動的にIPアドレスが変わる場合は変更を通知する仕組みが必要

サービスを止めずに設定の再読み込み


一時的に設定を無効にする

  • disabledを使えば、セクション丸ごと無効にできる。
    • 例:mysql-slaveを無効にする場合
      1. vim /etc/haproxy/haproxy.cfg
      2. ----
      3. listen mysql-slave
      4.     disabled
      5. ----
      6. service haproxy reload

muninでの監視

  • munin-nodeプラグイン
    • https://github.com/p01nt/haproxy_munin
    • http://exchange.munin-monitoring.org/plugins/?filter=tag:haproxy
    • memcacheのダウンタイムを知りたい場合
      1. yum install socat --enablerepo=rpmforge
      2. wget --no-check-certificate -O /usr/share/munin/plugins/haproxy_dwn_ "https://github.com/p01nt/haproxy_munin/raw/master/haproxy_dwn_"
      3. perl -p -i -e 's#/tmp/haproxy#/var/lib/haproxy/stats#i' "/usr/share/munin/plugins/haproxy_dwn_"
      4. chmod 755 /usr/share/munin/plugins/haproxy_dwn_
      5. ln -s /usr/share/munin/plugins/haproxy_dwn_ /etc/munin/plugins/haproxy_dwn_memcache
      6.  
      7. cat > /etc/munin/plugin-conf.d/haproxy <<EOF
      8. [haproxy_*]
      9. user root
      10. group root
      11. EOF
      12.  
      13. service munin-node restart
  • 確認。エラーが起きる度にカウントアップされる
    • 異常時
      1. munin-run haproxy_dwn_memcache
      2.  
      3. memcache1_dwn.value 2
      4. memcache1_dwntime.value 138

インストール

  • CentOS6.x
    • インストール
      1. yum install haproxy --enablerepo=epel
  • CentOS5.x
    • インストール:epelにCentOS6.0用のrpmはあるが、5.x用の1.4.xが無いのでリビルド
      1. cd /usr/src/redhat/
      2. wget "http://download.fedora.redhat.com/pub/epel/6/SRPMS/haproxy-1.4.18-1.el6.src.rpm"
      3. rpm -ivh --nomd5 haproxy-1.4.18-1.el6.src.rpm
      4.  
      5. yum install pcre-devel
      6. rpmbuild -ba SPECS/haproxy.spec
      7.  
      8. rpm -ivh RPMS/i386/haproxy-1.4.18-1.i386.rpm
  • ログを出力する
    1. "-r"オプションを追加
    2. vim /etc/sysconfig/syslog
    3. ----
    4. SYSLOGD_OPTIONS="-m 0 -r"
    5. ----
    6.  
    7. "local2.none""local2.*  /var/log/haproxy.log"を追加
    8. vim /etc/syslog.conf
    9. ----
    10. *.info;mail.none;authpriv.none;cron.none;local0.none;local2.none                /var/log/messages
    11.  
    12. local2.*        /var/log/haproxy.log
    13. ----
    14.  
    15. service syslog restart
  • /etc/haproxy/haproxy.cfg
    • logはnoticeにしないと、延々と「Connect from ...」が出る
    • 対象サービスが停止しているとコンソールにもログが出る
    • hostXX」の部分をホスト名やIPアドレスに書き換える
    • haproxyの先のapacheのアクセスログにはロードバランサのIPアドレスが記録されるが、元IPを記録したい場合はmod_rpafを使う
    • httpのヘルスチェック用に「/check.html」を作っておく
    • memcache:使用しないほうが良い。全キャッシュサーバが落ちてもMemcache::connect()はtrueが返ってくる。memcaheはキーのハッシュを元にサーバを決める。通常Memcache::addServer()で2台追加した場合、同一キーのキャッシュは2回目でヒットするし、容量も2倍使える。haproxyのroundrobinだとキャッシュがヒットするには最悪4アクセスかかるし、容量も1台と同じ。「balance source」なら同一IPは同じサーバを使うので2回目でヒットする。
      1. global
      2.     log         127.0.0.1 local1 notice
      3.  
      4.     chroot      /var/lib/haproxy
      5.     pidfile     /var/run/haproxy.pid
      6.     maxconn     10000
      7.     user        haproxy
      8.     group       haproxy
      9.     daemon
      10.     quiet # Do not display any message during startup.
      11.  
      12.     stats socket /var/lib/haproxy/stats
      13.  
      14. defaults
      15.     mode                    tcp
      16.     log                     global
      17.     retries                 3
      18.     timeout connect         10s
      19.     timeout client          1m
      20.     timeout server          1m
      21.  
      22. listen http
      23.     disabled
      24.     bind 0.0.0.0:80
      25.     mode http
      26.     option httpchk GET /check.html HTTP/1.0
      27.     option log-health-checks
      28.     option forwardfor # Enable insertion of the X-Forwarded-For header to requests sent to servers.
      29.     option redispatch # Enable or disable session redistribution in case of connection failure.
      30.     option httplog    # Enable logging of HTTP request, session state and timers.
      31. #    option httpclose  # KeepAlive Off
      32.     balance roundrobin
      33.     server http01 host01:80 check inter 5s fall 2
      34.     server http02 host02:80 check inter 5s fall 2
      35.  
      36. listen mysql-master
      37. #    disabled
      38.     bind 0.0.0.0:3306
      39.     mode tcp
      40.     option mysql-check
      41.     balance roundrobin
      42.     server mysql01 host01:3306 check port 3306
      43.  
      44. listen mysql-slave
      45. #    disabled
      46.     bind 0.0.0.0:3307
      47.     mode tcp
      48.     option mysql-check
      49.     balance roundrobin
      50.     server mysql02 host02:3306 check port 3306
      51.     server mysql03 host03:3306 check port 3306
      52.  
      53. listen memcache
      54.     disabled
      55.     bind 0.0.0.0:11211
      56.     mode tcp
      57.     balance source
      58.     server memcache01 host01:11211 check port 11211
      59.     server memcache02 host02:11211 check port 11211

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-01-24 (木) 17:21:32 (1916d)