読者です 読者をやめる 読者になる 読者になる

めもぶろぐ

お勉強したこと、趣味なんかを適当に書いてます。。。

LVS | keepalived

Linux サーバ

まずはkeepalivedのインストールから。

パッケージがインストール済みか確認します。

[root@lvsf01 ~]# yum list installed | grep keepalived

 

なかったので、インストールします。

[root@lvsf01 ~]# yum -y install keepalived
読み込んだプラグイン:fastestmirror
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
base | 3.7 kB 00:00
extras | 3.4 kB 00:00
updates | 3.4 kB 00:00
updates/primary_db | 4.3 MB 00:01
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package keepalived.x86_64 0:1.2.13-5.el6_6 will be インストール
--> 依存性の処理をしています: libnetsnmpmibs.so.20()(64bit) のパッケージ: keepalived-1.2.13-5.el6_6.x86_64
--> 依存性の処理をしています: libnetsnmphelpers.so.20()(64bit) のパッケージ: keepalived-1.2.13-5.el6_6.x86_64
--> 依存性の処理をしています: libnetsnmpagent.so.20()(64bit) のパッケージ: keepalived-1.2.13-5.el6_6.x86_64
--> 依存性の処理をしています: libnetsnmp.so.20()(64bit) のパッケージ: keepalived-1.2.13-5.el6_6.x86_64
--> トランザクションの確認を実行しています。
---> Package net-snmp-libs.x86_64 1:5.5-57.el6_8.1 will be インストール
--> 依存性の処理をしています: libsensors.so.4()(64bit) のパッケージ: 1:net-snmp-libs-5.5-57.el6_8.1.x86_64
--> トランザクションの確認を実行しています。
---> Package lm_sensors-libs.x86_64 0:3.1.1-17.el6 will be インストール
--> 依存性解決を終了しました。

依存性を解決しました

======================================================================================================================================
パッケージ アーキテクチャ バージョン リポジトリー 容量
======================================================================================================================================
インストールしています:
keepalived x86_64 1.2.13-5.el6_6 base 214 k
依存性関連でのインストールをします。:
lm_sensors-libs x86_64 3.1.1-17.el6 base 38 k
net-snmp-libs x86_64 1:5.5-57.el6_8.1 updates 1.5 M

トランザクションの要約
======================================================================================================================================
インストール 3 パッケージ

総ダウンロード容量: 1.8 M
インストール済み容量: 6.1 M
パッケージをダウンロードしています:
(1/3): keepalived-1.2.13-5.el6_6.x86_64.rpm | 214 kB 00:00
(2/3): lm_sensors-libs-3.1.1-17.el6.x86_64.rpm | 38 kB 00:00
(3/3): net-snmp-libs-5.5-57.el6_8.1.x86_64.rpm | 1.5 MB 00:00
--------------------------------------------------------------------------------------------------------------------------------------
合計 1.8 MB/s | 1.8 MB 00:01
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
インストールしています : lm_sensors-libs-3.1.1-17.el6.x86_64 1/3
インストールしています : 1:net-snmp-libs-5.5-57.el6_8.1.x86_64 2/3
インストールしています : keepalived-1.2.13-5.el6_6.x86_64 3/3
Verifying : lm_sensors-libs-3.1.1-17.el6.x86_64 1/3
Verifying : keepalived-1.2.13-5.el6_6.x86_64 2/3
Verifying : 1:net-snmp-libs-5.5-57.el6_8.1.x86_64 3/3

インストール:
keepalived.x86_64 0:1.2.13-5.el6_6

依存性関連をインストールしました:
lm_sensors-libs.x86_64 0:3.1.1-17.el6 net-snmp-libs.x86_64 1:5.5-57.el6_8.1

完了しました!

 

念のため、keepalived.confの編集前にバックアップします。

[root@lvsf01 ~]# cp -a --parents /etc/keepalived/keepalived.conf /Backup

 

 では、編集へ。

 

こんなものはいい!放っておけ!まあ、使うなら設定すればいいと思います。

見たままに設定すれば、いけそう。

 1 ! Configuration File for keepalived
 2
 3 global_defs {
 4     notification_email {
 5         acassen@firewall.loc
 6         failover@firewall.loc
 7        sysadmin@firewall.loc
 8    }
 9     notification_email_from Alexandre.Cassen@firewall.loc
10    smtp_server 192.168.200.1
11    smtp_connect_timeout 30
12    router_id LVS_DEVEL
13 }
14

 

 では、本題へ参ろう。

 

死活監視向けにハッシュ取得しておきます。

[root@lvsf01 ~]# genhash -s 192.168.11.132 -p 80 -u /
MD5SUM = 13819e24749b91c35f3fcfe1c924253a

 

VRRPはまだ試さないので、コメントアウトしておきます。

15 #    vrrp_instance VI_1 {
16 #        state MASTER
17 #        interface eth0
18 #        virtual_router_id 51
19 #        priority 100
20 #        advert_int 1
21 #        authentication {
22 #            auth_type PASS
23 #            auth_pass 1111
24 #        }
25 #    virtual_ipaddress {
26 #        192.168.200.16
27 #        192.168.200.17
28 #        192.168.200.18
29 #    }
30 #}

 

で、バックエンドサーバの死活監視設定をします。

33    virtual_server 192.168.11.130 80 {
34    delay_loop 6
35    lb_algo rr
36    lb_kind NAT
37    persistence_timeout 50
38    protocol TCP
39
40    sorry_server 192.168.11.130 80
41
42    real_server 192.168.11.132 80 {
43    weight 1
44    HTTP_GET {
45        url {
46            path /index.html
47            #digest 13819e24749b91c35f3fcfe1c924253a
48        }
49    connect_timeout 3
50    nb_get_retry 3
51    delay_before_retry 3
52    }
53 }
54
55    real_server 192.168.11.133 80 {
56    weight 1
57    HTTP_GET {
58        url {
59            path /index.html
60            #digest 13819e24749b91c35f3fcfe1c924253a
61        }
62    connect_timeout 3
63    nb_get_retry 3
64    delay_before_retry 3
65    }
66 }

67
68 }

 

 なんて簡単なんだ。あとは動けばよし。

[root@lvsf01 ~]# service keepalived restart
keepalived を停止中: [ OK ]
keepalived を起動中: [ OK ]
[root@lvsf01 ~]#

 

まあ、なんだ、ipvsadmも再起動しておこう。

[root@lvsf01 ~]# service ipvsadm restart
ipvsadm: Clearing the current IPVS table: [ OK ]
ipvsadm: Unloading modules: [ OK ]
ipvsadm: Clearing the current IPVS table: [ OK ]
ipvsadm: Applying IPVS configuration: [ OK ]
[root@lvsf01 ~]#

 

あとは、仮想サーバにアクセスしてみましょう。

リアルサーバのhttpdが起動していることを確認しておきましょう。

 

で、リアルサーバ側ではどうなっているのか、/var/log/httpd/access.logを確認してみると下記のようなものが出てると思います。

192.168.11.130 - - [05/Jan/2017:09:33:12 +0900] "GET /index.html HTTP/1.0" 200 7 "-" "KeepAliveClient"

 

こんな感じで、バックエンドサーバには出力されているはずです。

設定したdelay_loop 6 の設定が思い出されます。。。

 

6秒ごとに監視されていますね。まずは第一段階クリア。

次はラウンドロビンでリクエストが振り分けられているか確認します。

バックエンドサーバのログを確認してください。

バックエンドサーバ# tail -f /var/log/httpd/access.log

 

その状態で、仮想サーバ側にアクセスしてみます。

こんな感じでね。べつにループ処理使ってもいいよ。なんでもね。

[root@lvsf01 ~]# curl http://192.168.11.130/
lvse01
[root@lvsf01 ~]# curl http://192.168.11.130/
lvse02
[root@lvsf01 ~]# curl http://192.168.11.130/
lvse01
[root@lvsf01 ~]# curl http://192.168.11.130/
lvse02
[root@lvsf01 ~]# curl http://192.168.11.130/
lvse01
[root@lvsf01 ~]# curl http://192.168.11.130/
lvse02
[root@lvsf01 ~]# curl http://192.168.11.130/
lvse01
[root@lvsf01 ~]# curl http://192.168.11.130/
lvse02
[root@lvsf01 ~]# curl http://192.168.11.130/
lvse01
[root@lvsf01 ~]# curl http://192.168.11.130/
lvse02
[root@lvsf01 ~]# curl http://192.168.11.130/
lvse01
[root@lvsf01 ~]#

 

コンテンツからもわかるし、ログからもわかります。交互に振り分けられてますね。

では、生死監視の確認です。

[root@lvsf01 ~]# for*1; do curl http://192.168.11.130/; sleep 1; done
lvse02
lvse01
lvse02
lvse01
lvse02
lvse01
lvse02
lvse01
lvse02
lvse01
lvse02
lvse01
lvse02
curl: (7) couldn't connect to host
lvse02
curl: (7) couldn't connect to host
lvse02
lvse02
lvse02
lvse02
lvse02
lvse02
lvse02
lvse02
lvse02
lvse02

 

OK。稼働してないほうには6秒間隔の監視に引っかかってからは振り分けられなくなりました。では、戻るか。というと戻りません。

 

きょうはここまで

おわり

 

 

 

 

*1:i=0;i<100;i++

広告を非表示にする