- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2017-07-23T22:28:17+09:00","default:nowsky","nowsky")
*Raspbian [#e88dd0e7]
-[[Raspbian:+https://www.raspberrypi.org/downloads/raspbian/]]
#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]]
Raspberry Pi用としてメンテナンスされているDebian系ディストリビューションの一つ。
Debian系なのでAPT(apt-get)を利用してパッケージをインストールする事が出来る。
初期設定を簡素化する為にRaspbian特有のシェルスクリプトが準備されており、
Linux初心者でも楽に最低限のOS設定をする事が出来るようになっている。
LinuxでVRRPを喋る時に利用するプログラム。
非常に細かい制御が可能で、特定プロセスのトラッキング、ユニキャストVRRPも実装出来る。
また、VRRPv3に対応しているので、実行プロトコルを変更すればIPv6でVRRPも可能。
単独で利用する事は少なく、ロードバランサー(HAProxy、UltraMonkey)と組み合わせたり、
リバースプロキシ自体の冗長化として使う場合が多い。
~
*イメージバックアップ [#idb40e4e]
Raspberry PiではSDカードにOSをインストールする事を前提としている為、
ddコマンドによるイメージバックアップ・リストアが簡単に実行できるが、
小さい容量のSDカードへリストアすると、SDカード容量不足でddが欠落してしまう。
*インストール [#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
よって、Raspberry Pi(Raspbian)では専用のOSコピー(バックアップ)コマンドが用意されており、
こちらを利用する方が正確にコピーを取得する事が出来る。
また、面倒な場合はパッケージ管理で導入する事も可能。
# yum install keepalived
~
*設定 [#r3f75d67]
今回は下記構成例を作成する。
前述した通り、中身はVRRPなので詳細はVRRPのRFCを見れば大体わかる。
今回は敢えてNICを分割し、それぞれでVRRPv2とVRRPv3を喋る構成だが、
デュアルスタックなどの場合はVRRPv3で設定を一纏めにする事も可能。
#region(&color(#ff0000){rpi-clone};)
-&font(b){参考サイト};
[[billw2/rpi-clone:+https://github.com/billw2/rpi-clone]]
[[Raspberry PiでIoTなシステム開発:+http://www.homu.net/raspberry-pi%E3%81%A7iot%E3%81%AA%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E9%96%8B%E7%99%BA%EF%BC%9Asd%E3%82%AB%E3%83%BC%E3%83%89%E3%81%AE%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E3%81%AFrpi/]]
・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 |
-&font(b){コマンド実行};
バックアップ取得前に、コピー先SDカードをRaspberry Piに接続しておく。
今回はSDカードが、&color(#ff0000){"/dev/sda"};に接続されているとする。
# git clone https://github.com/billw2/rpi-clone
# ./rpi-clone sda -f
---
Do you want to initialize the destination disk /dev/sda? (yes/no): "yes"
You may enter a label for the destination rootfs /dev/sda2: [Enter]
Final check, is it Ok to proceed with the clone (yes/no)?: "yes"
Starting the filesystem rsync to sda
(This may take several minutes)...
---
Hit Enter when ready to unmount the /dev/sda partitions... [Enter]
unmounting /mnt/clone/boot
unmounting /mnt/clone
・オプション定義
+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 ## メール送信しないのでコメント
}
}
##
## 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 ## メール送信しないのでコメント
}
}
##
## 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