Tag Archives: Ltm

F5 Optimize Caching(Ramcache) Kullanımı 10X Fark

Optimized-caching profili ile kullanımını anlatmaya çalışacağım. Eski adı ile ramcache. 11.x ile birlikte profiller ayrıldılar acceleration ana menüsü altında toplandılar.

Not: Test değerleri sata diskde duran normal bir vm appliance ltm 11.4 üstünde yapılmıştır. Node olarak 2 ubuntu makine test yapılanda bir başka ubuntu sunucu vardır. Hepsi sata disk üzerinde durmaktadır.

Öncelikle tmsh komutlarından bahsedeyim.

tmsh tarafında cache itemleri listeleme, tüm cache’i silme, cache itemi silme kısımları en çok kullanacağımız kısımlardan.

#Tüm cache itemlerini listeler
>show ltm profile ramcache optimized-caching
 
#Tüm cache'i silme flush etmek için
>delete ltm profile ramcache optimized-caching
 
#Cache içinde belirli bir itemi silmek için
>delete ltm profile ramcache optimized-caching uri cached_uri
 
#Not: Uri dışında exact,host,max-response şeklinde değerlere görede item silebilmektesiniz.

Alttaki resimde gördüğünüz gibi acceleration -> profiles -> web acceleration -> optimized cache ile bu özelliğin ayarlarına ulaşabiliyorsunuz.

cache1

Benim kullandığım ayarlar aşağıdaki gibi. Default ile tek farkı cache expire zamanını 300 saniye 5 dakikaya çektim.

cache2

Evet şimdi profilimizi vserver kısmında acceleration altında web acceleration kısmına optimized-caching olarak bind ediyoruz.

cache3

İşlemimiz tamamlanmış durumdadır. Artık optimize-caching ile contentleriniz cachelenmeye başlamıştır.

Yaptığım bazı testleri sizler ile de paylaşıyım.

#Bakıyoruz ve Cache boş.
 
(cfg-sync Standalone)(Active)(/Common)(tmos)# show ltm profile ramcache optimized-caching
Ltm::Ramcaches /Common/optimized-caching
Total records returned: 0
 
#İsteğimizi atıyoruz ve 188 milisaniye olarak görüyoruz.
 
> time curl 10.35.97.102/f5logo.jpg > /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  4699  100  4699    0     0  25855      0 --:--:-- --:--:-- --:--:-- 63314
 
real    0m0.188s
user    0m0.004s
sys     0m0.004s
 
#Şimdi optimized cache'i vserver'a bind ediyoruz ve tekrar istek atıyoruz. Not : 2'nci istek sonucudur.
 
#Gördüğünüz gibi aradaki fark nerede ise 10 katından fazla.
> time curl 10.35.97.102/f5logo.jpg > /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  4699  100  4699    0     0   558k      0 --:--:-- --:--:-- --:--:-- 1760k
 
real    0m0.015s
user    0m0.004s
sys     0m0.003s
 
#Cache itemlerimizi listeleyelim ve f5logo.jpg nin cache itemleri arasında olduğundan emin olalım.
 
(cfg-sync Standalone)(Active)(/Common)(tmos)# show ltm profile ramcache optimized-caching
Ltm::Ramcaches /Common/optimized-caching
 
Host: 10.35.97.102
URI : /f5logo.jpg
--------------------------------------
  Source Slot/TMM  1/1
  Owner Slot/TMM   1/1
  Rank             1
 
  Size (bytes)     4937
  Hits             4
  Received         2014-08-24 02:03:27
  Last Sent        2014-08-24 02:04:03
  Expires          2014-08-24 02:08:51
  Vary Type        none
  Vary Count       1
  Vary User Agent  none
  Vary Encoding    none
 
Host: 10.35.97.102
URI : /f5logo.jpg
--------------------------------------
  Source Slot/TMM  1/0
  Owner Slot/TMM   1/1
  Rank             1
 
  Size (bytes)     4937
  Hits             4
  Received         2014-08-24 02:03:27
  Last Sent        2014-08-24 02:04:02
  Expires          2014-08-24 02:08:51
  Vary Type        none
  Vary Count       1
  Vary User Agent  none
  Vary Encoding    none
Total records returned: 2
 
#Görüldüğü gibi 300 saniye lik süre için bu item optimized-cache(ramcache) tarafından serv edilmektedir. 
#300 Saniyelik interval expire olunca cache invalide olur ve tekrar cachelenir.
 
#Şimdi farklı bir içerik deneyelim mesela php modülleri listeleyen bir kod olsun
 
#index.php
<?php phpinfo(); phpinfo(INFO_MODULES); ?>
 
#Cache'i flush edip disable ettikten sonra deniyoruz.
 
(cfg-sync Standalone)(Active)(/Common)(tmos)# show ltm profile ramcache optimized-caching
root@(f5tolga)(cfg-sync Standalone)(Active)(/Common)(tmos)# 
 
> time curl 10.35.97.102/index.php > /dev/null 
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  114k    0  114k    0     0   224k      0 --:--:-- --:--:-- --:--:--  298k
 
real    0m0.514s
user    0m0.002s
sys     0m0.004s
 
#Buda cache aktif olduktan sonra ;
 
> time curl 10.35.97.102/index.php > /dev/null 
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  114k  100  114k    0     0  8537k      0 --:--:-- --:--:-- --:--:-- 17.8M
 
real    0m0.021s
user    0m0.003s
sys     0m0.005s
 
#Cache item listemizi tekrar kontrol ediyoruz
 
(cfg-sync Standalone)(Active)(/Common)(tmos)# show ltm profile ramcache optimized-caching
Ltm::Ramcaches /Common/optimized-caching
 
Host: 10.35.97.102
URI : /index.php
--------------------------------------
  Source Slot/TMM  1/1
  Owner Slot/TMM   1/1
  Rank             1
 
  Size (bytes)     116949
  Hits             2
  Received         2014-08-24 02:11:43
  Last Sent        2014-08-24 02:11:46
  Expires          2014-08-24 02:17:06
  Vary Type        none
  Vary Count       1
  Vary User Agent  none
  Vary Encoding    none
 
Host: 10.35.97.102
URI : /index.php
--------------------------------------
  Source Slot/TMM  1/0
  Owner Slot/TMM   1/1
  Rank             1
 
  Size (bytes)     116949
  Hits             1
  Received         2014-08-24 02:11:43
  Last Sent        2014-08-24 02:11:45
  Expires          2014-08-24 02:17:06
  Vary Type        none
  Vary Count       1
  Vary User Agent  none
  Vary Encoding    none
Total records returned: 2

Evet görüldüğü gibi 10 kat kadar bir performans artışı sağlamış oluyoruz bu özellik ile. Gerçektende çok güçlü çalışıyor. Yalnız dikkat edilmesi gereken çok önemli bir husus var.

optimized-cache kullanacaklar çok dikkatli olmalısınız. Eğer herşeyi cacheler iseniz session login olanlarıda cache lediği için ilk login olan insanın örnek sitenizde profil varsa profilini bir başkası ekranında görüverir. Yaşanmış bir tecrübedir. Dolayısı ile Profil den neyi cache leyip neyi cachelemeyeceğinizi include/exclude lar ile birlikte iyi ayırmalısınız. Benim görüşüm sadece static contentleri bile cacheleseniz inanılmaz bir improvement’a sahip olursunuz.

F5 Irule Http url ve ip bazlı filtreleme

Http uri bazlı ip ye göre filtreleme kuralına bir örnek olarak ;

/ss uri si çağrıldığında eğer client ip adresi izinli_address listesinde yok ise (bu liste irule->data_group altında) reject ile atar eğer var ise izin verir ve arkadaki sunucuya istek ulaşır.

when HTTP_REQUEST {
   if { [HTTP::uri] starts_with "/ss" and ![class match [IP::client_addr] eq izinli_address] } {
reject
}
}

Kuralımızı test ettiğimizde ;

#Client ip Data group'a ekli değilken reject
 
#curl 10.35.97.102/ss
curl: (52) Empty reply from server
 
#Client ip Data group'a ekli iken geçerli response alıyoruz.
 
# curl 10.35.97.102/ss -I
HTTP/1.1 404 Not Found
Date: Sat, 23 Aug 2014 18:31:41 GMT
Server: Cherokee/1.2.101 (Debian GNU/Linux)
Content-Length: 345
Content-Type: text/html
Cache-Control: no-cache
Pragma: no-cache

F5 High Speed Logging Irule & Splunk Entegrasyonu

High speed logging özelliği F5 tarafından yüksek volume ve düşük yük için design edilmiştir. Açıkcası çokda başarılı olduğunu söylemeliyim.

https://devcentral.f5.com/wiki/irules.HSL.ashx

Ben F5 loglarını splunk tarafında topluyorum. Siz Splunk kullanmıyorsanız syslog-ng v.b. gibi bir çok seçenek kullanabilirsiniz. Ayrıca opensource log indexerlar olarak graylog, logstash2 de deneyebilirsiniz.

Splunk tarafı için hazırlıklarımız;

Settings -> Data -> Forwarding and receiving kısmına gidiyoruz.
Configure Receiving kısmında geçiyoruz. New seçerek yeni listener oluşturuyoruz.
Gerekli listen portunu yazıyoruz ve save diyoruz.

splunk1

Bizim örneğimizde bu port udp 515. Böylece F5 tarafından yollanan logları splunk listener olan 515 portuna gönderiyor olacağız.

splunk2Splunk tarafındaki ayarlamayı tamamladıktan sonra. Splunk indexer makinemizi F5 tarafına önce node olarak ekliyoruz.

f5_1

Ardından Bu node ile syslog poolumuzu oluşturuyoruz. Port 515 ile nodu poola ekliyoruz. Poolumuzun adı syslog

f5_2

En sonunda HSL Irule’u işleyelim.

Logu response ile yazıyoruz. Client accept ve http request tarafında değişkenleri set ediyoruz.

HSL::send $hsl "$clientip $host - \[$now\] \"$method $uri HTTP/[HTTP::version]\" [HTTP::status] $contentlength \"$referer\" \"$agent\"\n"

Bu HSL ile yer alan dizilim splunk access_combined log formatı ile birebir uyumlu olduğundan splunk indexer bunu access log olarak algılıyor ve ona göre indexliyor. Böylece useragent, uri, ident gibi tüm unsurları filtreleyerek arama konusunda hiç bir sorun yaşamıyoruz.

#HSL Loglama
when CLIENT_ACCEPTED {
   set hsl [HSL::open -proto UDP -pool syslog]
   set clientip [IP::remote_addr]
}
when HTTP_REQUEST {
   set method [HTTP::method]
   set uri [HTTP::uri]
   set host [HTTP::host]
   set referer [HTTP::header "Referer"]
   set agent  [HTTP::header "User-Agent"]
}
when HTTP_RESPONSE {
   set now [clock format [clock seconds] -format "%d/%b/%Y:%H:%M:%S %z"]
   set contentlength [HTTP::header "Content-Length"]
   HSL::send $hsl "$clientip $host - \[$now\] \"$method $uri HTTP/[HTTP::version]\" [HTTP::status] $contentlength \"$referer\" \"$agent\"\n"
}

Loglamak istediğiniz HTTP servis edilen vserver larınıza bind edebilirsiniz. Splunk bunları ident=http_host headerında yer alan domainlere göre size filtreleme imkanı veriyor.

Splunk örnek olarak bunu gösterebiliriz. 515 port udp ve access_combined olarak setli F5 tarafından HSL den gelen indexlenmiş bir satır log.

splunk3

Bir sonraki yazımızda HSL ile request ve response time larıda access log ile birlikte loglamayı sağlayan bir irule inceleyeceğiz. Böylece Farklı bir tool kullanmadan request/response time larınızı görebilir ve bunları grafiğe splunk tarafında dökebilirsiniz, en çok süren ve yavaş çalışan url yada iç servislerinizi görebilirsiniz.