Linux köprü: VRRP kullanarak yüksek kullanılabilirlik

Linux köprü: VRRP kullanarak yüksek kullanılabilirlik

Bu mimari örneği, self-servis yayına alma sunucusunu, keepalived yoluyla Sanal Yönlendirici Yedekleme Protokolünü (VRRP) kullanarak yüksek kullanılabilirlik mekanizması ile zenginleştirir ve self servis ağlar için yönlendirme yük devretmesini sağlar. VRRP, bir ana (etkin) sunucuyu ve her yönlendiricinin en az bir yedek kopyasını oluşturduğu için, en az iki ağ düğümü gerektirir.

Normal çalışma sırasında ana yönlendirici üzerindeki “keepalived”, belirli bir proje için tüm VRRP yönlendiricilerini birbirine bağlayan gizli bir ağa heartbeat paketlerini periyodik olarak iletir. VRRP yönlendiricileriyle yapılan her proje ayrı bir gizli ağ kullanır. Varsayılan olarak bu ağ, ml2_conf.ini dosyasındaki tenant_network_types seçeneğindeki ilk değeri kullanır. Ek kontrol için, neutron.conf dosyasındaki l3_ha_network_name ve l3_ha_network_name seçeneklerini kullanarak gizli ağ için self servis ağ türünü ve fiziksel ağ adını belirtebilirsiniz.

Yedekleme yönlendiricisinde keepalived, heartbeat paketlerini almayı durdurursa, ana yönlendiricinin başarısız olduğunu varsayar ve qrouter ad alanındaki arabirimlerdeki IP adreslerini yapılandırarak yedek yönlendiriciyi ana yönlendiriciye yönlendirir. Birden fazla yedek yönlendirici bulunan ortamlarda, bir sonraki en yüksek önceliği olan yedek yönlendirici üzerindeki keepalived, yedek yönlendiriciyi ana yönlendiriciye yönlendirir.

Not

Bu yüksek kullanılabilirlik mekanizması, tüm yönlendiriciler için aynı öncelik kullanan VRRP’yi yapılandırır. Bu nedenle VRRP, ana yönlendiriciye en yüksek IP adresine sahip yedek yönlendiriciyi tanıtır.

Uyarı

keepalived v1.2.15 ve daha öncesinde max_l3_agents_per_router değeri 3 veya daha fazla olarak ayarlandığında paket kaybına neden olabileceği bilinen bir hata var. Bu nedenle, bu özelliği kullanırken keepalived v1.2.16 veya daha üst sürüme yükseltmenizi öneririz.

Ağ düğümleri arasındaki VRRP heartbeat trafiğinin kesilmesi, genellikle bir ağ arabirimi veya fiziksel ağ altyapısı hatası nedeniyle bir yerine çalışma tetikler. Katman-3 aracısını yeniden başlatın veya başarısız olursa, keepalived olanağı sağlayan bir yük devretme işlemi devreye girmez.

Ortamınızdaki pratikliği belirlemek için bu yüksek kullanılabilirlik mekanizmasının aşağıdaki özelliklerini göz önünde bulundurun:

  • Belirli bir yönlendirici kullanan self-servis ağlarındaki sunucu ağ trafiği, yalnızca o yönlendiricinin ana sunucuya geçmektedir. Böylece, belirli bir ağ düğümünün kaynak sınırlamaları, yerine çalışma için başka bir ağ düğümüne tetikleme yapmadan bu ağ düğümündeki yönlendiricilerin tüm ana sunucularını etkileyebilir. Bununla birlikte, herhangi bir ağ düğümünde kaynak çekişme olasılığını azaltmak için zamanlayıcıyı, her bir yönlendiricinin ana ana sunucusunu ağ düğümleri havuzunda eşit olarak dağıtacak şekilde yapılandırabilirsiniz.
  • Yalnızca bir yönlendirici kullanarak self servis ağları destekler. Sağlayıcı ağları katman-2’de çalışır ve yedeklilik için fiziksel ağ altyapısına dayanır.
  • Yüzen bir IPv4 adresine sahip sunucular için, yerine çalışma esnasında ağ bağlantılarının durumunu 1:1 statik NAT’nin bir yan etkisi olarak korur. Mekanizma aslında bağlantı takibi uygulamıyor.

Gerçek sistem kurulumları için, bir ağ düğümü başarısız olursa, tüm çevre için ağ trafiğini işlemek için yeterli kaynağa sahip en az üç ağ düğümünü öneriyoruz. Ayrıca, geriye kalan iki düğüm yedeklilik sağlamaya devam edebilir.

Uyarı

Bu yüksek kullanılabilirlik mekanizması katman-2 nüfus mekanizması ile uyumlu değildir. linuxbridge_agent.ini dosyasındaki katman 2 popülasyonunu devre dışı bırakmalı ve örnek konfigürasyonu yayına almadan önce tüm mevcut ağdaki Linux köprü aracısını ve hesaplama düğümlerini yeniden başlatmalısınız.

Önkoşullar

Aşağıdaki bileşenleri içeren bir ağ düğümü ekleyin:

  • Üç ağ arabirimi: yönetim, sağlayıcı ve yer paylaşımı.
  • OpenStack Ağ katmanı-2 aracı, katman-3 aracı ve herhangi bir bağımlılık.

Not

DHCP ve meta veri aracısını her hesaplama düğümünde tutabilir veya ağ düğümlerine taşıyabilirsiniz.

Mimari

High-availability using Linux bridge with VRRP - overview

Aşağıdaki resim, bir self-servis ağı ve bir etiketsiz (düz) ağ için bileşenleri ve bağlantıyı göstermektedir. Ana yönlendirici, ağ düğümü 1’de bulunur. Bu durumda, sunucu, ağ için DHCP aracı ile aynı hesaplama düğümünde bulunur. DHCP aracı başka bir hesaplama düğümünde bulunuyorsa, sonuncusu yalnızca bir DHCP ad alanı ve yer paylaşımı fiziksel ağ arayüzünde bir bağlantı noktası olan Linux köprüsü içerir.

High-availability using Linux bridge with VRRP - components and connectivity - one network

Örnek yapılandırma

Aşağıdaki örnek yapılandırmayı, self servis ağları destekleyen mevcut bir operasyonel ortama VRRP kullanarak yüksek kullanılabilirlik desteği eklemek için bir şablon olarak kullanın.

Denetleyici düğüm

  1. neutron.conf dosyasında:

    • VRRP’yi etkinleştir.

      [DEFAULT]
      l3_ha = True
      
  2. Aşağıdaki servisleri yeniden başlatın:

    • Sunucu

Ağ düğümü 1

Değişiklik yok.

Ağ düğümü 2

  1. Ağ servisi Linux köprü katman-2 ajanı ve katman-3 ajanı kur.

  2. neutron.conf dosyasında, genel seçenekleri yapılandırın:

    [DEFAULT]
    core_plugin = ml2
    auth_strategy = keystone
    
    [database]
    # ...
    
    [keystone_authtoken]
    # ...
    
    [nova]
    # ...
    
    [agent]
    # ...
    

    [DEFAULT], [database], [keystone_authtoken], [nova], ve [agent] bölümleri için uygun ek yapılandırmaları bulmak için OpenStack sürümünüze göre Kurulum Dökümanları ve Kılavuzları ve Yapılandırma Kılavuzu belgelerine bakın.

  3. linuxbridge_agent.ini dosyasında, katman-2 ajanını yapılandır.

    [linux_bridge]
    physical_interface_mappings = provider:PROVIDER_INTERFACE
    
    [vxlan]
    enable_vxlan = True
    local_ip = OVERLAY_INTERFACE_IP_ADDRESS
    
    [securitygroup]
    firewall_driver = iptables
    

    Sağlayıcı ağları barındıran ilgili arabirimin adı ile PROVIDER_INTERFACE``i yer değiştirin. Örnek, ``eth1.

    ``OVERLAY_INTERFACE_IP_ADDRESS``i self servis ağları için VXLAN yer paylaşımlarını yöneten arabirimin IP adresiyle değiştirin.

  4. l3_agent.ini dosyasında, katman-3 ajanını yapılandır.

    [DEFAULT]
    interface_driver = linuxbridge
    external_network_bridge =
    

    Not

    external_network_bridge seçeneğinin değeri bilerek boş bırakılmıştır.

  5. Aşağıdaki servisleri başlatın:

    • Linux köprü ajanı
    • Katman-3 ajanı

Hesaplama düğümleri

Değişiklik yok.

Servis işlemini doğrula

  1. Yönetimsel proje kimlik bilgilerini kaynak olarak verin.

  2. Ajanların varlığını ve işlevini doğrula.

    $ openstack network agent list
    +--------------------------------------+--------------------+----------+-------------------+-------+-------+---------------------------+
    | ID                                   | Agent Type         | Host     | Availability Zone | Alive | State | Binary                    |
    +--------------------------------------+--------------------+----------+-------------------+-------+-------+---------------------------+
    | 09de6af6-c5f1-4548-8b09-18801f068c57 | Linux bridge agent | compute2 |                   | True  | UP    | neutron-linuxbridge-agent |
    | 188945d1-9e70-4803-a276-df924e0788a4 | Linux bridge agent | compute1 |                   | True  | UP    | neutron-linuxbridge-agent |
    | e76c440d-d5f6-4316-a674-d689630b629e | DHCP agent         | compute1 | nova              | True  | UP    | neutron-dhcp-agent        |
    | e67367de-6657-11e6-86a4-931cd04404bb | DHCP agent         | compute2 | nova              | True  | UP    | neutron-dhcp-agent        |
    | e8174cae-6657-11e6-89f0-534ac6d0cb5c | Metadata agent     | compute1 |                   | True  | UP    | neutron-metadata-agent    |
    | ece49ec6-6657-11e6-bafb-c7560f19197d | Metadata agent     | compute2 |                   | True  | UP    | neutron-metadata-agent    |
    | 598f6357-4331-4da5-a420-0f5be000bec9 | L3 agent           | network1 | nova              | True  | UP    | neutron-l3-agent          |
    | f4734e0f-bcd5-4922-a19d-e31d56b0a7ae | Linux bridge agent | network1 |                   | True  | UP    | neutron-linuxbridge-agent |
    | 670e5805-340b-4182-9825-fa8319c99f23 | Linux bridge agent | network2 |                   | True  | UP    | neutron-linuxbridge-agent |
    | 96224e89-7c15-42e9-89c4-8caac7abdd54 | L3 agent           | network2 | nova              | True  | UP    | neutron-l3-agent          |
    +--------------------------------------+--------------------+----------+-------------------+-------+-------+---------------------------+
    

Başlangıç ağları oluştur

Self-servis kurulum örneğine benzer şekilde, bu yapılandırma birden fazla VXLAN self-servis ağını desteklemektedir. Yüksek kullanılabilirlik sağlandıktan sonra, tüm ek yönlendiriciler VRRP’yi kullanıyor. Aşağıdaki prosedür, ilave bir self-servis ağı ve yönlendirici oluşturur. Ağ hizmeti, mevcut yönlendiricilere yüksek kullanılabilirlik eklemeyi de destekliyor. Bununla birlikte, bu yordam, idari olarak devre dışı bırakmayı ve bu yönlendiricideki arabirimlerle self servis ağlar için ağ bağlantısını geçici olarak kesen her yönlendiriciyi etkinleştirmeyi gerektirir.

  1. Normal (idari olmayan) bir proje kimlik bilgisi kaynağı.

  2. Bir self-servis ağı oluştur.

    $ openstack network create selfservice2
    +-------------------------+--------------+
    | Field                   | Value        |
    +-------------------------+--------------+
    | admin_state_up          | UP           |
    | mtu                     | 1450         |
    | name                    | selfservice2 |
    | port_security_enabled   | True         |
    | router:external         | Internal     |
    | shared                  | False        |
    | status                  | ACTIVE       |
    +-------------------------+--------------+
    
  3. Self-servis ağı üzerinde bir IPv4 alt ağı oluştur.

    $ openstack subnet create --subnet-range 198.51.100.0/24 \
      --network selfservice2 --dns-nameserver 8.8.4.4 selfservice2-v4
    +-------------------+------------------------------+
    | Field             | Value                        |
    +-------------------+------------------------------+
    | allocation_pools  | 198.51.100.2-198.51.100.254  |
    | cidr              | 198.51.100.0/24              |
    | dns_nameservers   | 8.8.4.4                      |
    | enable_dhcp       | True                         |
    | gateway_ip        | 198.51.100.1                 |
    | ip_version        | 4                            |
    | name              | selfservice2-v4              |
    +-------------------+------------------------------+
    
  4. Self-servis ağı üzerinde bir IPv6 alt ağı oluştur.

    $ openstack subnet create --subnet-range fd00:198:51:100::/64 --ip-version 6 \
      --ipv6-ra-mode slaac --ipv6-address-mode slaac --network selfservice2 \
      --dns-nameserver 2001:4860:4860::8844 selfservice2-v6
    +-------------------+--------------------------------------------------------+
    | Field             | Value                                                  |
    +-------------------+--------------------------------------------------------+
    | allocation_pools  | fd00:198:51:100::2-fd00:198:51:100:ffff:ffff:ffff:ffff |
    | cidr              | fd00:198:51:100::/64                                   |
    | dns_nameservers   | 2001:4860:4860::8844                                   |
    | enable_dhcp       | True                                                   |
    | gateway_ip        | fd00:198:51:100::1                                     |
    | ip_version        | 6                                                      |
    | ipv6_address_mode | slaac                                                  |
    | ipv6_ra_mode      | slaac                                                  |
    | name              | selfservice2-v6                                        |
    +-------------------+--------------------------------------------------------+
    
  5. Bir yönlendirici oluştur.

    $ openstack router create router2
    +-----------------------+---------+
    | Field                 | Value   |
    +-----------------------+---------+
    | admin_state_up        | UP      |
    | name                  | router2 |
    | status                | ACTIVE  |
    +-----------------------+---------+
    
  6. Yönlendirici üzerinde arabirim olarak IPv4 ve IPv6 alt ağları ekle.

    $ openstack router add subnet router2 selfservice2-v4
    $ openstack router add subnet router2 selfservice2-v6
    

    Not

    Bu komut hiç çıktı üretmedi.

  7. Yönlendirici üzerine bir sağlayıcı ağı geçit olarak ekleyin.

    $ neutron router-gateway-set router2 provider1
    Set gateway for router router2
    

Ağ işlemlerini doğrula

  1. Yönetimsel proje kimlik bilgilerini kaynak olarak verin.

  2. VRRP heartbeat trafiğini işleyen dahili yüksek kullanılabilirlikli ağın oluşturulmasını doğrulayın.

    $ openstack network list
    +--------------------------------------+----------------------------------------------------+--------------------------------------+
    | ID                                   | Name                                               | Subnets                              |
    +--------------------------------------+----------------------------------------------------+--------------------------------------+
    | 1b8519c1-59c4-415c-9da2-a67d53c68455 | HA network tenant f986edf55ae945e2bef3cb4bfd589928 | 6843314a-1e76-4cc9-94f5-c64b7a39364a |
    +--------------------------------------+----------------------------------------------------+--------------------------------------+
    
  3. Her ağ düğümünde, aynı ID ile qrouter ad alanının oluşumunu doğrulayın.

    Ağ düğümü 1:

    # ip netns
    qrouter-b6206312-878e-497c-8ef7-eb384f8add96
    

    Ağ düğümü 2:

    # ip netns
    qrouter-b6206312-878e-497c-8ef7-eb384f8add96
    

    Not

    Yönlendirici 1 için Linux köprü: Self-servis ağları ad alanı, yalnızca VRRP’yi etkinleştirmeden önce oluşturma nedeniyle ağ düğümü 1’de görünmelidir.

  4. Her ağ düğümünde, arayüzlerin IP adresini qrouter ad alanına gösterin. VRRP arabirimi hariç, ana yönlendirici sunucusuna ait yalnızca bir ad alanı arabirimlerdeki IP adreslerini içerir.

    Ağ düğümü 1:

    # ip netns exec qrouter-b6206312-878e-497c-8ef7-eb384f8add96 ip addr show
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    2: ha-eb820380-40@if21: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default qlen 1000
        link/ether fa:16:3e:78:ba:99 brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet 169.254.192.1/18 brd 169.254.255.255 scope global ha-eb820380-40
           valid_lft forever preferred_lft forever
        inet 169.254.0.1/24 scope global ha-eb820380-40
           valid_lft forever preferred_lft forever
        inet6 fe80::f816:3eff:fe78:ba99/64 scope link
           valid_lft forever preferred_lft forever
    3: qr-da3504ad-ba@if24: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default qlen 1000
        link/ether fa:16:3e:dc:8e:a8 brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet 198.51.100.1/24 scope global qr-da3504ad-ba
           valid_lft forever preferred_lft forever
        inet6 fe80::f816:3eff:fedc:8ea8/64 scope link
           valid_lft forever preferred_lft forever
    4: qr-442e36eb-fc@if27: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default qlen 1000
        link/ether fa:16:3e:ee:c8:41 brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet6 fd00:198:51:100::1/64 scope global nodad
           valid_lft forever preferred_lft forever
        inet6 fe80::f816:3eff:feee:c841/64 scope link
           valid_lft forever preferred_lft forever
    5: qg-33fedbc5-43@if28: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether fa:16:3e:03:1a:f6 brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet 203.0.113.21/24 scope global qg-33fedbc5-43
           valid_lft forever preferred_lft forever
        inet6 fd00:203:0:113::21/64 scope global nodad
           valid_lft forever preferred_lft forever
        inet6 fe80::f816:3eff:fe03:1af6/64 scope link
           valid_lft forever preferred_lft forever
    

    Ağ düğümü 2:

    # ip netns exec qrouter-b6206312-878e-497c-8ef7-eb384f8add96 ip addr show
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    2: ha-7a7ce184-36@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default qlen 1000
        link/ether fa:16:3e:16:59:84 brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet 169.254.192.2/18 brd 169.254.255.255 scope global ha-7a7ce184-36
           valid_lft forever preferred_lft forever
        inet6 fe80::f816:3eff:fe16:5984/64 scope link
           valid_lft forever preferred_lft forever
    3: qr-da3504ad-ba@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default qlen 1000
        link/ether fa:16:3e:dc:8e:a8 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    4: qr-442e36eb-fc@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default qlen 1000
    5: qg-33fedbc5-43@if15: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether fa:16:3e:03:1a:f6 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    

    Not

    Ana yönlendirici, ağ düğümü 2’de bulunabilir.

  5. Ek self-servis ağında bir arabirimle bir sunucuyu başlatın. Örneğin, flavor ID 1’i kullanan bir CirrOS imajı.

    $ openstack server create --flavor 1 --image cirros --nic net-id=NETWORK_ID selfservice-instance2
    

    ``NETWORK_ID``yi ek self-servis ağı kimliği ile değiştirin.

  6. Sunucunun IPv4 ve IPv6 adreslerini belirleyin.

    $ openstack server list
    +--------------------------------------+-----------------------+--------+---------------------------------------------------------------------------+
    | ID                                   | Name                  | Status | Networks                                                                  |
    +--------------------------------------+-----------------------+--------+---------------------------------------------------------------------------+
    | bde64b00-77ae-41b9-b19a-cd8e378d9f8b | selfservice-instance2 | ACTIVE | selfservice2=fd00:198:51:100:f816:3eff:fe71:e93e, 198.51.100.4            |
    +--------------------------------------+-----------------------+--------+---------------------------------------------------------------------------+
    
  7. Sağlayıcı ağ üzerinde yüzen IPv4 adresini oluşturun.

    $ openstack floating ip create provider1
    +-------------+--------------------------------------+
    | Field       | Value                                |
    +-------------+--------------------------------------+
    | fixed_ip    | None                                 |
    | id          | 0174056a-fa56-4403-b1ea-b5151a31191f |
    | instance_id | None                                 |
    | ip          | 203.0.113.17                         |
    | pool        | provider1                            |
    +-------------+--------------------------------------+
    
  8. Sunucu ile yüzen IPv4 adresini ilişkilendir.

    $ openstack server add floating ip selfservice-instance2 203.0.113.17
    

    Not

    Bu komutun hiç çıktısı yok.

Yük devretme işlemini doğrula

  1. Sunucudaki değişken IPv4 adresine ve IPv6 adresine sürekli bir ping atmaya baslayın. Sonraki üç basamağı yerine getirirken, sunucunun bağlantısının kesilmesi gerektiğini görürsünüz.
  2. Ana yönlendirici bulunan ağ düğümünde yönetimsel olarak yer paylaşımlı ağ arabirimini devre dışı bırakın.
  3. Diğer ağ düğümünde, qrouter ad alanındaki arayüzlere IP adreslerinin eklenmesine dikkat ederek, ana yönlendiriciye yedek yönlendiricinin yükseltilmesini doğrulayın.
  4. Adım 2’deki özgün ağ düğümünde, yönetici olarak yer paylaşımlı ağ arabirimini etkinleştirin. Ana yönlendiricinin 3. adımda ağ düğümünde kalacağını unutmayın.

Keepalived VRRP durum kontrolü

keepalived sunucunuzun durumu, kullanılabilir ve yapılandırılmış tüm ağ geçidi adreslerine olan bağlantıyı doğrulayan bir bash komut dosyası aracılığıyla otomatik olarak izlenebilir. Bağlanabilirlik kaybolduğunda, ana yönlendirici başka bir düğüme yeniden düzenlenir.

Tüm yönlendiriciler aynı anda bağlantıyı kaybederse, yeni bir ana yönlendirici seçme işlemi, bir veya daha fazla yönlendiricinin bağlantısını geri yükleyinceye kadar round-robin kipine tekrarlanır.

Bu özelliği etkinleştirmek için, l3_agent.ini dosyasını düzenleyin:

ha_vrrp_health_check_interval = 30

ha_vrrp_health_check_interval sağlık kontrolünün kaç saniye içinde kaç sıklıkta çalışması gerektiğinin gösterildiği yer. Varsayılan değer `` 0`` olup, bu kontrolün hiç çalışmaması gerektiğini gösterir.

Ağ trafik akışı

Yüksek kullanılabilirlik mekanizması basitçe ana yönlendirici çökerse diğer yönlendiriciye katman-3 servislerinin yük devri ile ref:`deploy-lb-selfservice`i uzatır. Dolayısıyla, normal işlem için :ref:`Self-servis ağ trafik akışı <deploy-lb-selfservice-networktrafficflow>`na başvurabilirsiniz.

Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.