CloudStackでLVS(Linux Virtual Server) -keepalivedを利用編
概要
前回、前々回とCloudStackのVMを使ってLVS(Linux Virtual Server)を構成してみました。
- ipvsadmを利用
CloudStackでLVS(Linux Virtual Server) - mukkun0824’s blog
- Ldirectordを利用
CloudStackでLVS(Linux Virtual Server) -Ldirectordを利用編 - mukkun0824’s blog
ただ、上記の構成だとlvsは1台しかなく、lvsの1台がダウンすると終わりなので、lvsを2台構成にします。その2台の疎通にはkeepalivedを利用します。 これもLPIC304の勉強がてらCentos7で構築しています。
参考
CentOS 7 : LVS + Keepalived の設定 : Server World
構成
構成は以下のようになります。VIPなどは変わりません。Ldirectordではなく、ipvsadmをそのまま利用します。
(internet) | | グローバルIP +---------+-----------+ | Virtual Router | +---------+-----------+ | 192.168.0.1/24 GW | VIP:192.168.0.100/24 | +-----------+ | +------------+ | lvs1 |192.168.0.223/24|192.168.0.104/24 | lvs2 | |keepalived +------------+---------------------+ keepalived | | |eth0 | eth0 | | +-----------+ | +------------+ | | +------------+ | +------------+ | Backend01 |192.168.0.62/24| 192.168.0.243/24| Backend02 | | Web Server +------------+--------------------+ Web Server | | |eth0 eth0 | | +------------+ +------------+
lvsサーバー:インストール・設定
cloudStackでの操作
(1) 事前にセカンダリIP192.168.0.100を付けておく。
(2) グローバルIPのNATの設定で、セカンダリIP 192.168.0.100へNAT設定しておく(送信元NATのグローバルIPではなく、別で用意する)
firewalld 止める
systemctl status firewalld.service systemctl stop firewalld.service systemctl disable firewalld.service systemctl status firewalld.service
インストール・設定
lvs1、lvs2共に以下の作業を行います。
yum -y install ipvsadm keepalived echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf sysctl -p touch /etc/sysconfig/ipvsadm systemctl start ipvsadm systemctl enable ipvsadm cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.org
設定が残っている場合は-Cでクリアしておく。
ipvsadm -C ipvsadm -l IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn
keepalivedの設定
これもlvs1、lvs2共に以下の作業を行います。 以下のように設定ファイルを編集します。lvs1とlvs2の設定ファイルの差分は、「priority」のところだけです。どちらか(優先度をあげたい方)を高めにしておきます。今回はIPをNATしないので、DR(ダイレクトルーティング)で行います。
ちなみに、VRRP はVirtualRouterRedundancyProtocolのことで、ルーター間の疎通監視プロトコルのことです。死活監視できるメソッドは以下の通りです。
[root@mukkun-lvs1 ~]# cat /etc/keepalived/keepalived.conf global_defs { } vrrp_instance VI_1 { # 両方でバックアップとする(プライオリティで制御する) state BACKUP # 監視させるインターフェース interface eth0 # 仮想ルータのID virtual_router_id 51 # プライオリティ (双方のサーバーで値を変更) # (値の大きい方が優先度が高くなる) priority 100 # プライオリティが高い方へ復帰しない nopreempt # VRRP送信間隔 advert_int 1 # VRRPをやり取りする際の認証情報 authentication { auth_type PASS auth_pass mukkun-test } virtual_ipaddress { # 仮想IPアドレス 192.168.0.100/24 dev eth0 } } virtual_server 192.168.0.100 80 { # 監視する間隔 delay_loop 3 # 負荷分散方式 lvs_sched rr # パケットの転送方式 lvs_method DR protocol TCP # バックエンドサーバー#1 real_server 192.168.0.62 80 { weight 1 HTTP_GET { url { # 監視先URL path / # 正常な場合のステータスコード status_code 200 } # タイムアウト時間(秒) connect_timeout 3 } } # バックエンドサーバー#2 real_server 192.168.0.243 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 3 } } }
サービス起動
lvs1でサービス起動
[root@mukkun-lvs1 ~]# systemctl start keepalived
lvs2でもサービス起動
[root@mukkun-lvs2 ~]# systemctl start keepalived
2台のLVSサーバーのkeepalivedのサービスをあげると「priority」を高めに設定した方のサーバーにVIPがつきます。
[root@mukkun-lvs1 ~]# ip -4 a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 192.168.0.223/24 brd 192.168.0.255 scope global eth0 valid_lft forever preferred_lft forever inet 192.168.0.100/24 scope global secondary eth0 valid_lft forever preferred_lft forever
lvs1のkeepalivedを止めるとlvs2にVIPが動きます。バックエンドへの通信は問題ありません。
[root@mukkun-lvs2 ~]# ip -4 a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 192.168.0.104/24 brd 192.168.0.255 scope global eth0 valid_lft forever preferred_lft forever inet 192.168.0.100/24 scope global secondary eth0 valid_lft forever preferred_lft forever
BackEndServer:設定
BackEnd(リアルサーバー)側の設定は前回と変更なしです。
これで前回と同じようにグローバルIPでWebアクセスすると2台に負荷分散されます。lvs1をダウンさせるとlvs2に処理が移行し、Webアクセスは問題ありません。CloudStack的にはlvs1のVIP(192.168.0.100/24)として静的NATしているのですが、lvs1を落としてもlvs2にNATしてくれます。