High-availability untuk DHCP

High-availability untuk DHCP

Bagian ini menjelaskan cara menggunakan manajemen agen ekstensi (agent alias) dan scheduler (alias agent_scheduler) untuk skalabilitas agen DHCP dan HA.

Catatan

Gunakan client command neutron ext-list untuk memeriksa apakah ekstensi ini diaktifkan. Periksa agent dan agent_scheduler termasuk dalam output.

$ neutron ext-list -c name -c alias
+-----------------+--------------------------+
| alias           | name                     |
+-----------------+--------------------------+
| agent_scheduler | Agent Schedulers         |
| binding         | Port Binding             |
| quotas          | Quota management support |
| agent           | agent                    |
| provider        | Provider Network         |
| router          | Neutron L3 Router        |
| lbaas           | Load Balancing service   |
| extraroute      | Neutron Extra Route      |
+-----------------+--------------------------+

Demo setup

_images/demo_multiple_dhcp_agents.png

Ada tiga host di setup.

Host

Deskripsi

OpenStack controller host - controlnode

Menjalankan layanan Networking, Identity, dan Compute yang diperlukan untuk mengerahkan VM. Node harus memiliki setidaknya satu network interface yang terhubung ke Management Network. Perhatikan bahwa nova-network tidak harus berjalan karena digantikan oleh Neutron.

HostA

Runs nova-compute, the Neutron L2 agent dan DHCP agent

HostB Same as HostA

Konfigurasi

controlnode: neutron server

  1. Neutron configuration file /etc/neutron/neutron.conf:

    [DEFAULT]
    core_plugin = linuxbridge
    rabbit_host = controlnode
    allow_overlapping_ips = True
    host = controlnode
    agent_down_time = 5
    dhcp_agents_per_network = 1
    

    Catatan

    Dalam konfigurasi di atas, kita menggunakan dhcp_agents_per_network = 1 untuk demonstrasi ini. Dalam pengerahan biasa, kami sarankan pengaturan dhcp_agents_per_network lebih dari satu untuk mencocokkan jumlah agen DHCP dalam pengerahan Anda. Lihat ref: conf-dhcp-agen-per-network.

  2. Update the plug-in configuration file /etc/neutron/plugins/linuxbridge/linuxbridge_conf.ini:

    [vlans]
    tenant_network_type = vlan
    network_vlan_ranges = physnet1:1000:2999
    [database]
    connection = mysql://root:root@127.0.0.1:3306/neutron_linux_bridge
    retry_interval = 2
    [linux_bridge]
    physical_interface_mappings = physnet1:eth0
    

HostA dan HostB: L2 agent

  1. Neutron configuration file /etc/neutron/neutron.conf:

    [DEFAULT]
    rabbit_host = controlnode
    rabbit_password = openstack
    # host = HostB on hostb
    host = HostA
    
  2. Update the plug-in configuration file /etc/neutron/plugins/linuxbridge/linuxbridge_conf.ini:

    [vlans]
    tenant_network_type = vlan
    network_vlan_ranges = physnet1:1000:2999
    [database]
    connection = mysql://root:root@127.0.0.1:3306/neutron_linux_bridge
    retry_interval = 2
    [linux_bridge]
    physical_interface_mappings = physnet1:eth0
    
  3. Update file nova configuration /etc/nova/nova.conf:

    [DEFAULT]
    use_neutron=True
    firewall_driver=nova.virt.firewall.NoopFirewallDriver
    
    [neutron]
    admin_username=neutron
    admin_password=servicepassword
    admin_auth_url=http://controlnode:35357/v2.0/
    auth_strategy=keystone
    admin_tenant_name=servicetenant
    url=http://100.1.1.10:9696/
    

HostA dan HostB: DHCP agent

  • Update file DHCP configuration /etc/neutron/dhcp_agent.ini:

    [DEFAULT]
    interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
    

Prasyarat untuk demonstrasi

Peran admin diperlukan untuk menggunakan manajemen agen dan scheduler ekstensi. Pastikan Anda menjalankan command berikut di bawah sebuah proyek dengan peran admin.

Untuk bereksperimen, Anda perlu VM dan neutron jaringan:

$ nova list
+--------------------------------------+-----------+--------+---------------+
| ID                                   | Name      | Status | Networks      |
+--------------------------------------+-----------+--------+---------------+
| c394fcd0-0baa-43ae-a793-201815c3e8ce | myserver1 | ACTIVE | net1=10.0.1.3 |
| 2d604e05-9a6c-4ddb-9082-8a1fbdcc797d | myserver2 | ACTIVE | net1=10.0.1.4 |
| c7c0481c-3db8-4d7a-a948-60ce8211d585 | myserver3 | ACTIVE | net1=10.0.1.5 |
+--------------------------------------+-----------+--------+---------------+

$ neutron net-list
+--------------------------------------+------+--------------------------------------+
| id                                   | name | subnets                              |
+--------------------------------------+------+--------------------------------------+
| 89dca1c6-c7d4-4f7a-b730-549af0fb6e34 | net1 | f6c832e3-9968-46fd-8e45-d5cf646db9d1 |
+--------------------------------------+------+--------------------------------------+

Mengelola agen dalam pengerahan neutron

  1. Daftarlah semua agen:

    $ neutron agent-list
    +--------------------------------------+--------------------+-------+-------+----------------+
    | id                                   | agent_type         | host  | alive | admin_state_up |
    +--------------------------------------+--------------------+-------+-------+----------------+
    | 1b69828d-6a9b-4826-87cd-1757f0e27f31 | Linux bridge agent | HostA | :-)   | True           |
    | a0c1c21c-d4f4-4577-9ec7-908f2d48622d | DHCP agent         | HostA | :-)   | True           |
    | ed96b856-ae0f-4d75-bb28-40a47ffd7695 | Linux bridge agent | HostB | :-)   | True           |
    | f28aa126-6edb-4ea5-a81e-8850876bc0a8 | DHCP agent         | HostB | :-)   | True           |
    +--------------------------------------+--------------------+-------+-------+----------------+
    

    Setiap agen yang mendukung ekstensi ini akan mendaftarkan diri dengan server neutron ketika dijalankan.

    Output menunjukkan informasi untuk empat agen. The alive field menunjukan :-) `` jika agen melaporkan keadaan dalam periode yang ditentukan oleh opsi  ``agent_down_time dalam file neutron.conf. Jika tidak, alive adalah xxx.

  2. Daftarlah agen DHCP yang menjadi host jaringan tertentu:

    $ neutron dhcp-agent-list-hosting-net net1
    +--------------------------------------+-------+----------------+-------+
    | id                                   | host  | admin_state_up | alive |
    +--------------------------------------+-------+----------------+-------+
    | a0c1c21c-d4f4-4577-9ec7-908f2d48622d | HostA | True           | :-)   |
    +--------------------------------------+-------+----------------+-------+
    
  3. Daftar networks hosted by a given DHCP agent:

    Command ini adalah untuk menunjukkan dimana jaringan agen dhcp mengelola.

    $ neutron net-list-on-dhcp-agent a0c1c21c-d4f4-4577-9ec7-908f2d48622d
    +--------------------------------------+------+--------------------------------------------------+
    | id                                   | name | subnets                                          |
    +--------------------------------------+------+--------------------------------------------------+
    | 89dca1c6-c7d4-4f7a-b730-549af0fb6e34 | net1 | f6c832e3-9968-46fd-8e45-d5cf646db9d1 10.0.1.0/24 |
    +--------------------------------------+------+--------------------------------------------------+
    
  4. Tampilkan detail agen.

    Command agent-show menunjukkan rincian untuk agen tertentu:

    $ neutron agent-show a0c1c21c-d4f4-4577-9ec7-908f2d48622d
    +---------------------+--------------------------------------------------------+
    | Field               | Value                                                  |
    +---------------------+--------------------------------------------------------+
    | admin_state_up      | True                                                   |
    | agent_type          | DHCP agent                                             |
    | alive               | False                                                  |
    | binary              | neutron-dhcp-agent                                     |
    | configurations      | {                                                      |
    |                     |     "subnets": 1,                                      |
    |                     |     "dhcp_driver": "neutron.agent.linux.dhcp.Dnsmasq", |
    |                     |     "networks": 1,                                     |
    |                     |     "dhcp_lease_time": 120,                            |
    |                     |     "ports": 3                                         |
    |                     | }                                                      |
    | created_at          | 2013-03-16T01:16:18.000000                             |
    | description         |                                                        |
    | heartbeat_timestamp | 2013-03-17T01:37:22.000000                             |
    | host                | HostA                                                  |
    | id                  | 58f4ce07-6789-4bb3-aa42-ed3779db2b03                   |
    | started_at          | 2013-03-16T06:48:39.000000                             |
    | topic               | dhcp_agent                                             |
    +---------------------+--------------------------------------------------------+
    

    Dalam output ini, heartbeat_timestamp adalah waktu di server neutron. Anda tidak perlu untuk menyinkronkan semua agen kali ini untuk ekstensi ini berjalan dengan benar. `` Configurations`` menjelaskan konfigurasi statis untuk agen atau data time berjalan. Agen ini adalah agen DHCP dan host satu jaringan, satu subnet, dan tiga port.

    Berbagai jenis agen menunjukkan rincian yang berbeda. Output berikut menunjukkan informasi untuk agen Linux bridge:

    $ neutron agent-show ed96b856-ae0f-4d75-bb28-40a47ffd7695
    +---------------------+--------------------------------------+
    | Field               | Value                                |
    +---------------------+--------------------------------------+
    | admin_state_up      | True                                 |
    | binary              | neutron-linuxbridge-agent            |
    | configurations      | {                                    |
    |                     |      "physnet1": "eth0",             |
    |                     |      "devices": "4"                  |
    |                     | }                                    |
    | created_at          | 2013-03-16T01:49:52.000000           |
    | description         |                                      |
    | disabled            | False                                |
    | group               | agent                                |
    | heartbeat_timestamp | 2013-03-16T01:59:45.000000           |
    | host                | HostB                                |
    | id                  | ed96b856-ae0f-4d75-bb28-40a47ffd7695 |
    | topic               | N/A                                  |
    | started_at          | 2013-03-16T06:48:39.000000           |
    | type                | Linux bridge agent                   |
    +---------------------+--------------------------------------+
    

    Output menunjukkan bridge-mapping dan jumlah perangkat jaringan virtual pada agen L2 ini.

Mengelola prosedur jaringan agen DHCP

Sebuah jaringan tunggal dapat ditugaskan untuk lebih dari satu agen DHCP dan satu agen DHCP dapat host lebih dari satu jaringan. Anda dapat menambahkan jaringan ke agen DHCP dan menghapus satu dari itu.

  1. Default scheduling.

    Bila Anda membuat jaringan dengan satu port, jaringan akan dijadwalkan untuk agen DHCP aktif. Jika banyak agen DHCP aktif berjalan, pilih salah satu secara acak. Anda dapat merancang algoritma penjadwalan yang lebih canggih dalam cara yang sama seperti nova-schedule nanti.

    $ neutron net-create net2
    $ neutron subnet-create net2 9.0.1.0/24 --name subnet2
    $ neutron port-create net2
    $ neutron dhcp-agent-list-hosting-net net2
    +--------------------------------------+-------+----------------+-------+
    | id                                   | host  | admin_state_up | alive |
    +--------------------------------------+-------+----------------+-------+
    | a0c1c21c-d4f4-4577-9ec7-908f2d48622d | HostA | True           | :-)   |
    +--------------------------------------+-------+----------------+-------+
    

    Hal ini dialokasikan untuk agen DHCP pada HostA. Jika Anda ingin memvalidasi perilaku melalui command:command:dnsmasq, Anda harus membuat subnet untuk jaringan karena agen DHCP memulai layanan dnsmasq hanya jika ada DHCP.

  2. Menetapkan jaringan untuk agen DHCP yang ada. ................

    Untuk menambahkan agen DHCP yang lain until menjadi host jaringan, jalankan command ini:

    $ neutron dhcp-agent-network-add f28aa126-6edb-4ea5-a81e-8850876bc0a8 net2
    Added network net2 to dhcp agent
    $ neutron dhcp-agent-list-hosting-net net2
    +--------------------------------------+-------+----------------+-------+
    | id                                   | host  | admin_state_up | alive |
    +--------------------------------------+-------+----------------+-------+
    | a0c1c21c-d4f4-4577-9ec7-908f2d48622d | HostA | True           | :-)   |
    | f28aa126-6edb-4ea5-a81e-8850876bc0a8 | HostB | True           | :-)   |
    +--------------------------------------+-------+----------------+-------+
    

    Kedua agen DHCP untuk menjadi host jaringan net2.

  3. Menghapus jaringan dari agen DHCP yang sudah ditentukan.

    Command ini adalah sibling command untuk command sebelumnya. Hapus net2 dari agen DHCP untuk HostA:

    $ neutron dhcp-agent-network-remove a0c1c21c-d4f4-4577-9ec7-908f2d48622d \
      net2
    Removed network net2 to dhcp agent
    $ neutron dhcp-agent-list-hosting-net net2
    +--------------------------------------+-------+----------------+-------+
    | id                                   | host  | admin_state_up | alive |
    +--------------------------------------+-------+----------------+-------+
    | f28aa126-6edb-4ea5-a81e-8850876bc0a8 | HostB | True           | :-)   |
    +--------------------------------------+-------+----------------+-------+
    

    Anda dapat melihat bahwa hanya agen DHCP untuk HostB menjadi host jaringan net2.

HA agen DHCP

Boot VM pada net2. Biarkan kedua agen DHCP menjadi host net2. Kegagalanl agen pada gilirannya untuk melihat apakah VM masih bisa mendapatkan IP yang diinginkan.

  1. Boot VM pada net2:

    $ neutron net-list
    +--------------------------------------+------+--------------------------------------------------+
    | id                                   | name | subnets                                          |
    +--------------------------------------+------+--------------------------------------------------+
    | 89dca1c6-c7d4-4f7a-b730-549af0fb6e34 | net1 | f6c832e3-9968-46fd-8e45-d5cf646db9d1 10.0.1.0/24 |
    | 9b96b14f-71b8-4918-90aa-c5d705606b1a | net2 | 6979b71a-0ae8-448c-aa87-65f68eedcaaa 9.0.1.0/24  |
    +--------------------------------------+------+--------------------------------------------------+
    $ nova boot --image tty --flavor 1 myserver4 \
      --nic net-id=9b96b14f-71b8-4918-90aa-c5d705606b1a
    ...
    $ nova list
    +--------------------------------------+-----------+--------+---------------+
    | ID                                   | Name      | Status | Networks      |
    +--------------------------------------+-----------+--------+---------------+
    | c394fcd0-0baa-43ae-a793-201815c3e8ce | myserver1 | ACTIVE | net1=10.0.1.3 |
    | 2d604e05-9a6c-4ddb-9082-8a1fbdcc797d | myserver2 | ACTIVE | net1=10.0.1.4 |
    | c7c0481c-3db8-4d7a-a948-60ce8211d585 | myserver3 | ACTIVE | net1=10.0.1.5 |
    | f62f4731-5591-46b1-9d74-f0c901de567f | myserver4 | ACTIVE | net2=9.0.1.2  |
    +--------------------------------------+-----------+--------+---------------+
    
  2. Pastikan kedua DHCP agen menjadi host net2:

    Gunakan command sebelumnya untuk menetapkan jaringan menjadi agen.

    $ neutron dhcp-agent-list-hosting-net net2
    +--------------------------------------+-------+----------------+-------+
    | id                                   | host  | admin_state_up | alive |
    +--------------------------------------+-------+----------------+-------+
    | a0c1c21c-d4f4-4577-9ec7-908f2d48622d | HostA | True           | :-)   |
    | f28aa126-6edb-4ea5-a81e-8850876bc0a8 | HostB | True           | :-)   |
    +--------------------------------------+-------+----------------+-------+
    

Untuk menguji HA agen DHCP:

  1. Masuk ke VM myserver4, dan menjalankan udhcpc, dhclient atau DHCP client lainnya.

  2. Hentikan agen DHCP pada HostA. Selain menghentikan biner neutron-dhcp-agent, Anda harus menghentikan proses dnsmasq.

  3. Menjalankan klien DHCP di VM untuk melihat apakah ia bisa mendapatkan IP yang diinginkan.

  4. Hentikan agen DHCP pada HostB juga.

  5. Jalankan udhcpc di VM; ini tidak bisa mendapatkan IP yang diinginkan.

  6. Mulai agen DHCP pada HostB. VM mendapatkan IP yang diinginkan lagi.

Menonaktifkan dan menghapus agen

Administrator mungkin ingin menonaktifkan agen jika upgrade sistem perangkat keras atau perangkat lunak direncanakan. Beberapa agen yang mendukung penjadwalan juga mendukung penonaktifan dan pengaktifan agen, seperti agen L3 dan DHCP. Setelah agen dinonaktifkan, scheduler tidak menjadwalkan sumber daya baru untuk agen.

Setelah agen dinonaktifkan, Anda dapat dengan aman menghapus agen. Bahkan setelah menonaktifkan agen, sumber daya pada agen yang terus ditugaskan. Pastikan Anda menghapus sumber daya pada agen sebelum Anda menghapus agen.

Menonaktifkan agen DHCP pada HostA sebelum Anda menghentikannya:

$ neutron agent-update a0c1c21c-d4f4-4577-9ec7-908f2d48622d --admin-state-up False
$ neutron agent-list
+--------------------------------------+--------------------+-------+-------+----------------+
| id                                   | agent_type         | host  | alive | admin_state_up |
+--------------------------------------+--------------------+-------+-------+----------------+
| 1b69828d-6a9b-4826-87cd-1757f0e27f31 | Linux bridge agent | HostA | :-)   | True           |
| a0c1c21c-d4f4-4577-9ec7-908f2d48622d | DHCP agent         | HostA | :-)   | False          |
| ed96b856-ae0f-4d75-bb28-40a47ffd7695 | Linux bridge agent | HostB | :-)   | True           |
| f28aa126-6edb-4ea5-a81e-8850876bc0a8 | DHCP agent         | HostB | :-)   | True           |
+--------------------------------------+--------------------+-------+-------+----------------+

Setelah Anda berhenti agen DHCP pada HostA, Anda dapat menghapusnya dengan command berikut:

$ neutron agent-delete a0c1c21c-d4f4-4577-9ec7-908f2d48622d
Deleted agent: a0c1c21c-d4f4-4577-9ec7-908f2d48622d
$ neutron agent-list
+--------------------------------------+--------------------+-------+-------+----------------+
| id                                   | agent_type         | host  | alive | admin_state_up |
+--------------------------------------+--------------------+-------+-------+----------------+
| 1b69828d-6a9b-4826-87cd-1757f0e27f31 | Linux bridge agent | HostA | :-)   | True           |
| ed96b856-ae0f-4d75-bb28-40a47ffd7695 | Linux bridge agent | HostB | :-)   | True           |
| f28aa126-6edb-4ea5-a81e-8850876bc0a8 | DHCP agent         | HostB | :-)   | True           |
+--------------------------------------+--------------------+-------+-------+----------------+

Setelah penghapusan, jika Anda me-restart agen DHCP, agen DHCP akan muncul pada daftar agen lagi.

Mengaktifkan high availability DHCP dengan default

Anda dapat mengontrol jumlah default agen DHCP yang ditugaskan ke jaringan dengan menetapkan opsi konfigurasi berikut di file /etc/neutron/neutron.conf.

dhcp_agents_per_network = 3
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.