Ana içeriğe geç

Wallarm NGINX Node için Kaynak Ayırma

Wallarm NGINX düğümü için ayrılan bellek ve CPU kaynak miktarı, isteklerin işlenme kalitesini ve hızını belirler. Bu talimatlar, kendi kendine barındırılan NGINX düğümü için bellek tahsisi ile ilgili önerileri açıklamaktadır.

Bir filtreleme düğümünde iki ana bellek ve CPU tüketicisi bulunmaktadır:

  • Tarantool, postanalytics module olarak da adlandırılır. Bu, yerel veri analiz arka planı ve bir filtreleme düğümündeki birincil bellek tüketicisidir.

  • NGINX asıl filtreleme düğümü ve ters proxy bileşenidir.

NGINX CPU kullanımı, RPS seviyesi, istek ve yanıt ortalama boyutu, düğüm tarafından işlenen özel kurallar seti sayısı, Base64 gibi veri kodlamalarının veya veri sıkıştırmanın kullanılan tipleri ve katmanları gibi birçok faktöre bağlıdır.

Ortalama olarak, bir CPU çekirdeği yaklaşık 500 RPS işleyebilir. Üretim modunda çalışırken, NGINX işlemi için en az bir CPU çekirdeği ve Tarantool işlemi için bir çekirdek tahsis edilmesi önerilir. Çoğu durumda, başlangıçta bir filtreleme düğümünün kaynaklarının aşırı tahsis edilmesi, gerçek üretim trafiği seviyeleri için gerçek CPU ve bellek kullanımının izlenmesi ve tahsis edilen kaynakların kademeli olarak makul bir seviyeye (trafik zirveleri ve düğüm yedekliliği için en az 2 kat boşluklu) düşürülmesi önerilir.

Tarantool

Postanalytics uses the in-memory storage Tarantool. The Tarantool database is used to keep in a circular buffer a local copy of the data stream processed by a filtering node, including request/response headers and request bodies (but not response bodies).

To make a filtering node efficient, the database should keep at least 15 minutes of transmitted data with about 2x overhead for data serialization. Following these points, the amount of memory can be estimated by the formula:

Speed of request processing per minute in bytes * 15 * 2

For example, if a filtering node is handling at peak 50 Mbps of end user requests, the required Tarantool database memory consumption can be estimated as the following:

50 Mbps / 8 (bits in a byte) * 60 (seconds in a minute) * 15 * 2 = 11,250 MB (or ~ 11 GB)

Kubernetes Ingress Controller’da Kaynak Tahsisi

Tarantool memory is configured for the ingress-controller-wallarm-tarantool pod using the following sections in the values.yaml file:

  • To set up memory in GB:

    controller:
      wallarm:
        tarantool:
          arena: "1.0"
    

  • To set up memory in CPU:

    controller:
      wallarm:
        tarantool:
          resources:
            limits:
              cpu: 400m
              memory: 3280Mi
            requests:
              cpu: 200m
              memory: 1640Mi
    

Listed parameters are set by using the --set option of the commands helm install and helm upgrade, for example:

helm install --set controller.wallarm.tarantool.arena='1.0' <INGRESS_CONTROLLER_RELEASE_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE>

There are also other parameters required for correct Ingress controller installation. Please pass them in the --set option too.

helm upgrade --reuse-values --set controller.wallarm.tarantool.arena='0.4' <INGRESS_CONTROLLER_RELEASE_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE>

All-in-One Installer Kullanılıyorsa Kaynak Tahsisi

Tarantool belleğinin boyutlandırılması, /opt/wallarm/env.list yapılandırma dosyasındaki SLAB_ALLOC_ARENA özniteliği kullanılarak kontrol edilir. Bellek tahsis etmek için:

  1. /opt/wallarm/env.list dosyasını düzenleme modunda açın:

    sudo vim /opt/wallarm/env.list
    
  2. SLAB_ALLOC_ARENA özniteliğini bellek boyutuna ayarlayın. Değer bir tam sayı veya ondalık sayı (ondalık ayırıcı olarak nokta . kullanılır) olabilir. Örneğin:

    SLAB_ALLOC_ARENA=1.0
    
  3. Wallarm servislerini yeniden başlatın:

    sudo systemctl restart wallarm.service
    

Diğer Dağıtım Seçeneklerinde Kaynak Tahsisi

Tarantool belleğinin boyutlandırılması, /etc/default/wallarm-tarantool yapılandırma dosyasındaki SLAB_ALLOC_ARENA özniteliği kullanılarak kontrol edilir. Bellek tahsis etmek için:

  1. Tarantool yapılandırma dosyasını düzenleme modunda açın:
sudo vim /etc/default/wallarm-tarantool
sudo vim /etc/default/wallarm-tarantool
sudo vim /etc/default/wallarm-tarantool
sudo vim /etc/default/wallarm-tarantool
sudo vim /etc/default/wallarm-tarantool
sudo vim /etc/sysconfig/wallarm-tarantool
sudo vim /etc/sysconfig/wallarm-tarantool
sudo vim /etc/sysconfig/wallarm-tarantool
sudo vim /etc/sysconfig/wallarm-tarantool
  1. SLAB_ALLOC_ARENA özniteliğini bellek boyutuna ayarlayın. Değer bir tam sayı veya ondalık sayı (ondalık ayırıcı olarak . kullanılır) olabilir. Örneğin:
SLAB_ALLOC_ARENA=1.0
  1. Tarantool’u yeniden başlatın:
sudo systemctl restart wallarm-tarantool
sudo systemctl restart wallarm-tarantool
sudo service wallarm-tarantool restart
sudo service wallarm-tarantool restart
sudo service wallarm-tarantool restart
sudo systemctl restart wallarm-tarantool
sudo systemctl restart wallarm-tarantool
sudo systemctl restart wallarm-tarantool
sudo systemctl restart wallarm-tarantool

NGINX

NGINX’in bellek tüketimi birçok faktöre bağlıdır. Ortalama olarak, aşağıdaki gibi tahmin edilebilir:

Eşzamanlı istek sayısı * Ortalama istek boyutu * 3

Örneğin:

  • Filtreleme düğümü, zirvede 10000 eşzamanlı isteği işlemektedir,

  • ortalama istek boyutu 5 kB’dır.

NGINX bellek tüketimi şu şekilde tahmin edilebilir:

10000 * 5 kB * 3 = 150000 kB (veya ~150 MB)

Bellek miktarını tahsis etmek için:

  • NGINX Ingress controller pod’u (ingress-controller) için, values.yaml dosyasında aşağıdaki bölümleri helm install veya helm upgrade komutlarının --set seçeneği ile yapılandırın:

    controller:
      resources:
        limits:
          cpu: 400m
          memory: 3280Mi
        requests:
          cpu: 200m
          memory: 1640Mi
    

    Parametreleri değiştiren komut örnekleri:

    helm install --set controller.resources.limits.cpu='2000m',controller.resources.limits.memory='3280Mi' <INGRESS_CONTROLLER_RELEASE_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE>
    

    Doğru Ingress controller kurulumu için diğer parametreler de gereklidir. Lütfen bunları da --set seçeneğine ekleyin.

    helm upgrade --reuse-values --set controller.resources.limits.cpu='2000m',controller.resources.limits.memory='3280Mi' <INGRESS_CONTROLLER_RELEASE_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE>
    
  • Diğer dağıtım seçenekleri için, NGINX yapılandırma dosyalarını kullanın.

Sorun Giderme

Bir Wallarm düğümü beklenenden daha fazla bellek ve CPU tüketiyorsa, kaynak kullanımını azaltmak için CPU yüksek kullanım sorun giderme makalesindeki önerileri inceleyin ve uygulayın.