haproxy を使ってお手軽 HA 構成


haproxy はL7ロードバランサのソフトウェアです。
これによって Solr への検索要求をタダで簡単に冗長化・負荷分散することができるようになります。

haproxy インストール

$ wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.8.tar.gz
$ cd haproxy-1.4.8
$ make TARGET=linux26 <- OSのタイプを指定。READMEを参照
$ su -
# make install <- デフォルトは/usr/local。変更する場合はPREFIX=/hoge/localなど指定
# cp examples/haproxy.init /etc/init.d/haproxy
# chmod 755 /etc/init.d/haproxy
# chkconfig --add haproxy
# chkconfig haproxy on
# chkconfig --list haproxy <- 設定確認
haproxy         0:off   1:off   2:off   3:off   4:off   5:off   6:off
# vi /etc/init.d/haproxy <- /usr/sbin をすべて /usr/local/sbin に変更
# useradd -s /sbin/nologin haproxy <- 実行ユーザ追加

設定ファイル haproxy.cfg の作成

以下では 192.168.11.42:8080 で受けたリクエストを
192.168.11.41:18080、192.168.11.42:18080の2つの Solr に分配しています。

# mkdir /etc/haproxy
# vi /etc/haproxy/haproxy.cfg <- 設定ファイル haproxy.cfg の記述

global
        log 127.0.0.1   local0
        maxconn         10000
        daemon
        nbproc          1
        user            haproxy
        group           haproxy

defaults
        mode            http
        option httplog
        log             global
        clitimeout      60000
        srvtimeout      30000
        contimeout      4000
        retries         3
        #redispatch

listen  local-solr      127.0.0.1:8080
        balance         roundrobin
        option          forwardfor
        server          km-solr1 192.168.11.41:18080
        server          km-solr2 192.168.11.42:18080

listen  solr            192.168.11.42:8080
        balance         roundrobin
        option          forwardfor
        server          km-solr1 192.168.11.41:18080
        server          km-solr2 192.168.11.42:18080

haproxy の起動

# /etc/init.d/haproxy start <- 起動
# netstat -ln <- ポートが開いているのを確認
tcp        0      0 192.168.11.42:8080   0.0.0.0:*  LISTEN
tcp        0      0 127.0.0.1:8080  .0.0.0:*  LISTEN


192.168.11.42:8080に検索リクエストを投げて、クエリログが2台のサーバに交互に出ていればOKです。


参考文献
haproxy を使った Solr の冗長化・負荷分散については以下で解説されています。