squidで作っていた、Proxyを『keepalived』を使って、可用性を高めました!
って、お話です!
もくじ
今回の簡易構成図
イメージ的には、こんな構成を作ります。今回のキモは、『keepalived』
keepalivedで実現したいのは、可用性向上・メンテナンスの柔軟性向上です!keepalivedは、『VRRP』(Virtual Router Redundancy Protocol)を使った
『仮想IP』の切り替えを行えるミドルウェアって、考えで使います!
keepalived自体、通常LVSとしてロードバランサ用途(リバースプロキシ)で使うと思いますが。
基本的に概念としては一緒です。それをインターネット向けに使う『フォワードプロキシ』として利用します。
前提条件
まずは前提条件を整理しますね。- OS ・・・ CentOS5,6向け
- リポジトリ ・・・ EPEL
- VRRPを扱うミドルウェア ・・・ keepalived
- Proxy ・・・ squid cache(※ 既存構築済み)
- サービス監視・操作 ・・・ m/monit
- 仮想IP ・・・ 192.168.1.10
- サーバーA(Master) ・・・ 192.168.1.101
- サーバーB(Backup) ・・・ 192.168.1.102
dockerで実現したかったのですが、既存で動いているものを冗長化することが目的なので、今回は対象から外しました。
keepalived インストール
EPELのリポジトリからインストール可能です!sudo yum install keepalived --enablerepo=epel
keepalived 設定
- グローバル設定
global_defs { notification_email { abcd@example.com } notification_email_from abcd@example.com smtp_server localhost smtp_connect_timeout 30 }
- Master側
vrrp_instance VRRP1 { state BACKUP interface eth0 virtual_router_id 1 priority 200 nopreempt advert_int 1 virtual_ipaddress { 192.168.1.10 } }
- Backup側
vrrp_instance VRRP1 { state BACKUP interface eth0 virtual_router_id 2 priority 100 nopreempt advert_int 1 virtual_ipaddress { 192.168.1.10 } }
priorityが大きい方が、仮想IPを優先的に取得するそうです。
stateはどちらも『BACKUP』にしたのは、MASTERが復帰した時に仮想IPが戻らないようにです。
サービス監視の『M/Monit』をインストール
『M/Monit』は、
プロセス名、pidファイル、Portなどから、指定のプロセスを探して、
無かったら、指定のコマンド実行するミドルウェアです!
無かったら、指定のコマンド実行するミドルウェアです!
sudo yum install monit --enablerepo=epel sudo chkconfig monit on # これが起動しないと意味ないですからね!
『M/Monit』 のsquid設定
今回はCentOS5,6向け設定です。コマンドを『systemd』で書き換えれば、CentOS7も使えます。
/etc/monit.d/monit-squid.conf
check process squid with pidfile /var/run/squid.pid group squid start program = "/sbin/service squid start" stop program = "/sbin/service squid stop" if failed host localhost port 3128 then restart
『M/Monit』 のkeepalived設定
/etc/monit.d/monit-keepalived.conf
check process keepalived with pidfile /var/run/keepalived.pid start program = "/sbin/service keepalived start" stop program = "/sbin/service keepalived stop"
(Option) IP転送を有効にする
今回の使い方で、必要ない気がするけど。手順に載っていたので。(LVSとして、バックエンドに転送するときは使うのかと。。。)
# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf # sysctl -p net.ipv4.ip_forward = 1
(Option) iptablesの設定
iptablesで設定を入れている場合、vrrpのチェックのため設定を入れる必要があります!sudo iptables -A INPUT -d 224.0.0.0/255.0.0.0 -p vrrp -j ACCEPT sudo iptables -A OUTPUT -d 224.0.0.0/255.0.0.0 -p vrrp -j ACCEPT
keepalived と、M/Monit の設定はここに
githubにサンプルファイルを置いておきます。snickerjp/keepalived-squid
keepalived-squid - keepalived,squidとM/monitを使った、可用性Proxyのkeepalived設定サンプル
まとめ
- VRRPのプロトコルを使って、便利に冗長化
- これで、メンテナンスもしやすくなるし可用性も上がりました!
- なんか、他にも利用用途ありそう!