DigiLoog

PC関係の事なら何でもいけるそんな処

冗長構成で負荷分散Proxyを構築 [Corosync/Pacemaker/HAProxy/Squid]

2014年12月14日(日) - 22:08 | カテゴリ: Linux

今回は久々に本気の冗長構成を作ってみた。

事の発端はテストとして構築したProxy(Squid)が片肺運転だった為。
その為、自分でProxyを使っていても仮想環境の基盤側を弄る度にWebブラウザのProxyを外す必要があった。
しかし、んな事を毎回やるのも面倒臭くなり、
「だったら、自鯖1号2号で冗長Proxy作っちまえばいいか!!」と軽く考えたのは2ヶ月前(´・ω・`)

という事で、2台以上で冗長化を視野にいれつつ、ついでに負荷分散の仕組みも入れて構築してみた。


※トポロジアイコンにINTEROP 2014の物を使わせて頂きました。
今回の構成は上図参照。綺麗な構成図だろ… これ自宅(寝室)なんだぜ…
L2SW(緑のアイコン)間はEthernetChannelを組んでおき、ルータ間はHSRPを使用。
肝となる負荷分散にはHAProxyを二台構成に、HAProxyの代表IPとしてPacemakerによるEIP振り分けを行った。

構築方法メモ

今回はメールシステムを組んだ時以来の難航作業だった(´・ω:;.:…
というのも、何処を探してもPacemaker+HeartBeatの構成は見つかるのだが、
具体的なPacemaker+Corosyncの構成が見つからなかった。

なんでCorosyncに拘ったのかと言うと、今回の構築ディストリがCentOS7であり、
yumで突っ込めるのがPacemaker+Corosyncだった為。
「yumでバイナリが用意されている = ソースから入れる事も可能」という安直な発想から突撃をしてみた。
その結果、1からドキュメントを読み直し、ソースをビルドし、ミドルウェアを連携させ、
コンフィグとinit(systemd)も自作するという果てしない道のりを歩んでしまった。

一番大変だったのは、Corosyncのビルド。はい。初っぱなから躓きました…
自分はソースビルドを行う時はprefix指定を行い、その中に全部突っ込むやり方をよくやるのだが、
Corosync+Pacemakerの場合は一部インストールディレクトリを変更してやる必要があった。
また、今回使うミドルウェア群はローレベルで読み込ませる必要もある為、
バイナリも"/usr/sbin"から拾える状態にする必要があったりと、
今までに自分の経験した事の無い構築手法をやる必要が出てきてしまった。

結果としては、prefix指定を行いながらも"/usr/sbin"からシンボリックリンクを張る方向で
なんとか落ち着かせる事ができ、バージョン管理(切り戻しなど)も行える構成に持って行けた。

………

冗長構成を組む際、本来ならインターリンクを使って本気で作ってやる必要があるのだが、
今回はNICが物理的に足りなかったり、単純な負荷分散装置としてProxy以外でも使いたかった為、
敢えて1物理鯖1NIC構成で構築を行った。結果として、これがまた面倒な事になった……(´・ω・`)

Pacemakerでインターリンクを使わない場合、クラスタノードを探しだす処理にマルチキャストを使うのだが、
"ns-lab BB"の鯖では諸事情でマルチキャストを全遮断しているので、上記の構成が使えなかった。
その為、今回はユニキャストによる決め打ちでノードを探し出す設定に変更。
ユニキャストの設定方法は色々と見つかり、例を元にアレンジも加えつつコンフィグ作成を行ったのだが、
いざPacemakerとCorosyncを起動してもcrmshでノードが拾えないという始末。

駄目だった原因はcrmshより上位層である、
そもそものPacemaker+Corosync連携でミスっていたという悲劇。
この原因を突き止める為に3週間くらいかかってしまった。

………

そんなこんなでcrmshとpcsのどっちを使うか問題とか、
Pacemakerで割り当てたEIPにping送っても戻りが無くて、(´・ω・`)としていたりとか、
色々と回り道をしつつも、なんとか冗長負荷分散Proxyを常用可能なレベルまで持っていく事が出来た。

冗長構成+負荷分散を一度でも構築した経験があれば、
NAT環境下でのサーバ冗長化も工夫次第で作れるし、色々と良い経験になった。

"ns-lab BB"配下は、シングル構成なシステムも何個かあるので、
これを気にシングル構成脱却を行っていきたい所。





  • 応援中

    はじめるセカイの理想論 -goodbye world index-