0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenStack VIP(Virtual IP)を使った冗長構成テスト

Last updated at Posted at 2025-09-23

OpenStack VIP(Virtual IP)を使った冗長構成テスト

論理構成図

image.png

Step1:VIP用ポート作成

openstack port create --network train-net --fixed-ip subnet=train-net-subnet,ip-address=10.0.0.202 vip-port

vip-port という名前で train-net ネットワークに IP 10.0.0.202 を固定割り当てしたポートを作成しています。これは後で Floating IP と紐付けて VIP として使うためのポートです。

Step2:VIP ポートID取得/Floating IP を VIP ポートに紐付け

VIP_PORT_ID=$(openstack port list | awk -F '|' "/vip-port/ {gsub(/ /,\"\",\$2); print \$2}")
echo "VIP Port ID: $VIP_PORT_ID"
openstack floating ip set --port $VIP_PORT_ID 172.20.2.11

openstack port list で作成したポートを検索して Port ID を取得しています。

Step3:VM用ポート作成

openstack port create --network train-net --fixed-ip subnet=train-net-subnet,ip-address=10.0.0.200 myvma-port
openstack port create --network train-net --fixed-ip subnet=train-net-subnet,ip-address=10.0.0.201 myvms-port

myvm-a と myvm-s の VM 専用のポートを作成。それぞれ IP 10.0.0.200 / 10.0.0.201 に固定しています。この IP は VIP の背後にある実際のサーバとして機能します。

Step4:Allowed Address Pair 設定

openstack port set --allowed-address ip-address=10.0.0.202 myvma-port
openstack port set --allowed-address ip-address=10.0.0.202 myvms-port

allowed-address pair を設定して、各 VM が VIP (10.0.0.202) を自身で持てるようにしています。これがないと VM は VIP からのパケットを受け取れません。
Keepalived などで アクティブ/スタンバイ切り替えをする場合には必須設定です。

Step5:サーバ作成とポート割当

openstack server create --image Ubuntu2404 --flavor m1.small --key-name mykey --port myvma-port --user-data ~/install_httpd_act myvm-a
openstack server create --image Ubuntu2404 --flavor m1.small --key-name mykey --port myvms-port --user-data ~/install_httpd_stb myvm-s

VM を作成する際に 事前に作ったポートを指定。
--user-data で 起動時スクリプトを流し込み、HTTP サーバなどを自動インストール。
myvm-a はアクティブ用スクリプト、myvm-s はスタンバイ用スクリプトを使っています。
VIP を使った冗長構成テストに向けた設定です。

動作確認

Compute NodeからVMにログインします。VIPが設定されている事が分かります。

virsh list
virsh console instance-00000001
root@myvm-a:~# ip a show ens3
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1442 qdisc fq_codel state UP group default qlen 1000
    link/ether fa:16:3e:ae:20:56 brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    inet 10.0.0.200/24 metric 100 brd 10.0.0.255 scope global dynamic ens3
       valid_lft 42229sec preferred_lft 42229sec
    inet 10.0.0.202/32 scope global ens3
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:feae:2056/64 scope link
       valid_lft forever preferred_lft forever

クライアントからアクセスしてACTに接続している事を確認します。

[user01@ ~(train)]$ curl 172.20.2.11
OpenStack Web Server ACT

ACT⇒Standby切替
apacheを停止させる事で、ACT⇒STBに切り替えます。


root@myvm-a:~# systemctl stop apache2

クライアントからアクセスしてSTBに接続している事を確認します。
VIPが消えている事を確認します。

[user01@ ~(train)]$ curl 172.20.2.11
OpenStack Web Server STB

root@myvm-a:~# ip a show ens3
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1442 qdisc fq_codel state UP group default qlen 1000
    link/ether fa:16:3e:ae:20:56 brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    inet 10.0.0.200/24 metric 100 brd 10.0.0.255 scope global dynamic ens3
       valid_lft 42172sec preferred_lft 42172sec
    inet6 fe80::f816:3eff:feae:2056/64 scope link
       valid_lft forever preferred_lft forever

事前作業

openstack image create --disk-format qcow2 --private --file ~/Images/noble-server-cloudimg-amd64.img Ubuntu2404
openstack keypair create mykey > ~/mykey.pem
chmod 600 ~/mykey.pem
openstack security group rule list default
openstack security group rule create --proto tcp --dst-port 80 default
openstack security group rule create --proto icmp default

install_httpd_act

#!/bin/bash
timedatectl set-timezone Asia/Tokyo
echo "root:test1234" | sudo chpasswd
sudo apt upgrade
sudo apt update
sudo apt install -y apache2
echo "OpenStack Ubuntu Web Server ACT" | sudo tee /var/www/html/index.html
sudo apt update && sudo apt install -y keepalived
cat <<EOF | sudo tee /etc/keepalived/keepalived.conf
vrrp_script chk_httpd {
    script "/etc/keepalived/check_httpd.sh"
    interval 2
    weight -20
}

vrrp_instance VI_1 {
    state MASTER
    interface ens3
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.202
    }

    track_script {
        chk_httpd
    }
}i
EOF
cat <<EOF | sudo tee /etc/keepalived/check_httpd.sh
#!/bin/bash
/usr/bin/curl -sf http://127.0.0.1/ >/dev/null 2>&1 || exit 1
exit 0
EOF
chmod +x /etc/keepalived/check_httpd.sh
sudo systemctl enable --now keepalived

install_httpd_stb

#!/bin/bash
timedatectl set-timezone Asia/Tokyo
echo "root:test1234" | sudo chpasswd
sudo apt upgrade
sudo apt update
sudo apt install -y apache2
echo "OpenStack Ubuntu Web Server STB" | sudo tee /var/www/html/index.html
sudo apt update && sudo apt install -y keepalived
cat <<EOF | sudo tee /etc/keepalived/keepalived.conf
vrrp_script chk_httpd {
    script "/etc/keepalived/check_httpd.sh"
    interval 2
    weight -20
}

vrrp_instance VI_1 {
    state MASTER
    interface ens3
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.202
    }

    track_script {
        chk_httpd
    }
}i
EOF
cat <<EOF | sudo tee /etc/keepalived/check_httpd.sh
#!/bin/bash
/usr/bin/curl -sf http://127.0.0.1/ >/dev/null 2>&1 || exit 1
exit 0
EOF
chmod +x /etc/keepalived/check_httpd.sh
sudo systemctl enable --now keepalived
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?