Linux bridge: High availability menggunakan VRRP

Linux bridge: 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 membuat satu instance master (aktif) dan setidaknya satu instance backup dari setiap router.

Selama operasi normal, keepalived pada master router 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 (separate hidden network). Secara default jaringan ini menggunakan nilai pertama dalam opsi tenant_network_types dalam file ml2_conf.ini. Untuk kontrol tambahan, Anda dapat menentukan tipe self-service swalayan dan nama jaringan fisik untuk jaringan tersembunyi menggunakan opsi l3_ha_network_type dan l3_ha_network_name dalam file neutron.conf.

Jika `` keepalived`` pada backup router berhenti menerima paket heartbeat, hal ini mengasumsikan kegagalan master router dan mempromosikan backup router ke master router dengan mengkonfigurasi alamat IP pada antarmuka dalam namespace qrouter. Dalam lingkungan dengan lebih dari satu backup router, keepalived pada backup router dengan prioritas tertinggi berikutnya mempromosikan bahwa backup router ke master router..

Catatan

Mekanisme ketersediaan tinggi ini mengkonfigurasi VRRP menggunakan prioritas yang sama untuk semua router. Oleh karena itu, VRRP mempromosikan backup router dengan alamat IP tertinggi ke master router.

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

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

  • Traffic jaringan Instance di jaringan self-service menggunakan router tertentu hanya melintasi instance master router itu. Dengan demikian, keterbatasan sumber daya dari node jaringan tertentu dapat berdampak 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 penyedia beroperasi pada layer-2 dan bergantung pada infrastruktur jaringan fisik untuk redundansi.

  • Untuk instance dengan alamat IPv4 mengambang, hal ini mempertahankan keadaan koneksi jaringan selama failover sebagai efek samping dari 1:1 static NAT. 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. Juga, dua node yang tersisa dapat terus memberikan redundansi.

Peringatan

Mekanisme ketersediaan tinggi ini tidak kompatibel dengan mekanisme populasi lapisan-2. Anda harus menonaktifkan populasi lapisan-2 di file linuxbridge_agent.ini dan restart agen jembatan Linux pada semua jaringan dan komputasi node yang ada sebelum untuk pengerahan konfigurasi contoh.

Prasyarat

Tambahkan satu simpul jaringan dengan komponen berikut:

  • Tiga antarmuka jaringan: manajemen, penyedia, dan overlay.

  • OpenStack Networking layer-2 agent, layer-3 agent, dan dependensi.

Catatan

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

Arsitektur

High-availability using Linux bridge with VRRP - overview

Gambar berikut menunjukkan komponen dan konektivitas untuk satu jaringan self-service dan satu jaringan untagged (flat). Master router berada pada simpul 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 jembatan Linux dengan port pada interface jaringan fisik overlay.

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

Contoh configuration

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

Controller node

  1. Dalam file neutron.conf:

    • Mengaktifkan VRRP.

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

    • Server

Network node 1

Tidak ada perubahan.

Network node 2

  1. Install the Networking service Linux bridge layer-2 agent dan layer-3 agent.

  2. Dalam file neutron.conf, konfigurasi opsi umum:

    [DEFAULT]
    core_plugin = ml2
    auth_strategy = keystone
    rpc_backend = rabbit
    notify_nova_on_port_status_changes = true
    notify_nova_on_port_data_changes = true
    
    [database]
    ...
    
    [keystone_authtoken]
    ...
    
    [oslo_messaging_rabbit]
    ...
    
    [nova]
    ...
    

    Lihat Installation Guide untuk rilis OpenStack Anda untuk mendapatkan konfigurasi yang sesuai untuk bagian [database], [keystone_authtoken], [oslo_messaging_rabbit], dan [nova].

  3. Dalam file linuxbridge_agent.ini, konfigure layer-2 agent.

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

    Ganti PROVIDER_INTERFACE dengan nama interface yang mendasari yang menangani provider network. Misalnya, eth1.

    Ganti OVERLAY_INTERFACE_IP_ADDRESS dengan alamat IP dari antarmuka yang menangani VXLAN overlays untuk jaringan self-service.

  4. Dalam file l3_agent.ini, konfigure layer-3 agent.

    [DEFAULT]
    interface_driver = linuxbridge
    external_network_bridge =
    

    Catatan

    Opsi external_network_bridge sengaja tidak mengandung nilai.

  5. Mulai layanan berikut:

    • Linux bridge agent
    • Layer-3 agent

Compute nodes

Tidak ada perubahan.

Verifikasi operasi layanan

  1. Dapatkan kredensial proyek administrasi.

  2. Memverifikasi keberadaan dan operasi dari agen.

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

Menciptakan jaringan awal

Serupa dengan contoh pengerahan self-service, konfigurasi ini mendukung beberapa VXLAN jaringan self-service. Setelah mengaktifkan ketersediaan tinggi, 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 membutuhkan administratif menonaktifkan dan mengaktifkan setiap router yang sementara waktu mengganggu konektivitas jaringan untuk jaringan self-service dengan interface pada router itu.

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

  2. Membuat jaringan self-service.

    $ neutron net-create selfservice2
    Created a new network:
    +-------------------------+--------------------------------------+
    | Field                   | Value                                |
    +-------------------------+--------------------------------------+
    | admin_state_up          | True                                 |
    | availability_zone_hints |                                      |
    | availability_zones      |                                      |
    | description             |                                      |
    | id                      | 7ebc353c-6c8f-461f-8ada-01b9f14beb18 |
    | ipv4_address_scope      |                                      |
    | ipv6_address_scope      |                                      |
    | mtu                     | 1450                                 |
    | name                    | selfservice2                         |
    | port_security_enabled   | True                                 |
    | router:external         | False                                |
    | shared                  | False                                |
    | status                  | ACTIVE                               |
    | subnets                 |                                      |
    | tags                    |                                      |
    | tenant_id               | f986edf55ae945e2bef3cb4bfd589928     |
    +-------------------------+--------------------------------------+
    
  3. Buat subnet IPv4 pada jaringan self-service..

    $ neutron subnet-create --name selfservice2-v4 --ip-version 4 \
      --dns-nameserver 8.8.4.4 selfservice2 192.168.2.0/24
    Created a new subnet:
    +-------------------+--------------------------------------------------+
    | Field             | Value                                            |
    +-------------------+--------------------------------------------------+
    | allocation_pools  | {"start": "192.168.2.2", "end": "192.168.2.254"} |
    | cidr              | 192.168.2.0/24                                   |
    | description       |                                                  |
    | dns_nameservers   | 8.8.4.4                                          |
    | enable_dhcp       | True                                             |
    | gateway_ip        | 192.168.2.1                                      |
    | host_routes       |                                                  |
    | id                | 12a41804-18bf-4cec-bde8-174cbdbf1573             |
    | ip_version        | 4                                                |
    | ipv6_address_mode |                                                  |
    | ipv6_ra_mode      |                                                  |
    | name              | selfservice2-v4                                  |
    | network_id        | 7ebc353c-6c8f-461f-8ada-01b9f14beb18             |
    | subnetpool_id     |                                                  |
    | tenant_id         | f986edf55ae945e2bef3cb4bfd589928                 |
    +-------------------+--------------------------------------------------+
    
  4. Buat subnet IPv6 pada jaringan self-service...

    $ neutron subnet-create --name selfservice2-v6 --ip-version 6 \
      --ipv6-address-mode slaac --ipv6-ra-mode slaac \
      --dns-nameserver 2001:4860:4860::8844 selfservice2 \
      fd00:192:168:2::/64
    Created a new subnet:
    +-------------------+-----------------------------------------------------------------------------+
    | Field             | Value                                                                       |
    +-------------------+-----------------------------------------------------------------------------+
    | allocation_pools  | {"start": "fd00:192:168:2::2", "end": "fd00:192:168:2:ffff:ffff:ffff:ffff"} |
    | cidr              | fd00:192:168:2::/64                                                         |
    | description       |                                                                             |
    | dns_nameservers   | 2001:4860:4860::8844                                                        |
    | enable_dhcp       | True                                                                        |
    | gateway_ip        | fd00:192:168:2::1                                                           |
    | host_routes       |                                                                             |
    | id                | b0f122fe-0bf9-4f31-975d-a47e58aa88e3                                        |
    | ip_version        | 6                                                                           |
    | ipv6_address_mode | slaac                                                                       |
    | ipv6_ra_mode      | slaac                                                                       |
    | name              | selfservice2-v6                                                             |
    | network_id        | 7ebc353c-6c8f-461f-8ada-01b9f14beb18                                        |
    | subnetpool_id     |                                                                             |
    | tenant_id         | f986edf55ae945e2bef3cb4bfd589928                                            |
    +-------------------+-----------------------------------------------------------------------------+
    
  5. Buat router.

    $ neutron router-create router2
    Created a new router:
    +-------------------------+--------------------------------------+
    | Field                   | Value                                |
    +-------------------------+--------------------------------------+
    | admin_state_up          | True                                 |
    | availability_zone_hints |                                      |
    | availability_zones      |                                      |
    | description             |                                      |
    | external_gateway_info   |                                      |
    | id                      | b6206312-878e-497c-8ef7-eb384f8add96 |
    | name                    | router2                              |
    | routes                  |                                      |
    | status                  | ACTIVE                               |
    | tenant_id               | f986edf55ae945e2bef3cb4bfd589928     |
    +-------------------------+--------------------------------------+
    
  6. Tambahkan subnet IPv4 dan IPv6 sebagai interface pada router.

    $ neutron router-interface-add router2 selfservice2-v4
    Added interface da3504ad-ba70-4b11-8562-2e6938690878 to router router2.
    
    $ neutron router-interface-add router2 selfservice2-v6
    Added interface 442e36eb-fce3-4cb5-b179-4be6ace595f0 to router router2.
    
  7. Tambahkan jaringan provider sebagai gateway pada router.

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

Verifikasi operasi jaringan

  1. Dapatkan kredensial proyek administrasi.

  2. Verifikasi pembuatan jaringan high-availability internal yang menangani lalu lintas heartbeat VRRP.

    $ neutron net-list
    +--------------------------------------+----------------------------------------------------+----------------------------------------------------------+
    | id                                   | name                                               | subnets                                                  |
    +--------------------------------------+----------------------------------------------------+----------------------------------------------------------+
    | 1b8519c1-59c4-415c-9da2-a67d53c68455 | HA network tenant f986edf55ae945e2bef3cb4bfd589928 | 6843314a-1e76-4cc9-94f5-c64b7a39364a 169.254.192.0/18    |
    +--------------------------------------+----------------------------------------------------+----------------------------------------------------------+
    
  3. Pada setiap node jaringan, memverifikasi pembuatan namespace qrouter dengan ID yang sama.

    Jaringan node 1:

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

    Jaringan node 2:

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

    Catatan

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

  4. Pada setiap node jaringan, menampilkan alamat IP dari antarmuka dalam namespace qrouter. Dengan pengecualian dari interface VRRP, hanya satu namespace yang memiliki instance master router berisi alamat IP pada antarmuka.

    Jaringan 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 192.168.2.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:192:168:2::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
    

    Jaringan 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

    Master router mungkin berada pada jaringan node 2.

  5. Meluncurkan sebuah 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
    

    Ganti `` NETWORK_ID`` dengan ID dari jaringan self-service tambahan.

  6. Tentukan alamat IPv4 dan IPv6 dari instance.

    $ openstack server list
    +--------------------------------------+-----------------------+--------+---------------------------------------------------------------------------+
    | ID                                   | Name                  | Status | Networks                                                                  |
    +--------------------------------------+-----------------------+--------+---------------------------------------------------------------------------+
    | bde64b00-77ae-41b9-b19a-cd8e378d9f8b | selfservice-instance2 | ACTIVE | selfservice2=fd00:192:168:2:f816:3eff:fe71:e93e, 192.168.2.4              |
    +--------------------------------------+-----------------------+--------+---------------------------------------------------------------------------+
    
  7. Membuat alamat IPv4 mengambang di jaringan operator.

    $ openstack ip floating create provider1
    +-------------+--------------------------------------+
    | Field       | Value                                |
    +-------------+--------------------------------------+
    | fixed_ip    | None                                 |
    | id          | 0174056a-fa56-4403-b1ea-b5151a31191f |
    | instance_id | None                                 |
    | ip          | 203.0.113.17                         |
    | pool        | provider1                            |
    +-------------+--------------------------------------+
    
  8. Mengasosiasikan alamat IPv4 mengambang dengan instance.

    $ openstack ip floating add 203.0.113.17 selfservice-instance2
    

    Catatan

    Command ini tidak memberikan output.

Verifikasi operasi failover

  1. Mulailah terus menerus ping dari kedua 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, memverifikasi promosi router cadangan (backup router) untuk menjadi master router dengan mencatat penambahan alamat IP ke interface dalam namespace qrouter.

  4. Pada node jaringan original pada langkah 2, secara administratif mengaktifkan antarmuka jaringan overlay. Perhatikan bahwa master router tetap pada node jaringan pada langkah 3.

Arus lalu lintas jaringan

Mekanisme ketersediaan tinggi ini hanya menambah Linux bridge: 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.