DHCP için yüksek kullanılabilirlik

DHCP için yüksek kullanılabilirlik

Bu bölüm, DHCP ajanların ölçeklenebilirliği ve HA için aracı yönetimi (diğer ad aracısı) ve zamanlayıcı (diğer adet agent_scheduler) uzantılarının nasıl kullanılacağını açıklar.

Not

Bu uzantıların etkin olup olmadığını kontrol etmek için:command:neutron ext-list istemci komutunu kullanın. agent ve agent_scheduler işlevlerinin çıktıya dahil edilip edilmediğini kontrol edin.

$ openstack extension list --network -c Name -c Alias
+-------------------------------------------------------------+---------------------------+
| Name                                                        | Alias                     |
+-------------------------------------------------------------+---------------------------+
| Default Subnetpools                                         | default-subnetpools       |
| Network IP Availability                                     | network-ip-availability   |
| Network Availability Zone                                   | network_availability_zone |
| Auto Allocated Topology Services                            | auto-allocated-topology   |
| Neutron L3 Configurable external gateway mode               | ext-gw-mode               |
| Port Binding                                                | binding                   |
| Neutron Metering                                            | metering                  |
| agent                                                       | agent                     |
| Subnet Allocation                                           | subnet_allocation         |
| L3 Agent Scheduler                                          | l3_agent_scheduler        |
| Tag support                                                 | tag                       |
| Neutron external network                                    | external-net              |
| Neutron Service Flavors                                     | flavors                   |
| Network MTU                                                 | net-mtu                   |
| Availability Zone                                           | availability_zone         |
| Quota management support                                    | quotas                    |
| HA Router extension                                         | l3-ha                     |
| Provider Network                                            | provider                  |
| Multi Provider Network                                      | multi-provider            |
| Address scope                                               | address-scope             |
| Neutron Extra Route                                         | extraroute                |
| Subnet service types                                        | subnet-service-types      |
| Resource timestamps                                         | standard-attr-timestamp   |
| Neutron Service Type Management                             | service-type              |
| Router Flavor Extension                                     | l3-flavors                |
| Tag support for resources: subnet, subnetpool, port, router | tag-ext                   |
| Neutron Extra DHCP opts                                     | extra_dhcp_opt            |
| Resource revision numbers                                   | standard-attr-revisions   |
| Pagination support                                          | pagination                |
| Sorting support                                             | sorting                   |
| security-group                                              | security-group            |
| DHCP Agent Scheduler                                        | dhcp_agent_scheduler      |
| Router Availability Zone                                    | router_availability_zone  |
| RBAC Policies                                               | rbac-policies             |
| standard-attr-description                                   | standard-attr-description |
| Neutron L3 Router                                           | router                    |
| Allowed Address Pairs                                       | allowed-address-pairs     |
| project_id field enabled                                    | project-id                |
| Distributed Virtual Router                                  | dvr                       |
+-------------------------------------------------------------+---------------------------+

Tanıtım kurulumu

_images/demo_multiple_dhcp_agents.png

Kurulumda üç sunucu olacak.

Sunucu Açıklama
OpenStack denetim sunucusu - controlnode VM’leri yayına almak için gerekli olan Ağ, Kimlik ve Hesaplama servislerini çalıştırır. Düğüm Yönetim Ağına bağlı en az bir ağ arayüzüne sahip olmak zorundadır. nova-network çalıştırılmamalıdır çünkü Neutron ile değiştirildi.
HostA Neutron L2 ajanı ve DHCP ajanı olan nova-compute komutunu çalıştırır
HostB HostA ile aynı

Yapılandırma

controlnode: neutron server

  1. Neutron yapılandırma dosyası /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
    

    Not

    Yukarıdaki yapılandırmada, bu gösterim için dhcp_agents_per_network = 1 kullanıyoruz. Normal kurulumlarda, dağıtımınızdaki DHCP aracılarının sayısıyla eşleştirmek için dhcp_agents_per_network ayarını birden fazla yapmanızı öneririz. DHCP yüksek kullanılabilirliğini varsayılan olarak etkinleştirme referansına bakınız.

  2. Eklenti yapılandırma dosyasını /etc/neutron/plugins/linuxbridge/linuxbridge_conf.ini güncelle:

    [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 ve HostB: L2 ajanı

  1. Neutron yapılandırma dosyası /etc/neutron/neutron.conf:

    [DEFAULT]
    rabbit_host = controlnode
    rabbit_password = openstack
    # host = HostB on hostb
    host = HostA
    
  2. Eklenti yapılandırma dosyasını /etc/neutron/plugins/linuxbridge/linuxbridge_conf.ini güncelle:

    [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. /etc/nova/nova.conf nova yapılandırma dosyasını güncelle:

    [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://203.0.113.10:9696/
    

HostA ve HostB: DHCP ajanı

  • DHCO yapılandırma dosyası /etc/neutron/dhcp_agent.ini‘yi güncelle:

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

Gösterim için ön gereklilikler

Aracı yönetimi ve zamanlayıcı uzantılarını kullanmak için yönetici rolü gereklidir. Bir yönetici rolüne sahip bir proje kapsamında aşağıdaki komutları çalıştırdığınızdan emin olun.

Denemek için VM’lere ve neutron ağına ihtiyacınız var:

$ openstack server list
+--------------------------------------+-----------+--------+----------------+------------+
| ID                                   | Name      | Status | Networks       | Image Name |
+--------------------------------------+-----------+--------+----------------+------------+
| c394fcd0-0baa-43ae-a793-201815c3e8ce | myserver1 | ACTIVE | net1=192.0.2.3 | cirros     |
| 2d604e05-9a6c-4ddb-9082-8a1fbdcc797d | myserver2 | ACTIVE | net1=192.0.2.4 | ubuntu     |
| c7c0481c-3db8-4d7a-a948-60ce8211d585 | myserver3 | ACTIVE | net1=192.0.2.5 | centos     |
+--------------------------------------+-----------+--------+----------------+------------+

$ openstack network list
+--------------------------------------+------+--------------------------------------+
| ID                                   | Name | Subnets                              |
+--------------------------------------+------+--------------------------------------+
| 89dca1c6-c7d4-4f7a-b730-549af0fb6e34 | net1 | f6c832e3-9968-46fd-8e45-d5cf646db9d1 |
+--------------------------------------+------+--------------------------------------+

Neutron yayınlamasında ajanların yönetimi

  1. Tüm ajanları listele:

    $ openstack network agent list
    +--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+
    | ID                                   | Agent Type         | Host  | Availability Zone | Alive | State | Binary                    |
    +--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+
    | 22467163-01ea-4231-ba45-3bd316f425e6 | Linux bridge agent | HostA | None              | True  | UP    | neutron-metering-agent    |
    | 2444c54d-0d28-460c-ab0f-cd1e6b5d3c7b | DHCP agent         | HostA | None              | True  | UP    | neutron-openvswitch-agent |
    | 3066d20c-9f8f-440c-ae7c-a40ffb4256b6 | Linux bridge agent | HostB | nova              | True  | UP    | neutron-l3-agent          |
    | 55569f4e-6f31-41a6-be9d-526efce1f7fe | DHCP agent         | HostB | nova              | True  | UP    | neutron-l3-agent          |
    +--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+
    

    Bu uzantıları destekleyen her ajan, başlatıldığında kendisini neutron sunucusuna kaydeder.

    Çıktı, dört ajan için bilgileri gösterir. neutron.conf dosyasında agent_down_time seçeneği ile tanımlanmış zaman dilimi içerisinde ajan durumunu raporlarsa alive alanı :-) gösterir. Diğer türlü alive, ``xxx``dir.

  2. Belirtilen bir ağa ev sahipliği yapan DHCP aracılarını listele:

    $ neutron dhcp-agent-list-hosting-net net1
    +--------------------------------------+-------+----------------+-------+
    | id                                   | host  | admin_state_up | alive |
    +--------------------------------------+-------+----------------+-------+
    | a0c1c21c-d4f4-4577-9ec7-908f2d48622d | HostA | True           | :-)   |
    +--------------------------------------+-------+----------------+-------+
    
  3. Belirli bir DHCP ajanı tarafından barındırılan ağları listeleyin:

    Bu komut, belirli bir dhcp ajanının hangi ağları yönettiğini göstermek içindir.

    $ 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 192.0.2.0/24 |
    +--------------------------------------+------+---------------------------------------------------+
    
  4. Ajan detaylarını göster.

    openstack network agent show komutu belirtilen ajan için detayları gösterir:

    $ openstack network agent show 22467163-01ea-4231-ba45-3bd316f425e6
    +---------------------+-------------------------------------------------------------------------+
    | Field               | Value                                                                   |
    +---------------------+-------------------------------------------------------------------------+
    | admin_state_up      | UP                                                                      |
    | agent_type          | Metering agent                                                          |
    | alive               | False                                                                   |
    | availability_zone   | None                                                                    |
    | binary              | neutron-metering-agent                                                  |
    | configurations      | measure_interval='30', metering_driver='neutron.services.metering.drive |
    |                     | rs.noop.noop_driver.NoopMeteringDriver', report_interval='300'          |
    | created_at          | 2016-10-08 15:17:14                                                     |
    | description         | None                                                                    |
    | heartbeat_timestamp | 2016-10-24 13:53:35                                                     |
    | host                | HostA                                                                   |
    | id                  | 22467163-01ea-4231-ba45-3bd316f425e6                                    |
    | started_at          | 2016-10-08 15:17:14                                                     |
    | topic               | dhcp_agent                                                              |
    +---------------------+-------------------------------------------------------------------------+
    

    Bu çıktıda, heartbeat_timestamp neutron sunucudaki zamandır. Bu uzantının doğru çalışması için tüm ajanları bu saatte senkronize etmeniz gerekmez. configurations, ajanı veya çalışma zamanı verisi için statik yapılandırmayı tanımlar. Bu aracı bir DHCP ajanıdır ve bir ağ, bir alt ağ ve üç bağlantı noktasına ev sahipliği yapar.

    Farklı türde ajanlar farklı ayrıntılar gösterir. Aşağıdaki çıktı bir Linux köprü ajanı için bilgi gösterir:

    $ openstack network agent show 22467163-01ea-4231-ba45-3bd316f425e6
    +---------------------+-------------------------------------------------------------------------+
    | Field               | Value                                                                   |
    +---------------------+-------------------------------------------------------------------------+
    | admin_state_up      | UP                                                                      |
    | agent_type          | Metering agent                                                          |
    | alive               | False                                                                   |
    | availability_zone   | None                                                                    |
    | binary              | neutron-linuxbridge-agent                                               |
    | configurations      | measure_interval='30', metering_driver='neutron.services.metering.drive |
    |                     | rs.noop.noop_driver.NoopMeteringDriver', report_interval='300'          |
    | created_at          | 2016-10-08 15:17:14                                                     |
    | description         | None                                                                    |
    | heartbeat_timestamp | 2016-10-24 13:53:35                                                     |
    | host                | HostB                                                                   |
    | id                  | 22467163-01ea-4231-ba45-3bd316f425e6                                    |
    | started_at          | 2016-10-08 15:17:14                                                     |
    | topic               | dhcp_agent                                                              |
    +---------------------+-------------------------------------------------------------------------+
    

    Çıktı bridge-mapping‘i ve bu L2 ajanı üzerindeki sanal ağ aygıtlarının sayısını gösterir.

DHCP ajanına ağ ataması yönetimi

Tek bir ağ birden fazla DHCP aracısına atanabilir ve bir DHCP aracı birden fazla ağa ev sahipliği yapabilir. DHCP aracısına bir ağ ekleyebilir ve bunlardan birisini kaldırabilirsiniz.

  1. Varsayılan zamanlama.

    Bir bağlantı noktasına sahip bir ağ oluşturduğunuzda, ağ etkin bir DHCP aracısı için zamanlanır. Birçok etkin DHCP aracı çalışıyorsa, birini rasgele seçin. Daha gelişmiş zamanlama algoritmaları, daha sonra nova-schedule ile aynı şekilde tasarlayabilirsiniz.

    $ neutron net-create net2
    $ neutron subnet-create net2 198.51.100.0/24 --name subnet2
    $ neutron port-create net2
    $ openstack network agent list --agent-type dhcp --host qiaomin-free
    +--------------------------------------+------------+-------+-------------------+-------+-------+--------------------+
    | ID                                   | Agent Type | Host  | Availability Zone | Alive | State | Binary             |
    +--------------------------------------+------------+-------+-------------------+-------+-------+--------------------+
    | e838ef5c-75b1-4b12-84da-7bdbd62f1040 | DHCP agent | HostA | nova              | True  | UP    | neutron-dhcp-agent |
    +--------------------------------------+------------+-------+-------------------+-------+-------+--------------------+
    

    HostA üzerindeki DHCP ajanı için ayrılmıştır. dnsmasq komutu ile davranışı doğrulamak isterseniz, ağ için bir alt ağ oluşturmanız gerekir, çünkü DHCP ajanı sadece bir DHCP varsa dnsmasq servisini başlatır.

  2. Verilen bir DHCP ajanına bir ağ ata.

    Ağı sunmak için başka bir DHCP ajanı eklemek için bu komutu kullanın:

    $ neutron dhcp-agent-network-add f28aa126-6edb-4ea5-a81e-8850876bc0a8 net2
    Added network net2 to dhcp agent
    $ openstack network agent list --agent-type dhcp --host qiaomin-free
    +--------------------------------------+------------+-------+-------------------+-------+-------+--------------------+
    | ID                                   | Agent Type | Host  | Availability Zone | Alive | State | Binary             |
    +--------------------------------------+------------+-------+-------------------+-------+-------+--------------------+
    | e838ef5c-75b1-4b12-84da-7bdbd62f1040 | DHCP agent | HostA | nova              | True  | UP    | neutron-dhcp-agent |
    | f28aa126-6edb-4ea5-a81e-8850876bc0a8 | DHCP agent | HostB | nova              | True  | UP    | neutron-dhcp-agent |
    +--------------------------------------+------------+-------+-------------------+-------+-------+--------------------+
    

    Her iki DHCP ajanı net2 ağını sunar.

  3. Belirtilen bir DHCP ajanında bir ağ kaldırın.

    Bu komut, önceki komutun kardeşi komutudur. HostA için DHCP aracısından ``net2``yi çıkartın:

    $ 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           | :-)   |
    +--------------------------------------+-------+----------------+-------+
    

    HostB için yalnızca DHCP ajanının net2 ağını barındırdığını görebilirsiniz.

DHCP ajanının HA’sı

Bir VM’yi net2 üzerinde önyükleyin. Her iki DHCP ajanı da net2 dosyasını barındıracaktır. Aracılar, VM’nin yine de istenen IP’yi alıp alamayacaklarını görmek için başarısız olurlar.

  1. Bir VM’yi net2 üzerinden önyükleyin:

    $ openstack network list
    +--------------------------------------+------+--------------------------------------+
    | ID                                   | Name | Subnets                              |
    +--------------------------------------+------+--------------------------------------+
    | 89dca1c6-c7d4-4f7a-b730-549af0fb6e34 | net1 | f6c832e3-9968-46fd-8e45-d5cf646db9d1 |
    | 9b96b14f-71b8-4918-90aa-c5d705606b1a | net2 | 6979b71a-0ae8-448c-aa87-65f68eedcaaa |
    +--------------------------------------+------+--------------------------------------+
    $ openstack server create --image tty  --flavor 1 myserver4 \
      --nic net-id=9b96b14f-71b8-4918-90aa-c5d705606b1a
    ...
    $ openstack server list
    +--------------------------------------+-----------+--------+-------------------+------------+
    | ID                                   | Name      | Status | Networks          | Image Name |
    +--------------------------------------+-----------+--------+-------------------+------------+
    | c394fcd0-0baa-43ae-a793-201815c3e8ce | myserver1 | ACTIVE | net1=192.0.2.3    | cirros     |
    | 2d604e05-9a6c-4ddb-9082-8a1fbdcc797d | myserver2 | ACTIVE | net1=192.0.2.4    | ubuntu     |
    | c7c0481c-3db8-4d7a-a948-60ce8211d585 | myserver3 | ACTIVE | net1=192.0.2.5    | centos     |
    | f62f4731-5591-46b1-9d74-f0c901de567f | myserver4 | ACTIVE | net2=198.51.100.2 | cirros1    |
    +--------------------------------------+-----------+--------+-------------------+------------+
    
  2. Her iki DHCP ajanının net2‘yi barındırdığına emin olun:

    Ağı ajanlara atamak için önceki komutları kullanın.

    $ 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           | :-)   |
    +--------------------------------------+-------+----------------+-------+
    

DHCP ajanının HA’sını test etmek için:

  1. myserver4 VM’ine giriş yapın ve udhcpc, dhclient veya başka DHCP istemcisini çalıştırın.
  2. HostA üzerindeki DHCP ajanını durdurun. neutron-dhcp-agent çalıştırılabilir dosyasını durdurmanın dışında, dnsmasq işlemlerini de durdurmak zorundasınız.
  3. VM üzerinde DHCP istemcisini istenilen IP’yi alabildiğini görmek için çalıştırın.
  4. HostB üzerinde de DHCP ajanını durdur.
  5. VM’de udhcpc‘yi çalıştır; istenilen IP’yi alamadı.
  6. HostB üzerinde DHCP ajanını başlat. VM istenilen IP’yi tekrar alır.

Bir ajanı devre dışı bırakmak veya kaldırmak

Bir yönetici, bir sistem donanımının veya yazılım yükseltmesinin planlanması durumunda bir ajanı devre dışı bırakmak isteyebilir. Zamanlama’yı destekleyen bazı ajanlar, L3 ve DHCP ajanları gibi ajanların devre dışı bırakılmasını ve etkinleştirilmesini de desteklemektedir. Ajan devre dışı bırakıldıktan sonra, zamanlayıcı ajana yeni kaynaklar zamanlamaz.

Ajan devre dışı bırakıldıktan sonra ajanı güvenli bir şekilde kaldırabilirsiniz. Ajanı devre dışı bıraktıktan sonra bile, ajandaki kaynaklar atanır. Ajan silmeden önce ajandaki kaynakları kaldırdığınızdan emin olun.

HostA’daki DHCP ajanını durdurmadan önce devre dışı bırakın:

$ neutron agent-update a0c1c21c-d4f4-4577-9ec7-908f2d48622d --admin-state-up False
$ neutron agent-list
$ openstack network agent list
+--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+
| ID                                   | Agent Type         | Host  | Availability Zone | Alive | State | Binary                    |
+--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+
| 22467163-01ea-4231-ba45-3bd316f425e6 | Linux bridge agent | HostA | None              | True  | UP    | neutron-metering-agent    |
| 2444c54d-0d28-460c-ab0f-cd1e6b5d3c7b | DHCP agent         | HostA | None              | True  | UP    | neutron-openvswitch-agent |
| 3066d20c-9f8f-440c-ae7c-a40ffb4256b6 | Linux bridge agent | HostB | nova              | True  | UP    | neutron-l3-agent          |
| 55569f4e-6f31-41a6-be9d-526efce1f7fe | DHCP agent         | HostB | nova              | True  | UP    | neutron-l3-agent          |
+--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+

HostA’daki DHCP ajanını durdurduktan sonra, aşağıdaki komutu kullanarak silebilirsiniz:

$ openstack network agent delete 2444c54d-0d28-460c-ab0f-cd1e6b5d3c7b
$ openstack network agent list
+--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+
| ID                                   | Agent Type         | Host  | Availability Zone | Alive | State | Binary                    |
+--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+
| 22467163-01ea-4231-ba45-3bd316f425e6 | Linux bridge agent | HostA | None              | True  | UP    | neutron-metering-agent    |
| 3066d20c-9f8f-440c-ae7c-a40ffb4256b6 | Linux bridge agent | HostB | nova              | True  | UP    | neutron-l3-agent          |
| 55569f4e-6f31-41a6-be9d-526efce1f7fe | DHCP agent         | HostB | nova              | True  | UP    | neutron-l3-agent          |
+--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+

Silme işleminden sonra, DHCP ajanını yeniden başlatırsanız, ajan listesinde yeniden görünür.

DHCP yüksek kullanılabilirliğini varsayılan olarak etkinleştirme

Aşağıdaki yapılandırma seçeneğini /etc/neutron/neutron.conf dosyasında belirleyerek bir ağa atanmış varsayılan DHCP ajanlarının sayısını kontrol edebilirsiniz.

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.