Open vSwitch: High availability menggunakan VRRP

Open vSwitch: High availability menggunakan VRRP

Contoh arsitektur ini menambah contoh pengerahan self-service dengan mekanisme high-availability menggunakan Virtual Router Redundancy Protocol (VRRP) melalui keepalived dan menyediakan failover routing untuk jaringan self-service. Hal ini membutuhkan minimal dua node jaringan karena VRRP menciptakan satu instance master (aktif) dan setidaknya satu instance cadangan dari setiap router.

Selama operasi normal, `` keepalived`` pada router utama secara berkala mentransmisikan paket heartbeat melalui jaringan tersembunyi yang menghubungkan semua router VRRP untuk proyek tertentu. Setiap proyek dengan router VRRP menggunakan jaringan tersembunyi yang terpisah. Secara default jaringan ini menggunakan nilai pertama dalam opsi tenant_network_types dalam file ml2_conf.ini file. Untuk kontrol tambahan, Anda dapat menentukan tipe jaringan self-service dan nama jaringan fisik untuk jaringan tersembunyi menggunakan opsi l3_ha_network_type dan l3_ha_network_name dalam file neutron.conf.

If keepalived on the backup router stops receiving heartbeat packets, it assumes failure of the master router and promotes the backup router to master router by configuring IP addresses on the interfaces in the qrouter namespace. In environments with more than one backup router, keepalived on the backup router with the next highest priority promotes that backup router to master router.

Catatan

Mekanisme high-availability ini mengkonfigurasi VRRP menggunakan prioritas yang sama untuk semua router. Oleh karena itu, VRRP mempromosikan router cadangan dengan alamat IP tertinggi ke router utama.

Peringatan

Ada bug yang dikenal dengan keepalived v1.2.15 dan sebelumnya yang dapat menyebabkan kehilangan paket (packet loss) ketika `` max_l3_agents_per_router`` diatur ke 3 atau lebih. Oleh karena itu, kami menyarankan Anda meng-upgrade ke keepalived v1.2.16 atau lebih besar saat penggunaan fitur ini.

Gangguanlalu lintas heartbeat VRRP antara node jaringan, biasanya karena antarmuka jaringan atau kegagalan infrastruktur jaringan fisik, memicu failover. Restart agen lapisan-3, atau kegagalan itu, tidak memicu failover menyediakan keepalived terus beroperasi.

Pertimbangkan atribut berikut mekanisme ketersediaan tinggi ini untuk menentukan kepraktisan di lingkungan Anda:

  • Lalu lintas jaringan instance di jaringan self-service menggunakan router tertentu saja melintasi instance master router itu. Dengan demikian, keterbatasan sumber daya dari node jaringan tertentu dapat berdampak pada semua instance master router pada jaringan node tanpa memicu failover ke node jaringan lain. Namun, Anda dapat mengkonfigurasi scheduler untuk mendistribusikan instance master setiap router merata di kolam node jaringan untuk mengurangi kemungkinan pertentangan sumber daya pada setiap simpul jaringan tertentu.
  • Hanya mendukung jaringan self-service menggunakan router. Jaringan provider beroperasi pada lapisan-2 dan bergantung pada infrastruktur jaringan fisik untuk redundansi.
  • Untuk instance dengan alamat IPv4 mengambang, pertahankan keadaan koneksi jaringan selama failover sebagai efek samping dari NAT statis 1:1. Mekanisme tidak secara benar melaksanakan pelacakan koneksi.

Untuk pengerahan produksi, kami sarankan setidaknya tiga node jaringan dengan sumber daya yang cukup untuk menangani lalu lintas jaringan untuk seluruh lingkungan jika salah satu simpul jaringan gagal. Disamping itu, dua node yang tersisa dapat terus memberikan redundansi.

Prasyarat

Tambahkan satu node jaringan dengan komponen-komponen berikut:

  • Tiga antarmuka jaringan: manajemen, penyedia (provider), dan overlay.
  • OpenStack Networking layer-2 agent, layer-3 agent, dan dependensi.

Catatan

Anda dapat menjaga DHCP dan agen metadata pada setiap node komputasi atau memindahkannya ke node jaringan.

Arsitektur

High-availability using VRRP with Linux bridge - overview

Gambar berikut menunjukkan komponen dan konektivitas untuk satu jaringan self-service dan satu jaringan untagged (flat). Router master berada pada node jaringan 1. Dalam kasus ini, instance berada pada node komputasi yang sama sebagai agen DHCP untuk jaringan. Jika agen DHCP berada pada node komputasi lain, yang terakhir hanya berisi namespace DHCP dan Linux bridge dengan port pada interface jaringan fisik overlay.

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

Konfigurasi contoh

Gunakan contoh konfigurasi berikut sebagai template untuk menambahkan dukungan high-availability penggunaan VRRP untuk lingkungan operasional yang ada yang mendukung jaringan self-service.

Controller node

  1. Dalam file neutron.conf:

    • Aktifkan VRRP.

      [DEFAULT]
      l3_ha = True
      
  2. Restart layanan berikut:

    • Server

Network node 1

Tidak ada perubahan.

Network node 2

  1. Install OVS layer-2 agent dan layer-3 agent layanan Networking.

  2. Instal OVS.

  3. Dalam file neutron.conf, lakukan konfigurasi opsi umum:

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

    Lihat Installation Tutorials and Guides dan Configuration Reference untuk rilis OpenStack Anda untuk mendapatkan konfigurasi tambahan yang sesuai untuk bagian [DEFAULT], [database], [keystone_authtoken], [nova], and [agent].

  4. Mulai layanan berikut:

    • OVS
  5. Buat OVS provider bridge br-provider:

    $ ovs-vsctl add-br br-provider
    
  6. Dalam file openvswitch_agent.ini, lakukan konfigurasi layer-2 agent.

    [ovs]
    bridge_mappings = provider:br-provider
    local_ip = OVERLAY_INTERFACE_IP_ADDRESS
    
    [agent]
    tunnel_types = vxlan
    l2_population = true
    
    [securitygroup]
    firewall_driver = iptables_hybrid
    

    Gantilah OVERLAY_INTERFACE_IP_ADDRESS dengan alamat IP dari antarmuka yang menangani VXLAN overlay untuk jaringan self-service.

  7. Dalam file l3_agent.ini, lakukan konfigurasi layer-3 agent.

    [DEFAULT]
    interface_driver = openvswitch
    external_network_bridge =
    

    Catatan

    Opsi external_network_bridge sengaja tidak mengandung nilai.

  8. Mulai layanan berikut:

    • Agen Open vSwitch
    • Layer-3 agent (agen lapisan-3)

Compute nodes (simpul komputasi)

Tidak ada perubahan.

Melakukan verifikasi operasi layanan

  1. Dapatkan sumber kredensial proyek administrasi.

  2. Memverifikasi keberadaan dan operasi dari agen.

    $ openstack network agent list
    +--------------------------------------+--------------------+----------+-------------------+-------+-------+---------------------------+
    | ID                                   | Agent Type         | Host     | Availability Zone | Alive | State | Binary                    |
    +--------------------------------------+--------------------+----------+-------------------+-------+-------+---------------------------+
    | 1236bbcb-e0ba-48a9-80fc-81202ca4fa51 | Metadata agent     | compute2 |                   | True  | UP    | neutron-metadata-agent    |
    | 457d6898-b373-4bb3-b41f-59345dcfb5c5 | Open vSwitch agent | compute2 |                   | True  | UP    | neutron-openvswitch-agent |
    | 71f15e84-bc47-4c2a-b9fb-317840b2d753 | DHCP agent         | compute2 | nova              | True  | UP    | neutron-dhcp-agent        |
    | 8805b962-de95-4e40-bdc2-7a0add7521e8 | L3 agent           | network1 | nova              | True  | UP    | neutron-l3-agent          |
    | a33cac5a-0266-48f6-9cac-4cef4f8b0358 | Open vSwitch agent | network1 |                   | True  | UP    | neutron-openvswitch-agent |
    | a6c69690-e7f7-4e56-9831-1282753e5007 | Metadata agent     | compute1 |                   | True  | UP    | neutron-metadata-agent    |
    | af11f22f-a9f4-404f-9fd8-cd7ad55c0f68 | DHCP agent         | compute1 | nova              | True  | UP    | neutron-dhcp-agent        |
    | bcfc977b-ec0e-4ba9-be62-9489b4b0e6f1 | Open vSwitch agent | compute1 |                   | True  | UP    | neutron-openvswitch-agent |
    | 7f00d759-f2c9-494a-9fbf-fd9118104d03 | Open vSwitch agent | network2 |                   | True  | UP    | neutron-openvswitch-agent |
    | b28d8818-9e32-4888-930b-29addbdd2ef9 | L3 agent           | network2 | nova              | True  | UP    | neutron-l3-agent          |
    +--------------------------------------+--------------------+----------+-------------------+-------+-------+---------------------------+
    

Menciptakan jaringan awal

Serupa dengan contoh pengerahan self-service, konfigurasi ini mendukung beberapa VXLAN jaringan self-service. Setelah mengaktifkan high-availability, semua router tambahan menggunakan VRRP. Prosedur berikut membuat jaringan self-service tambahan dan router. Layanan Networking juga mendukung penambahan high-availability untuk router yang ada. Namun, prosedur ini secara administratif membutuhkan penonaktifkan dan pengaktifkan setiap router yang sementara mengganggu konektivitas jaringan untuk jaringan self-service dengan interface pada router itu.

  1. Dapatkan sumber kredensial proyek (non-administratif) biasa.

  2. Buat jaringan self-service.

    $ 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. Buat subnet IPv4 pada jaringan self-service.

    $ 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. Buat subnet IPv6 pada jaringan self-service.

    $ 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. Buat router.

    $ openstack router create router2
    +-----------------------+---------+
    | Field                 | Value   |
    +-----------------------+---------+
    | admin_state_up        | UP      |
    | name                  | router2 |
    | status                | ACTIVE  |
    +-----------------------+---------+
    
  6. Tambahkan subnet IPv4 dan IPv6 sebagai interface pada router.

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

    Catatan

    Perintah ini tidak memberikan output.

  7. Tambahkan jaringan provider sebagai gateway pada router.

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

Lakukan verifikasi operasi jaringan

  1. Dapatkan sumber kredensial proyek administrasi.

  2. Lakukan verifikasi penciptaan jaringan high-availability internal yang menangani VRRP lalu lintas heartbeat.

    $ openstack network list
    +--------------------------------------+----------------------------------------------------+--------------------------------------+
    | ID                                   | Name                                               | Subnets                              |
    +--------------------------------------+----------------------------------------------------+--------------------------------------+
    | 1b8519c1-59c4-415c-9da2-a67d53c68455 | HA network tenant f986edf55ae945e2bef3cb4bfd589928 | 6843314a-1e76-4cc9-94f5-c64b7a39364a |
    +--------------------------------------+----------------------------------------------------+--------------------------------------+
    
  3. Pada setiap node jaringan, lakukan verifikasi penciptaan namespace qrouter dengan ID yang sama.

    Network node 1:

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

    Network node 2:

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

    Catatan

    Namespace untuk router 1 dari Linux bridge: Jaringan self-service seharusnya hanya muncul di jaringan node 1 karena penciptaan sebelum mengaktifkan VRRP.

  4. Pada setiap node jaringan, tampilkan alamat IP dari antarmuka dalam namespace qrouter. Dengan pengecualian dari interface VRRP, hanya satu namespace yang menjadi milik instance router utama berisi alamat IP pada antarmuka.

    Network node 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
    

    Network node 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
    

    Catatan

    Router utama mungkin berada pada network node 2.

  5. Luncurkan instance dengan sebuah antarmuka pada jaringan self-service tambahan. Misalnya, image CirrOS menggunakan flavor ID 1.

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

    Gantilah NETWORK_ID dengan ID dari jaringan self-service tambahan

  6. Tentukan alamat IPv4 dan IPv6 instance.

    $ 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. Buat alamat IPv4 mengambang di jaringan provider.

    $ 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. Lakukan asosiasi alamat IPv4 mengambang dengan instance.

    $ openstack server add floating ip selfservice-instance2 203.0.113.17
    

    Catatan

    Perintah ini tidak memberikan output.

Verifikasi operasi pemulihan kegagalan

  1. Mulailah terus menerus ping dari alamat IPv4 mengambang dan alamat IPv6 dari instance. Sambil melakukan tiga langkah selanjutnya, Anda akan melihat minimal, jika ada, gangguan konektivitas untuk instance.
  2. Pada node jaringan dengan router utama, secara administratif menonaktifkan antarmuka jaringan overlay.
  3. Pada node jaringan lainnya, lakukan verifikasi promosi cadangan router untuk router utama dengan mencatat penambahan alamat IP ke interface dalam namespace qrouter.
  4. Pada node jaringan asli dalam langkah 2, secara administratif aktifkan antarmuka jaringan overlay. Perhatikan bahwa router utama tetap pada node jaringan dalam langkah 3.

Cek kesehatan Keepalived VRRP health check

Kesehatan instance keepalived Anda dapat secara otomatis dipantau melalui skrip bash yang memverifikasi konektivitas ke semua alamat gerbang yang dikonfigurasi dan tersedia. Dalam hal konektivitas yang hilang, master router dijadwal ulang ke node lain.

Jika semua router kehilangan konektivitas secara bersamaan, proses pemilihan router induk baru akan diulang secara round-robin sampai satu atau lebih router telah dipulihkan konektivitas mereka.

Untuk mengaktifkan fitur ini, edit file l3_agent.ini:

ha_vrrp_health_check_interval = 30

Dimana ha_vrrp_health_check_interval menunjukkan seberapa sering dalam detik dimana pengecekan kesehatan harus dijalankan. Nilai default adalah 0, yang menunjukkan bahwa pengecekan tidak berjalan sama sekali.

Arus lalu lintas jaringan

Mekanisme high-availability ini hanya menambah Open vSwitch: Jaringan self-service dengan failover layanan lapisan-3 kepada router lain jika master router gagal. Dengan demikian, Anda dapat referensi Self-service network traffic flow untuk operasi normal.

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.