サーバー設定 · 3 min read · Oct 08, 2025
2台のサーバーでXenを実行する完璧な負荷分散および高可用性Webクラスター - ページ6
12. 負荷分散装置の設定 (lb1, lb2)
12.1 負荷分散装置でのIPVSの有効化
まず、負荷分散装置でIPVSを有効にする必要があります。IPVS (IP Virtual Server) は、Linuxカーネル内でトランスポート層の負荷分散を実装しており、いわゆるLayer-4スイッチングです。
echo ip_vs_dh >> /etc/modules
echo ip_vs_ftp >> /etc/modules
echo ip_vs >> /etc/modules
echo ip_vs_lblc >> /etc/modules
echo ip_vs_lblcr >> /etc/modules
echo ip_vs_lc >> /etc/modules
echo ip_vs_nq >> /etc/modules
echo ip_vs_rr >> /etc/modules
echo ip_vs_sed >> /etc/modules
echo ip_vs_sh >> /etc/modules
echo ip_vs_wlc >> /etc/modules
echo ip_vs_wrr >> /etc/modules
次に、これを行います:
modprobe ip_vs_dh
modprobe ip_vs_ftp
modprobe ip_vs
modprobe ip_vs_lblc
modprobe ip_vs_lblcr
modprobe ip_vs_lc
modprobe ip_vs_nq
modprobe ip_vs_rr
modprobe ip_vs_sed
modprobe ip_vs_sh
modprobe ip_vs_wlc
modprobe ip_vs_wrr
12.2 負荷分散装置にUltra Monkey (パッケージ) をインストール
以下の手順で負荷分散装置にUltra Monkey (パッケージ) をインストールします:
apt-get install ipvsadm ldirectord heartbeat
12.3 負荷分散装置でのパケット転送の有効化
負荷分散装置はApacheノードにトラフィックをルーティングできる必要があります。したがって、負荷分散装置でパケット転送を有効にする必要があります。次の行を/etc/sysctl.confに追加します:
vi /etc/sysctl.conf
# パケット転送を有効にする
net.ipv4.ip_forward = 1次に、これを行います:
sysctl -p
12.4 heartbeatとldirectordの設定
次に、heartbeat用の3つの設定ファイルを作成する必要があります(いくつかのテキストエディタで編集する場合は、スペースとタブに注意してください。ldirectordは非常に厳密です!):
lb1とlb2で
vi /etc/ha.d/ha.cf
logfacility local0
bcast eth0 # Linux
mcast eth0 225.0.0.1 694 1 0
auto_failback on
node lb1.example.com
node lb2.example.com
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster重要:ノード名として、両方の出力を使用する必要があります:
uname -n
vi /etc/ha.d/haresources
lb1.example.com \
ldirectord::ldirectord.cf \
LVSSyncDaemonSwap::master \
IPaddr2::192.168.1.106/24/eth0/192.168.1.255 \
IPaddr2::192.168.1.107/24/eth0/192.168.1.255IPアドレス192.168.1.106と107は、後でウェブサイト(example.comおよびyoursite.com)に使用されます。
このファイルは、lb1またはlb2のいずれで作成を開始しても、両方のノードで同じである必要があります!
vi /etc/ha.d/authkeys
auth 3 3 md5 somerandomstring somerandomstringは、lb1とlb2の2つのheartbeatデーモンが相互に認証するために使用するパスワードです。ここに自分の文字列を使用してください。3つの認証メカニズムの中から選択できます。私はmd5を使用します。なぜなら、最も安全だと思うからです。
/etc/ha.d/authkeysはrootのみが読み取れる必要があるため、次のようにします:
chmod 600 /etc/ha.d/authkeys
ldirectordは実際の負荷分散装置です。アクティブ/パッシブ設定で2つの負荷分散装置(lb1.example.comとlb2.example.com)を構成します。これは、1つのアクティブな負荷分散装置があり、もう1つはホットスタンバイで、アクティブなものが失敗した場合にアクティブになります。これを機能させるために、ldirectord設定ファイル/etc/ha.d/ldirectord.cfを作成する必要があります。これもlb1とlb2で同一でなければなりません。
vi /etc/ha.d/ldirectord.cf
checktimeout=5
checkinterval=5
autoreload=no
logfile="/var/log/ldirectord.log"
quiescent=no
#fork=yes
#SMTP用
virtual=192.168.1.106:25
real=192.168.1.104:25 gate
fallback=192.168.1.105:25 gate
service=none
scheduler=wlc
protocol=tcp
checktype=connect
virtual=192.168.1.107:25
real=192.168.1.104:25 gate
fallback=192.168.1.105:25 gate
service=none
scheduler=wlc
protocol=tcp
checktype=connect
#DNS用 - CONNECTは動作しません。パッチが必要ですが、PINGはOKです
virtual=192.168.1.106:53
real=192.168.1.104:53 gate
fallback=192.168.1.105:53 gate
service=none
scheduler=wlc
checktype=ping
protocol=udp
virtual=192.168.1.106:53
real=192.168.1.104:53 gate
fallback=192.168.1.105:53 gate
service=dns
scheduler=wlc
checktype=ping
protocol=tcp
#HTTP用
virtual=192.168.1.106:80
real=192.168.1.104:80 gate
real=192.168.1.105:80 gate
service=http
request="ldirectord.php"
receive="MySQLに接続されました"
scheduler=wlc
protocol=tcp
checktype=negotiate
persistent=28800
virtual=192.168.1.107:80
real=192.168.1.104:80 gate
real=192.168.1.105:80 gate
service=http
request="ldirectord.php"
receive="MySQLに接続されました"
scheduler=wlc
protocol=tcp
checktype=negotiate
persistent=28800
#ウェブメール用
virtual=192.168.1.106:81
real=192.168.1.104:81 gate
fallback=192.168.1.105:81 gate
service=http
request="ldirectord.php"
receive="MySQLに接続されました"
scheduler=wlc
protocol=tcp
checktype=negotiate
virtual=192.168.1.107:81
real=192.168.1.104:81 gate
fallback=192.168.1.105:81 gate
service=http
request="ldirectord.php"
receive="MySQLに接続されました"
scheduler=wlc
protocol=tcp
checktype=negotiate
#POP3用
virtual=192.168.1.106:110
real=192.168.1.104:110 gate
fallback=192.168.1.105:110 gate
service=pop
checktype = connect
scheduler=wlc
protocol=tcp
#IMAP用
virtual=192.168.1.106:143
real=192.168.1.104:143 gate
fallback=192.168.1.105:143 gate
service=imap
scheduler=wlc
protocol=tcp
#HTTPS用
###HTTPSを使用する場合はこの部分のコメントを外してください
#virtual=192.168.1.106:443
# real=192.168.1.104:443 gate
# real=192.168.1.105:443 gate 2
# service=http
# request="ldirectord.php"
# receive="MySQLに接続されました"
# scheduler=wlc
# protocol=tcp
# checktype=negotiate
# persistent=28800
#
#virtual=192.168.1.107:443
# real=192.168.1.104:443 gate
# real=192.168.1.105:443 gate 2
# service=http
# request="ldirector.html"
# receive="テストページ"
# scheduler=wlc
# protocol=tcp
# checktype=negotiate
# persistent=28800
#IMAP SSL用
virtual=192.168.1.106:993
real=192.168.1.104:993 gate
fallback=192.168.1.105:993 gate
service=imaps
scheduler=wlc
protocol=tcp
#POP3 SSL用
virtual=192.168.1.106:995
real=192.168.1.104:995 gate
fallback=192.168.1.105:995 gate
service=pops
checktype = ping
scheduler=wlc
protocol=tcp
#MONIT監視用 #1
virtual=192.168.1.106:10001
real=192.168.1.104:10001 gate
checktype = on
#MONIT監視用 #2
virtual=192.168.1.106:20001
real=192.168.1.105:20001 gate
checktype = onvirtualはサービスの仮想IP(例:192.168.1.106および107)です。
realはクラスター内の実際のサーバーIP(192.168.1.104および105)です。
fallbackはバックアップサーバーです。実際のIPが失敗した場合、リクエストはフォールバックIPに転送されますが、負荷分散は行われません。
この設定は私の個人的な経験に基づいています。一部のサービスは負荷分散され、他のサービスはそうではありません。メールに関連するすべては負荷分散されていません。1つのメッセージが最初のサーバーに到着し、別のメッセージが別のサーバーに到着するのは望ましくありません(共有ストレージがない限り)。メールのトラフィックが非常に高くない場合、メールを負荷分散する意味はありません(しかし、依然として高可用性です)。DNSも同様です。後で、メッセージを2番目のサーバーにrsyncするので、最初のサーバーが失敗した場合のバックアップが得られます。
ポート81について。ウェブメール用に使用します。また、画像のアップロードのためにeコマースウェブサイトの管理にも使用します。後でweb1.example.comからweb2.example.comへのrsyncを設定しますが、その逆は行いません。基本的に、web2.example.comにファイルをアップロードしたくありません(共有ストレージを使用しない限り)。
この件についての詳細情報を得たい場合は、「ldirectord man」を検索してください。
その後、heartbeatのシステム起動リンクを作成し、ldirectordのリンクを削除します。なぜなら、ldirectordはheartbeatデーモンによって起動されるからです:
update-rc.d -f ldirectord remove
最後に、heartbeat(およびそれに伴いldirectord)を起動します:
/etc/init.d/ldirectord stop
/etc/init.d/heartbeat start
12.5 負荷分散装置のテスト
両方の負荷分散装置が期待通りに機能しているか確認しましょう:
ip addr sh eth0
アクティブな負荷分散装置lb1.example.comは、仮想IPアドレス(192.168.1.106および192.168.1.107)をリストする必要があります:
2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.102/24 brd 192.168.1.255 scope global eth0
inet 192.168.1.106/24 brd 192.168.1.255 scope global eth0
inet 192.168.1.107/24 brd 192.168.1.255 scope global secondary eth0ホットスタンバイ(lb2.example.com)は、次のような表示をする必要があります:
2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:34:d7:7e brd ff:ff:ff:ff:ff:ff
inet 192.168.1.103/24 brd 192.168.1.255 scope global eth0次に、試してみてください:
ldirectord ldirectord.cf status
アクティブな負荷分散装置(lb1)の出力:
ldirectord for /etc/ha.d/ldirectord.cf is running with pid: 5321ホットスタンバイ負荷分散装置(lb2)の出力:
ldirectord is stopped for /etc/ha.d/ldirectord.cf次に、ポートが正しく転送されているか確認します:
ipvsadm -L -n | grep :80
lb1.example.comでは次のような表示がされるはずです:
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.106:80 wlc
-> 192.168.1.104:80 Route 1 0 0
-> 192.168.1.105:80 Route 0 0 0
TCP 192.168.1.107:80 wlc
-> 192.168.1.104:80 Route 1 0 0
-> 192.168.1.105:80 Route 0 0 0lb2.example.comでは何も表示されないはずです。
最後のテスト:
/etc/ha.d/resource.d/LVSSyncDaemonSwap master status
アクティブな負荷分散装置の出力:
master running (ipvs_syncmaster pid: 5470)ホットスタンバイの出力:
master stopped12.6 負荷分散装置のフェイルオーバーテスト
lb1.example.com
/etc/init.d/heartbeat stop
ipvsadmコマンド:
ipvsadm -L -n | grep :80
何も出力されないはずです。
lb2.example.comで
ipvsadm -L -n | grep :80
次のように表示されるはずです:
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.106:80 wlc
-> 192.168.1.104:80 Route 1 0 0
-> 192.168.1.105:80 Route 0 0 0
TCP 192.168.1.107:80 wlc
-> 192.168.1.104:80 Route 1 0 0
-> 192.168.1.105:80 Route 0 0 0lb1.example.comでheartbeatサービスを再起動します:
/etc/init.d/heartbeat start
両方でipvsadmコマンドを再試行すると、lb1.example.comがアクティブになり、lb2.example.comがスタンバイに戻るのが見えるでしょう。
テストがうまくいった場合は、次に進むことができます。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。