#author("2017-07-23T23:20:07+09:00","default:nowsky","nowsky") #author("2017-07-23T23:21:24+09:00","default:nowsky","nowsky") *Keepalived [#e88dd0e7] -[[Keepalived:+http://www.keepalived.org/]] -[[Keepalived SYNOPSIS:+https://github.com/acassen/keepalived/blob/master/doc/keepalived.conf.SYNOPSIS]] -[[RedHat ロードバランサーの管理:+https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Load_Balancer_Administration/ch-lvs-overview-VSA.html]] LinuxでVRRPを喋る時に利用するプログラム。 非常に細かい制御が可能で、特定プロセスのトラッキング、ユニキャストVRRPも実装出来る。 また、VRRPv3に対応しているので、実行プロトコルを変更すればIPv6でVRRPも可能。 単独で利用する事は少なく、ロードバランサー(HAProxy、UltraMonkey)と組み合わせたり、 リバースプロキシ自体の冗長化として使う場合が多い。 ~ *インストール [#idb40e4e] 上記のオフィシャルにソースコードが置いてあるので、 Linuxにダウンロードして通常通りにビルドする。 # tar zxvf keepalived-1.3.5.tar.gz # cd keepalived-1.3.5 # ./configure --prefix=/usr/local/keepalived-1.3.5 # make && make install # cd /usr/local # ln -s /usr/local/keepalived-1.3.5 keepalived また、面倒な場合はパッケージ管理で導入する事も可能。 # yum install keepalived ~ *設定 [#r3f75d67] 今回は下記構成例を作成する。 前述した通り、中身はVRRPなので詳細はVRRPのRFCを見れば大体わかる。 今回は敢えてNICを分割し、それぞれでVRRPv2とVRRPv3を喋る構成だが、 デュアルスタックなどの場合はVRRPv3で設定を一纏めにする事も可能。 ・IPアドレス、NIC情報 |NIC |VRID|仮想IP |サーバ1(Backup)|サーバ2(Master)| |eth0|10 |10.0.0.254 |10.0.0.1 |10.0.0.2 | |eth1|80 |fe80::10:0:0:254|fe80::10:0:0:1 |fe80::10:0:0:2 | ・オプション定義 +HAProxyのプロセスをtrack対象とする +平文でVRRPの認証を行う +VRRP切り替え時のメール送信は行わない +自動切り戻し(preempt)を有効にする +パケット効率化の為にユニキャストVRRPを利用する +プライオリティは「サーバ1:1/サーバ2:2」とする ・実コンフィグ #region(&color(#ff0000){サーバ1(Backup)};) ## ## Mail Notification ## global_defs { notification_email { # hoge-test@gmail[.]com ## メール送信しないのでコメント # hoge-test★gmail.com ## メール送信しないのでコメント } } ## ## Process Check ## vrrp_script check_haproxy { script "pkill -0 -x haproxy" ## HAProxyのプロセスtrack設定 interval 1 ## 1秒毎に確認 fall 5 ## 5回プロセス確認が失敗したらVRRP切替 raise 10 ## 10回プロセス確認が成功したらVRRP切戻 } ## ## eth0 ## vrrp_instance eth0-ipv4 { # nopreempt ## 自動切戻(preempt)の有効化 vrrp_version 2 ## VRRPv2を利用する state BACKUP ## 常時バックアップにする事でプライオリティを優先化 interface eth0 ## VRRPv2を出力するNIC virtual_router_id 10 ## VRIDを設定 garp_master_delay 5 ## 自サーバがMasterになった後、GARP再送までの待ち時間 advert_int 1 ## VRRPパケット送信間隔。単位は秒 priority 1 ## VRRPプライオリティ unicast_src_ip 10.0.0.1 ## VRRPを送信する、送信元IPアドレス unicast_peer { 10.0.0.1 ## ユニキャストVRRP送信先(自サーバ) 10.0.0.2 ## ユニキャストVRRP送信先(他サーバ) } authentication { auth_type PASS ## VRRPに認証を追加 auth_pass vrrp_pass ## VRRPの認証パスワード。左記だと"vrrp_pass"がパスワード } virtual_ipaddress { 10.0.0.254 ## VRRP代表アドレス。所謂、仮想IPアドレス } track_script { check_haproxy ## trackスクリプトとして、HAProxyのプロセスチェックを指定 } } ## ## eth1 ## vrrp_instance eth1-ipv6 { # nopreempt ## 自動切戻(preempt)の有効化 native_ipv6 ## IPv6でVRRPパケットをやり取りする場合に設定 vrrp_version 3 ## IPv6でVRRPを実行する為に、VRRPv3を指定 state BACKUP ## 常時バックアップにする事でプライオリティを優先化 interface eth1 ## VRRPv3を出力するNIC virtual_router_id 80 ## VRIDを設定 garp_master_delay 5 ## 自サーバがMasterになった後、GARP再送までの待ち時間 advert_int 1 ## VRRPパケット送信間隔。単位は秒 priority 1 ## VRRPプライオリティ unicast_src_ip fe80::10:0:0:1 ## VRRPを送信する、送信元IPアドレス unicast_peer { fe80::10:0:0:1 ## ユニキャストVRRP送信先(自サーバ) fe80::10:0:0:2 ## ユニキャストVRRP送信先(他サーバ) } authentication { auth_type PASS ## VRRPに認証を追加 auth_pass vrrp_pass ## VRRPの認証パスワード。左記だと"vrrp_pass"がパスワード } virtual_ipaddress { fe80::10:0:0:254 ## VRRP代表アドレス。所謂、仮想IPアドレス } track_script { check_haproxy ## trackスクリプトとして、HAProxyのプロセスチェックを指定 } } #endregion #region(&color(#ff0000){サーバ2(Master)};) ## ## Mail Notification ## global_defs { notification_email { # hoge-test@gmail[.]com ## メール送信しないのでコメント # hoge-test★gmail.com ## メール送信しないのでコメント } } ## ## Process Check ## vrrp_script check_haproxy { script "pkill -0 -x haproxy" ## HAProxyのプロセスtrack設定 interval 1 ## 1秒毎に確認 fall 5 ## 5回プロセス確認が失敗したらVRRP切替 raise 10 ## 10回プロセス確認が成功したらVRRP切戻 } ## ## eth0 ## vrrp_instance eth0-ipv4 { # nopreempt ## 自動切戻(preempt)の有効化 vrrp_version 2 ## VRRPv2を利用する state BACKUP ## 常時バックアップにする事でプライオリティを優先化 interface eth0 ## VRRPv2を出力するNIC virtual_router_id 10 ## VRIDを設定 garp_master_delay 5 ## 自サーバがMasterになった後、GARP再送までの待ち時間 advert_int 1 ## VRRPパケット送信間隔。単位は秒 priority 2 ## VRRPプライオリティ unicast_src_ip 10.0.0.2 ## VRRPを送信する、送信元IPアドレス unicast_peer { 10.0.0.1 ## ユニキャストVRRP送信先(他サーバ) 10.0.0.2 ## ユニキャストVRRP送信先(自サーバ) } authentication { auth_type PASS ## VRRPに認証を追加 auth_pass vrrp_pass ## VRRPの認証パスワード。左記だと"vrrp_pass"がパスワード } virtual_ipaddress { 10.0.0.254 ## VRRP代表アドレス。所謂、仮想IPアドレス } track_script { check_haproxy ## trackスクリプトとして、HAProxyのプロセスチェックを指定 } } ## ## eth1 ## vrrp_instance eth1-ipv6 { # nopreempt ## 自動切戻(preempt)の有効化 native_ipv6 ## IPv6でVRRPパケットをやり取りする場合に設定 vrrp_version 3 ## IPv6でVRRPを実行する為に、VRRPv3を指定 state BACKUP ## 常時バックアップにする事でプライオリティを優先化 interface eth1 ## VRRPv3を出力するNIC virtual_router_id 80 ## VRIDを設定 garp_master_delay 5 ## 自サーバがMasterになった後、GARP再送までの待ち時間 advert_int 1 ## VRRPパケット送信間隔。単位は秒 priority 2 ## VRRPプライオリティ unicast_src_ip fe80::10:0:0:2 ## VRRPを送信する、送信元IPアドレス unicast_peer { fe80::10:0:0:1 ## ユニキャストVRRP送信先(他サーバ) fe80::10:0:0:2 ## ユニキャストVRRP送信先(自サーバ) } authentication { auth_type PASS ## VRRPに認証を追加 auth_pass vrrp_pass ## VRRPの認証パスワード。左記だと"vrrp_pass"がパスワード } virtual_ipaddress { fe80::10:0:0:254 ## VRRP代表アドレス。所謂、仮想IPアドレス } track_script { check_haproxy ## trackスクリプトとして、HAProxyのプロセスチェックを指定 } } #endregion