Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Magento doen affeceren - PHPWVL14

Magento doen affeceren - PHPWVL14

Slides for my Magento performance talk at PHPWVL14. My first ever talk deliverd in my local dialect "West-Vlaams". Will make an English version soon.

Thijs Feryn

April 08, 2014
Tweet

More Decks by Thijs Feryn

Other Decks in Technology

Transcript

  1. Magento doen affeceren
    Deur Thijs’tn van Feryn’s

    View full-size slide

  2. keireltjes
    Thijs
    Yo
    Ik zien

    View full-size slide

  3. En ik zien
    @ThijsFeryn
    ip Twitter

    View full-size slide

  4. ’k Zien
    bie
    Evangelist

    View full-size slide

  5. En ’k zitt’n
    van
    ook in ’t besteur

    View full-size slide

  6. ’k Weunen in Diksmude

    View full-size slide

  7. Aan de Pluum’n

    View full-size slide

  8. Juuste niet bachten de Kupe

    View full-size slide

  9. ’t Is soms een bitje trage

    View full-size slide

  10. Mo wel wreed flexibel

    View full-size slide

  11. In’t begin kenden we
    der niet vele van

    View full-size slide

  12. W’en wreed vele
    biegeleerd

    View full-size slide

  13. Mo ’t ed
    tied
    gekost

    View full-size slide

  14. De eerste
    pogingen

    View full-size slide

  15. Eerste pogingen
    ✓Dikke machinen derachter zetten
    ✓Vele heheuhen en zwoare CPU’s
    ✓Loadbalancing ip de webservers
    ✓Master/master op de MySQL’s
    ✓Hoge memory limit
    ✓APC byte code caching

    View full-size slide

  16. Ip zoek no
    Magento
    kennisse

    View full-size slide

  17. Eerste Magento
    kennisse
    ✓Caching activeren in ’t admin panel
    ✓Flat catalogs
    ✓De Magento compiler
    ✓JS & CSS minification

    View full-size slide

  18. Magento compiler is
    dikke zever en een
    hoop miserie!

    View full-size slide

  19. Gebruukt een echte
    byte code cache in
    de plekke

    View full-size slide

  20. ’t Gienk ol een klein bitje
    rapper
    Mo nie voe te roepen

    View full-size slide

  21. Eerste concluuzjes

    View full-size slide

  22. Eerste
    concluuzjes
    ✓Gelik verwacht vele RAM en CPU
    verbruuk
    ✓Verdacht vele I/O
    ✓Meha vele belastienge ip de MySQL

    View full-size slide

  23. W’en  leren  cachen

    View full-size slide

  24. Standoard ip de
    schieve
    in /var/cache

    View full-size slide

  25. ./mage-­‐-­‐c  
    ./mage-­‐-­‐a  
    ./mage-­‐-­‐4  
    ./mage-­‐-­‐7  
    ./mage-­‐-­‐e  
    ./mage-­‐-­‐5  
    ./mage-­‐-­‐b  
    ./mage-­‐-­‐9  
    ./mage-­‐-­‐0  
    ./mage-­‐-­‐f  
    ./mage-­‐-­‐3  
    ./mage-­‐-­‐6  
    ./mage-­‐-­‐8  
    ./mage-­‐-­‐d  
    ./mage-­‐-­‐1

    View full-size slide

  26. ./mage-­‐-­‐8/mage-­‐-­‐-­‐internal-­‐metadatas-­‐-­‐-­‐MAGE_STORE_BE_EN_CONFIG_CACHE  
    ./mage-­‐-­‐8/mage-­‐-­‐-­‐internal-­‐metadatas-­‐-­‐-­‐MAGE_STORE_LU_EN_CONFIG_CACHE  
    ./mage-­‐-­‐8/mage-­‐-­‐-­‐MAGE_STORE_NL_NL_CONFIG_CACHE  
    ./mage-­‐-­‐8/mage-­‐-­‐-­‐MAGE_STORE_LU_EN_CONFIG_CACHE  
    ./mage-­‐-­‐8/mage-­‐-­‐-­‐MAGE_STORE_LU_FR_CONFIG_CACHE  
    ./mage-­‐-­‐8/mage-­‐-­‐-­‐MAGE_STORE_FR_EN_CONFIG_CACHE  
    ./mage-­‐-­‐8/mage-­‐-­‐-­‐internal-­‐metadatas-­‐-­‐-­‐MAGE_STORE_LU_FR_CONFIG_CACHE  
    ./mage-­‐-­‐8/mage-­‐-­‐-­‐MAGE_STORE_BE_FR_CONFIG_CACHE  
    ./mage-­‐-­‐8/mage-­‐-­‐-­‐MAGE_STORE_ADMIN_CONFIG_CACHE  
    ./mage-­‐-­‐8/mage-­‐-­‐-­‐internal-­‐metadatas-­‐-­‐-­‐MAGE_STORE_BE_FR_CONFIG_CACHE  
    ./mage-­‐-­‐8/mage-­‐-­‐-­‐MAGE_DB_PDO_MYSQL_DDL_sales_flat_shipment_grid_3  
    ./mage-­‐-­‐d/mage-­‐-­‐-­‐internal-­‐metadatas-­‐-­‐-­‐MAGE_APP_E4D52B98688947405EDE639E947EE03D  
    ./mage-­‐-­‐d/mage-­‐-­‐-­‐MAGE_APP_B1FB6E8F13287C01E5C05063633DDA4C  
    ./mage-­‐-­‐d/mage-­‐-­‐-­‐MAGE_DB_PDO_MYSQL_DDL_log_url_info_1  
    ./mage-­‐-­‐d/mage-­‐-­‐-­‐MAGE_APP_E4D52B98688947405EDE639E947EE03D  
    ./mage-­‐-­‐d/mage-­‐-­‐-­‐internal-­‐metadatas-­‐-­‐-­‐MAGE_APP_B1FB6E8F13287C01E5C05063633DDA4C  
    ./mage-­‐-­‐d/mage-­‐-­‐-­‐internal-­‐metadatas-­‐-­‐-­‐MAGE_DB_PDO_MYSQL_DDL_log_url_info_1  
    ./mage-­‐-­‐1/mage-­‐-­‐-­‐MAGE_Zend_LocaleC_nl_NL_currencysymbol_  
    ./mage-­‐-­‐1/mage-­‐-­‐-­‐MAGE_Zend_LocaleC_nl_NL_nametocurrency_  
    ./mage-­‐-­‐1/mage-­‐-­‐-­‐internal-­‐metadatas-­‐-­‐-­‐MAGE_Zend_LocaleC_nl_NL_currencynumber_  
    ./mage-­‐-­‐1/mage-­‐-­‐-­‐internal-­‐metadatas-­‐-­‐-­‐MAGE_Zend_LocaleC_nl_NL_currencysymbol_  
    ./mage-­‐-­‐1/mage-­‐-­‐-­‐MAGE_Zend_LocaleC_nl_NL_currencynumber_  
    ./mage-­‐-­‐1/mage-­‐-­‐-­‐internal-­‐metadatas-­‐-­‐-­‐MAGE_Zend_LocaleC_nl_NL_nametocurrency_

    View full-size slide

  27. In app/etc/local.xml
     
             
                   apc  
                   MAGE_  
             

    View full-size slide

  28.  
       
           
             
                 
                   
                   
                   
                 
             
         
       

    In app/etc/local.xml
    Meerdere
    servers meuglik

    View full-size slide

  29. Toch nog files in /var/
    cache?

    View full-size slide

  30. 2-level cache
    ✓Een rappe backend (den adapter)
    ✓Een trage backend (standoard file)

    View full-size slide

  31. /var/cache in tmpfs
    mount  -­‐t  tmpfs  -­‐o  size=20m  tmpfs  /var/www/var/cache

    View full-size slide

  32. De machienerie
    ipdrieven

    View full-size slide

  33. Zeker d’oede versies

    View full-size slide

  34. Magento werkt
    „zohezeid” niet met
    nieuwe versies

    View full-size slide

  35. Wieder en ’t an de
    klap gekrehen met
    vuuve punt viere

    View full-size slide

  36. Zoender byte code
    cache ziej gezien!

    View full-size slide

  37. We woaren vergeetn dat
    APC niet werkt ip FastCGI

    View full-size slide

  38. 19280  33686  1.3    0.4  322052  110408  ?  S  14:07  0:01  /usr/local/php-­‐5.4/bin/php-­‐cgi  
    18834  33696  0.0    0.0  267780  13608  ?    S  14:07  0:00  /usr/local/php-­‐5.4/bin/php-­‐cgi  
    19280  33698  0.9    0.4  321808  110948  ?  S  14:07  0:01  /usr/local/php-­‐5.4/bin/php-­‐cgi  
    19057  33700  0.0    0.0  268124  13416  ?    S  14:07  0:00  /usr/local/php-­‐5.4/bin/php-­‐cgi  
    18767  33710  0.0    0.0  269728  14156  ?    S  14:08  0:00  /usr/local/php-­‐5.4/bin/php-­‐cgi
    Losse processen zoender
    gedeelde cache

    View full-size slide

  39. We woaren ook vergeetn
    dat APC vuuligheid is

    View full-size slide

  40. root  26067  0.0  0.0  342892  6248  ?  S  13:43  0:00  php-­‐fpm:  master  process  (/etc/
    php5/fpm/php-­‐fpm.conf)  
    www-­‐data  26068    0.2    1.1  396952  94684  ?  S  13:43  0:03  php-­‐fpm:  pool  www  
    www-­‐data  26069    0.0    0.6  363472  56456  ?  S  13:43  0:01  php-­‐fpm:  pool  www  
    www-­‐data  26087    0.0    0.6  362708  50188  ?  S  13:44  0:00  php-­‐fpm:  pool  www
    Master proces dat de
    caches bieoet

    View full-size slide

  41. Opcache is machtig!
    … en ook een slag rapper

    View full-size slide

  42. zend_extension=/usr/lib/php5/20100525/opcache.so  
    opcache.validate_timestamps  =  off  
    opcache.memory_consumption  =  128  
    opcache.max_accelerated_files  =  20000
    Agressieve tuninge

    View full-size slide

  43. Files aangepast?
    !
    !
    !
    /etc/init.d/php-fpm reload
    of opcache_reset()

    View full-size slide

  44. realpath_cache_size  =  512k  
    realpath_cache_ttl  =  3600
    Poaden cachen

    View full-size slide

  45. Olles in’t heheuhen!!!

    View full-size slide

  46. %  time          seconds    usecs/call          calls        errors  syscall  
    -­‐-­‐-­‐-­‐-­‐-­‐  -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  
     53.78        0.012718                    13              953                  3  stat  
     34.15        0.008076                      2            3369              215  access  
       6.03        0.001426                      2              785                      flock  
       3.40        0.000803                      0            3283                      read  
       2.19        0.000519                      0            1210                      open  
       0.30        0.000071                      0              986                      write  
       0.10        0.000024                      0          24254                      time  
       0.05        0.000012                      0            1582                      fstat  
       0.00        0.000000                      0            1212                      close  
       0.00        0.000000                      0            2011            2011  lstat  
       0.00        0.000000                      0              976                      poll  
       0.00        0.000000                      0            1305                      lseek  
       0.00        0.000000                      0                  1                      mmap  
       0.00        0.000000                      0                  1                      munmap  
       0.00        0.000000                      0                84                      brk  
       0.00        0.000000                      0                  1                      rt_sigaction  
       0.00        0.000000                      0                  1                      rt_sigprocmask  
       0.00        0.000000                      0                  1                      pwrite  
       0.00        0.000000                      0                  4                      setitimer  
       0.00        0.000000                      0                  1                      socket  
       0.00        0.000000                      0                  1                  1  connect  
       0.00        0.000000                      0                  1                      accept  
       0.00        0.000000                      0                  1                      recvfrom  
       0.00        0.000000                      0                  2                      shutdown  
       0.00        0.000000                      0                  5                      setsockopt  
       0.00        0.000000                      0                  8                      fcntl  
       0.00        0.000000                      0                  2                      getdents  
       0.00        0.000000                      0                  5                      getcwd  
       0.00        0.000000                      0                  2                      chdir  
       0.00        0.000000                      0              217              217  readlink  
       0.00        0.000000                      0                  3                      umask  
    -­‐-­‐-­‐-­‐-­‐-­‐  -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  
    100.00        0.023649                                  42267            2447  total
    Vele  
    lstats
    Zonder  
    opcache

    View full-size slide

  47. %  time          seconds    usecs/call          calls        errors  syscall  
    -­‐-­‐-­‐-­‐-­‐-­‐  -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  
    100.00        0.000007                      0            3109                      read  
       0.00        0.000000                      0              971                      write  
       0.00        0.000000                      0            1182                      open  
       0.00        0.000000                      0            1184                      close  
       0.00        0.000000                      0              463                  2  stat  
       0.00        0.000000                      0            1548                      fstat  
       0.00        0.000000                      0              960                      poll  
       0.00        0.000000                      0            1271                      lseek  
       0.00        0.000000                      0                64                      brk  
       0.00        0.000000                      0                  1                      rt_sigaction  
       0.00        0.000000                      0                  1                      rt_sigprocmask  
       0.00        0.000000                      0                  1                      pwrite  
       0.00        0.000000                      0            3385              377  access  
       0.00        0.000000                      0                  3                      setitimer  
       0.00        0.000000                      0                  1                      socket  
       0.00        0.000000                      0                  1                      connect  
       0.00        0.000000                      0                  1                      accept  
       0.00        0.000000                      0                  1                      shutdown  
       0.00        0.000000                      0                  4                  1  setsockopt  
       0.00        0.000000                      0                  8                      fcntl  
       0.00        0.000000                      0              781                      flock  
       0.00        0.000000                      0                  2                      getdents  
       0.00        0.000000                      0                  3                      getcwd  
       0.00        0.000000                      0                  2                      chdir  
       0.00        0.000000                      0                  3                      umask  
       0.00        0.000000                      0                  2                      times  
       0.00        0.000000                      0            2195                      time  
    -­‐-­‐-­‐-­‐-­‐-­‐  -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  
    100.00        0.000007                                  17147              380  total
    Geen  
    lstats
    Met    
    opcache

    View full-size slide

  48. W’en ook naar HVVM
    gekeek’n

    View full-size slide

  49. De database is ook
    belangriek

    View full-size slide

  50. query_cache_limit                              =  5M  
    query_cache_size                                =  64M  
    join_buffer_size                                =  32M  
    innodb_buffer_pool_size                  =  1024M  
    innodb_additional_mem_pool_size  =  50M  
    key_buffer_size                                  =  64M  
    sort_buffer_size                                =  5M  
    read_buffer_size                                =  5M  
    read_rnd_buffer_size                        =  10M
    MySQL meer heheuhen
    geevn

    View full-size slide

  51. Wuk homme pak’n?

    View full-size slide

  52.  
         
             
                 
                     
                     
                     
                     
                   1  
                 
             
             
                 
                     
                     
                     
                     
                     
                   pdo_mysql  
                   mysql4  
                   SET  NAMES  utf8  
                   1  
                 
               
         

    R/W  
    splittinge

    View full-size slide

  53. En in ene keer was
    Redis doa gezet!

    View full-size slide

  54. is ZALIG!
    ✓Standoard ingebouwde replicoasje
    ✓Spesjale datatiep’n (hash, list, …)
    ✓De meuglikeid voe te saven ip disk
    ✓Session clustering
    ✓Cm_Cache_Backend_Redis standoard
    vanaf Magento 1.8 CE en 1.13 EE
    ✓Geen 2-level cache
    ✓Meerdere databases
    ✓Authenticoasje

    View full-size slide

  55. Cm_Cache_Backend_Redis
    https://github.com/colinmollenhour/
    Cm_Cache_Backend_Redis

    View full-size slide

  56. In app/etc/local.xml
     
         
           Cm_Cache_Backend_Redis  
             
               127.0.0.1  
               6379  
                 
               1  
                 
               0  
               1  
               10  
               0  
               1  
               1  
               20480  
               gzip  
             
         

    View full-size slide

  57. Cm_RedisSession
    https://github.com/colinmollenhour/Cm_RedisSession

    View full-size slide

  58. In app/etc/modules/Cm_RedisSession.xml
     
         
             
               true  
               community  
             
         

    View full-size slide

  59. In app/etc/local.xml
     
       db  
         
           127.0.0.1  
           6379  
             
           2.5  
             
           1  
           2048  
           gzip  
           1  
           6  
           5  
           30  
           7200  
         

    View full-size slide

  60. Varnish
    ✓Werkt juuste in de cataloog en de
    CMS pagina’s
    ✓Werkt dus nie bie de checkout
    ✓Oj sessiedata gebruukt in de
    cataloog goat ’t ook niet marcheren
    ✓Is ook ideal voor statische bestand’n
    ✓Gin SSL onderseunienge
    ✓De beste maniere voe full page
    caching te doen

    View full-size slide

  61. Hit rate is niet te vet

    View full-size slide

  62. Turpentine
    https://github.com/nexcess/magento-turpentine

    View full-size slide

  63. Turpentine
    ✓Community module voe Varnish in
    Magento
    ✓ESI of AJAX voe session data
    ✓Configureerboar in den admin
    ✓VCL wordt geduwd van Turpentine no
    Varnish via den Telnet interface
    ✓Doet de nodige purginge
    ✓SSL terminoasje via Nginx of Pound

    View full-size slide

  64. Lesti_FPC
    Oj nie met Varnish wilt of kund werk’n
    https://github.com/GordonLesti/Lesti_Fpc

    View full-size slide

  65. In app/etc/local.xml
     
         
           86400  
      false  
           Cm_Cache_Backend_Redis  
             
               127.0.0.1  
               6379  
               cache-­‐fpc  
               1  
                 
               1  
               1  
               86400  
               10  
               1  
               1  
               gzip  
             
         

    Werkt  ook  
    met  andere  
    backends

    View full-size slide

  66. Makt van je logtabel’n
    blackhole tables.
    !
    Met Varnish/Lesti_FPC gebruuk je ze
    toch nie

    View full-size slide

  67. ALTER  TABLE  `log_customer`  ENGINE=BLACKHOLE;  
    ALTER  TABLE  `log_quote`  ENGINE=BLACKHOLE;  
    ALTER  TABLE  `log_summary`  ENGINE=BLACKHOLE;  
    ALTER  TABLE  `log_summary_type`  ENGINE=BLACKHOLE;  
    ALTER  TABLE  `log_url`  ENGINE=BLACKHOLE;  
    ALTER  TABLE  `log_url_info`  ENGINE=BLACKHOLE;  
    ALTER  TABLE  `log_visitor`  ENGINE=BLACKHOLE;  
    ALTER  TABLE  `log_visitor_info`  ENGINE=BLACKHOLE;  
    ALTER  TABLE  `log_visitor_online`  ENGINE=BLACKHOLE;

    View full-size slide

  68. Full-text search ip de
    database is onnozel!
    … en trage

    View full-size slide

  69. Je zoe met kun’n
    werk’n …

    View full-size slide

  70. Mor is vele
    sjieker!
    https://github.com/jreinke/magento-Elasticsearch

    View full-size slide

  71. Static files apart
    hosten (~CDN)
    http://www.magentocommerce.com/magento-
    connect/onepica-imagecdn-1.html

    View full-size slide

  72. Horizontaal schaaln

    View full-size slide

  73. Loadbalanced
    ElasticSearch
    Redis
    Loadbalanced
    MySQL MySQL
    Loadbalanced
    frontend
    Nginx Nginx
    Loadbalanced
    Varnish Varnish
    Loadbalanced
    backend
    Nginx Nginx
    Client Admin
    PHP-FPM PHP-FPM PHP-FPM PHP-FPM
    SSL endpoint
    ElasticSearch

    View full-size slide

  74. Cm_Cache_Backend_R
    edis kun nie overweg
    met meerdre servers

    View full-size slide

  75. Mo ’kzien
    dermee
    bezig, wi!

    View full-size slide

  76. https://github.com/ThijsFeryn/
    credis/tree/sentinel
    https://github.com/ThijsFeryn/
    Cm_Cache_Backend_Redis/tree/
    multiserver
    Multi-­‐
    server  
    support
    Achterliggende  
    library

    View full-size slide

  77. Redis multi-server
    ✓Client-side distribuusje
    ✓Master/slave
    ✓Sentinel

    View full-size slide

  78. In app/etc/local.xml
     
         
           Cm_Cache_Backend_Redis  
             
                 
                     
                       127.0.0.1  
                       6379  
                         
                       1  
                                             
                     
                     
                       127.0.0.1  
                       6380  
                         
                       1  
                         
                                     
                     
             
         

    Client-­‐side  
    hash  
    distribution

    View full-size slide

  79.    public  function  hash($key)  
       {  
           $needle  =  hexdec(substr(md5($key),0,7));  
           $server  =  $min  =  0;  
           $max  =  count($this-­‐>nodes)  -­‐  1;  
           while  ($max  >=  $min)  {  
               $position  =  (int)  (($min  +  $max)  /  2);  
               $server  =  $this-­‐>nodes[$position];  
               if  ($needle  <  $server)  {  
                   $max  =  $position  -­‐  1;  
               }  
               else  if  ($needle  >  $server)  {  
                   $min  =  $position  +  1;  
               }  
               else  {  
                   break;  
               }  
           }  
           return  $this-­‐>ring[$server];  
       }  
    }

    View full-size slide

  80. In app/etc/local.xml
     
         
           Cm_Cache_Backend_Redis  
             
                 
                     
                       127.0.0.1  
                       6379  
                         
                       1  
                         
                       true                      
                     
                     
                       127.0.0.1  
                       6380  
                         
                       1  
                         
                                     
                     
           true      
             
         

    Master/slave

    View full-size slide

  81. Sentinel
    ✓Discovery service voe Redis servers
    ✓Deel van de Redis core
    ✓Monitoring, notification & autofailover
    ✓Wit wuk dat de masters & slaves zien
    ✓Vorkomt zevers ot de master no de
    wup is
    ✓Vorkomt zevers ot de master
    werekeert
    ✓Eest met Sentinel verbiend’n, toene mo
    met Redis

    View full-size slide

  82. port  26379  
    sentinel  monitor  mymaster  127.0.0.1  6379  1  
    sentinel  down-­‐after-­‐milliseconds  mymaster  5000  
    sentinel  parallel-­‐syncs  mymaster  2
    daemonize  yes  
    dir  ./  
    pidfile  redis-­‐master.pid  
    port  6379
    daemonize  yes  
    dir  ./  
    pidfile  redis-­‐slave.pid  
    port  6380  
    slaveof  127.0.0.1  6379
    daemonize  yes  
    dir  ./  
    pidfile  redis-­‐slave2.pid  
    port  6381  
    slaveof  127.0.0.1  6379
    Sentinel  
    master/slave  
    config
    redis-­‐server  redis-­‐master.conf  
    redis-­‐server  redis-­‐slave.conf  
    redis-­‐server  redis-­‐slave2.conf  
    redis-­‐sentinel  redis-­‐sentinel.conf

    View full-size slide

  83. Loadbalanced
    Redis
    master
    Client
    Loadbalanced
    Sentinel Sentinel
    Redis
    slave
    Redis
    slave

    View full-size slide

  84. [74129]  08  Apr  15:54:35.443  *  Max  number  of  open  files  set  to  10032  
                                   _._  
                         _.-­‐``__  ''-­‐._  
               _.-­‐``        `.    `_.    ''-­‐._                      Redis  2.8.7  (00000000/0)  64  bit  
       .-­‐``  .-­‐```.    ```\/        _.,_  ''-­‐._  
     (        '            ,              .-­‐`    |  `,        )          Running  in  stand  alone  mode  
     |`-­‐._`-­‐...-­‐`  __...-­‐.``-­‐._|'`  _.-­‐'|          Port:  6379  
     |        `-­‐._      `._        /          _.-­‐'        |          PID:  74129  
       `-­‐._        `-­‐._    `-­‐./    _.-­‐'        _.-­‐'  
     |`-­‐._`-­‐._        `-­‐.__.-­‐'        _.-­‐'_.-­‐'|  
     |        `-­‐._`-­‐._                _.-­‐'_.-­‐'        |                      http://redis.io  
       `-­‐._        `-­‐._`-­‐.__.-­‐'_.-­‐'        _.-­‐'  
     |`-­‐._`-­‐._        `-­‐.__.-­‐'        _.-­‐'_.-­‐'|  
     |        `-­‐._`-­‐._                _.-­‐'_.-­‐'        |  
       `-­‐._        `-­‐._`-­‐.__.-­‐'_.-­‐'        _.-­‐'  
               `-­‐._        `-­‐.__.-­‐'        _.-­‐'  
                       `-­‐._                _.-­‐'  
                               `-­‐.__.-­‐'  
    !
    [74129]  08  Apr  15:54:35.445  #  Server  started,  Redis  version  2.8.7  
    [74129]  08  Apr  15:54:35.445  *  The  server  is  now  ready  to  accept  connections  on  port  6379  
    [74129]  08  Apr  15:54:53.105  *  Slave  asks  for  synchronization  
    [74129]  08  Apr  15:54:53.105  *  Full  resync  requested  by  slave.  
    [74129]  08  Apr  15:54:53.105  *  Starting  BGSAVE  for  SYNC  
    [74129]  08  Apr  15:54:53.106  *  Background  saving  started  by  pid  74188  
    [74188]  08  Apr  15:54:53.107  *  DB  saved  on  disk  
    [74129]  08  Apr  15:54:53.184  *  Background  saving  terminated  with  success  
    [74129]  08  Apr  15:54:53.184  *  Synchronization  with  slave  succeeded  
    [74129]  08  Apr  15:55:08.601  *  Slave  asks  for  synchronization  
    [74129]  08  Apr  15:55:08.601  *  Full  resync  requested  by  slave.  
    [74129]  08  Apr  15:55:08.601  *  Starting  BGSAVE  for  SYNC  
    [74129]  08  Apr  15:55:08.602  *  Background  saving  started  by  pid  74268  
    [74268]  08  Apr  15:55:08.604  *  DB  saved  on  disk  
    [74129]  08  Apr  15:55:08.609  *  Background  saving  terminated  with  success  
    [74129]  08  Apr  15:55:08.609  *  Synchronization  with  slave  succeeded
    Master

    View full-size slide

  85. [74187]  08  Apr  15:54:52.102  *  Max  number  of  open  files  set  to  10032  
                                   _._  
                         _.-­‐``__  ''-­‐._  
               _.-­‐``        `.    `_.    ''-­‐._                      Redis  2.8.7  (00000000/0)  64  bit  
       .-­‐``  .-­‐```.    ```\/        _.,_  ''-­‐._  
     (        '            ,              .-­‐`    |  `,        )          Running  in  stand  alone  mode  
     |`-­‐._`-­‐...-­‐`  __...-­‐.``-­‐._|'`  _.-­‐'|          Port:  6381  
     |        `-­‐._      `._        /          _.-­‐'        |          PID:  74187  
       `-­‐._        `-­‐._    `-­‐./    _.-­‐'        _.-­‐'  
     |`-­‐._`-­‐._        `-­‐.__.-­‐'        _.-­‐'_.-­‐'|  
     |        `-­‐._`-­‐._                _.-­‐'_.-­‐'        |                      http://redis.io  
       `-­‐._        `-­‐._`-­‐.__.-­‐'_.-­‐'        _.-­‐'  
     |`-­‐._`-­‐._        `-­‐.__.-­‐'        _.-­‐'_.-­‐'|  
     |        `-­‐._`-­‐._                _.-­‐'_.-­‐'        |  
       `-­‐._        `-­‐._`-­‐.__.-­‐'_.-­‐'        _.-­‐'  
               `-­‐._        `-­‐.__.-­‐'        _.-­‐'  
                       `-­‐._                _.-­‐'  
                               `-­‐.__.-­‐'  
    !
    [74187]  08  Apr  15:54:52.105  #  Server  started,  Redis  version  2.8.7  
    [74187]  08  Apr  15:54:52.105  *  The  server  is  now  ready  to  accept  connections  on  port  6381  
    [74187]  08  Apr  15:54:53.104  *  Connecting  to  MASTER  127.0.0.1:6379  
    [74187]  08  Apr  15:54:53.104  *  MASTER  <-­‐>  SLAVE  sync  started  
    [74187]  08  Apr  15:54:53.105  *  Non  blocking  connect  for  SYNC  fired  the  event.  
    [74187]  08  Apr  15:54:53.105  *  Master  replied  to  PING,  replication  can  continue...  
    [74187]  08  Apr  15:54:53.105  *  Partial  resynchronization  not  possible  (no  cached  master)  
    [74187]  08  Apr  15:54:53.106  *  Full  resync  from  master:  021fe0141871282912fee4951b40ed4579916bd0:1  
    [74187]  08  Apr  15:54:53.184  *  MASTER  <-­‐>  SLAVE  sync:  receiving  18  bytes  from  master  
    [74187]  08  Apr  15:54:53.185  *  MASTER  <-­‐>  SLAVE  sync:  Flushing  old  data  
    [74187]  08  Apr  15:54:53.185  *  MASTER  <-­‐>  SLAVE  sync:  Loading  DB  in  memory  
    [74187]  08  Apr  15:54:53.185  *  MASTER  <-­‐>  SLAVE  sync:  Finished  with  success
    Slave

    View full-size slide

  86. [74267]  08  Apr  15:55:08.596  *  Max  number  of  open  files  set  to  10032  
                                   _._  
                         _.-­‐``__  ''-­‐._  
               _.-­‐``        `.    `_.    ''-­‐._                      Redis  2.8.7  (00000000/0)  64  bit  
       .-­‐``  .-­‐```.    ```\/        _.,_  ''-­‐._  
     (        '            ,              .-­‐`    |  `,        )          Running  in  stand  alone  mode  
     |`-­‐._`-­‐...-­‐`  __...-­‐.``-­‐._|'`  _.-­‐'|          Port:  6382  
     |        `-­‐._      `._        /          _.-­‐'        |          PID:  74267  
       `-­‐._        `-­‐._    `-­‐./    _.-­‐'        _.-­‐'  
     |`-­‐._`-­‐._        `-­‐.__.-­‐'        _.-­‐'_.-­‐'|  
     |        `-­‐._`-­‐._                _.-­‐'_.-­‐'        |                      http://redis.io  
       `-­‐._        `-­‐._`-­‐.__.-­‐'_.-­‐'        _.-­‐'  
     |`-­‐._`-­‐._        `-­‐.__.-­‐'        _.-­‐'_.-­‐'|  
     |        `-­‐._`-­‐._                _.-­‐'_.-­‐'        |  
       `-­‐._        `-­‐._`-­‐.__.-­‐'_.-­‐'        _.-­‐'  
               `-­‐._        `-­‐.__.-­‐'        _.-­‐'  
                       `-­‐._                _.-­‐'  
                               `-­‐.__.-­‐'  
    !
    [74267]  08  Apr  15:55:08.598  #  Server  started,  Redis  version  2.8.7  
    [74267]  08  Apr  15:55:08.598  *  DB  loaded  from  disk:  0.000  seconds  
    [74267]  08  Apr  15:55:08.598  *  The  server  is  now  ready  to  accept  connections  on  port  6382  
    [74267]  08  Apr  15:55:08.600  *  Connecting  to  MASTER  127.0.0.1:6379  
    [74267]  08  Apr  15:55:08.600  *  MASTER  <-­‐>  SLAVE  sync  started  
    [74267]  08  Apr  15:55:08.600  *  Non  blocking  connect  for  SYNC  fired  the  event.  
    [74267]  08  Apr  15:55:08.601  *  Master  replied  to  PING,  replication  can  continue...  
    [74267]  08  Apr  15:55:08.601  *  Partial  resynchronization  not  possible  (no  cached  master)  
    [74267]  08  Apr  15:55:08.602  *  Full  resync  from  master:  021fe0141871282912fee4951b40ed4579916bd0:29  
    [74267]  08  Apr  15:55:08.609  *  MASTER  <-­‐>  SLAVE  sync:  receiving  18  bytes  from  master  
    [74267]  08  Apr  15:55:08.609  *  MASTER  <-­‐>  SLAVE  sync:  Flushing  old  data  
    [74267]  08  Apr  15:55:08.609  *  MASTER  <-­‐>  SLAVE  sync:  Loading  DB  in  memory  
    [74267]  08  Apr  15:55:08.610  *  MASTER  <-­‐>  SLAVE  sync:  Finished  with  success
    Slave  
    2

    View full-size slide

  87. [74338]  08  Apr  15:55:26.293  *  Max  number  of  open  files  set  to  10032  
                                   _._  
                         _.-­‐``__  ''-­‐._  
               _.-­‐``        `.    `_.    ''-­‐._                      Redis  2.8.7  (00000000/0)  64  bit  
       .-­‐``  .-­‐```.    ```\/        _.,_  ''-­‐._  
     (        '            ,              .-­‐`    |  `,        )          Running  in  sentinel  mode  
     |`-­‐._`-­‐...-­‐`  __...-­‐.``-­‐._|'`  _.-­‐'|          Port:  26379  
     |        `-­‐._      `._        /          _.-­‐'        |          PID:  74338  
       `-­‐._        `-­‐._    `-­‐./    _.-­‐'        _.-­‐'  
     |`-­‐._`-­‐._        `-­‐.__.-­‐'        _.-­‐'_.-­‐'|  
     |        `-­‐._`-­‐._                _.-­‐'_.-­‐'        |                      http://redis.io  
       `-­‐._        `-­‐._`-­‐.__.-­‐'_.-­‐'        _.-­‐'  
     |`-­‐._`-­‐._        `-­‐.__.-­‐'        _.-­‐'_.-­‐'|  
     |        `-­‐._`-­‐._                _.-­‐'_.-­‐'        |  
       `-­‐._        `-­‐._`-­‐.__.-­‐'_.-­‐'        _.-­‐'  
               `-­‐._        `-­‐.__.-­‐'        _.-­‐'  
                       `-­‐._                _.-­‐'  
                               `-­‐.__.-­‐'  
    !
    [74338]  08  Apr  15:55:26.299  #  Sentinel  runid  is  984143fbdaeaa2b724ebe9ae6d85b3ae2f11cfce  
    [74338]  08  Apr  15:55:26.299  #  +monitor  master  mymaster  127.0.0.1  6379  quorum  1  
    [74338]  08  Apr  15:55:27.296  *  +slave  slave  127.0.0.1:6381  127.0.0.1  6381  @  mymaster  127.0.0.1  6379  
    [74338]  08  Apr  15:55:27.296  *  +slave  slave  127.0.0.1:6382  127.0.0.1  6382  @  mymaster  127.0.0.1  6379
    Sentinel

    View full-size slide

  88. [74338]  08  Apr  15:57:39.042  #  +sdown  master  mymaster  127.0.0.1  6379  
    [74338]  08  Apr  15:57:39.042  #  +odown  master  mymaster  127.0.0.1  6379  #quorum  1/1  
    [74338]  08  Apr  15:57:39.042  #  +new-­‐epoch  1  
    [74338]  08  Apr  15:57:39.042  #  +try-­‐failover  master  mymaster  127.0.0.1  6379  
    [74338]  08  Apr  15:57:39.042  #  +vote-­‐for-­‐leader  
    984143fbdaeaa2b724ebe9ae6d85b3ae2f11cfce  1  
    [74338]  08  Apr  15:57:39.042  #  +elected-­‐leader  master  mymaster  127.0.0.1  6379  
    [74338]  08  Apr  15:57:39.042  #  +failover-­‐state-­‐select-­‐slave  master  mymaster  
    127.0.0.1  6379  
    [74338]  08  Apr  15:57:39.145  #  +selected-­‐slave  slave  127.0.0.1:6381  127.0.0.1  6381  @  
    mymaster  127.0.0.1  6379  
    [74338]  08  Apr  15:57:39.145  *  +failover-­‐state-­‐send-­‐slaveof-­‐noone  slave  
    127.0.0.1:6381  127.0.0.1  6381  @  mymaster  127.0.0.1  6379  
    [74338]  08  Apr  15:57:39.204  *  +failover-­‐state-­‐wait-­‐promotion  slave  127.0.0.1:6381  
    127.0.0.1  6381  @  mymaster  127.0.0.1  6379  
    [74338]  08  Apr  15:57:40.052  #  +promoted-­‐slave  slave  127.0.0.1:6381  127.0.0.1  6381  @  
    mymaster  127.0.0.1  6379  
    [74338]  08  Apr  15:57:40.052  #  +failover-­‐state-­‐reconf-­‐slaves  master  mymaster  
    127.0.0.1  6379  
    [74338]  08  Apr  15:57:40.116  *  +slave-­‐reconf-­‐sent  slave  127.0.0.1:6382  127.0.0.1  
    6382  @  mymaster  127.0.0.1  6379  
    [74338]  08  Apr  15:57:41.065  *  +slave-­‐reconf-­‐inprog  slave  127.0.0.1:6382  127.0.0.1  
    6382  @  mymaster  127.0.0.1  6379  
    [74338]  08  Apr  15:57:41.065  *  +slave-­‐reconf-­‐done  slave  127.0.0.1:6382  127.0.0.1  
    6382  @  mymaster  127.0.0.1  6379  
    [74338]  08  Apr  15:57:41.128  #  +failover-­‐end  master  mymaster  127.0.0.1  6379  
    [74338]  08  Apr  15:57:41.128  #  +switch-­‐master  mymaster  127.0.0.1  6379  127.0.0.1  6381  
    [74338]  08  Apr  15:57:41.128  *  +slave  slave  127.0.0.1:6382  127.0.0.1  6382  @  mymaster  
    127.0.0.1  6381  
    [74338]  08  Apr  15:57:41.129  *  +slave  slave  127.0.0.1:6379  127.0.0.1  6379  @  mymaster  
    127.0.0.1  6381  
    [74338]  08  Apr  15:57:46.174  #  +sdown  slave  127.0.0.1:6379  127.0.0.1  6379  @  mymaster  
    127.0.0.1  6381
    De master is met z’n hoar

    View full-size slide

  89. [74187]  08  Apr  15:57:38.297  *  Connecting  to  MASTER  127.0.0.1:6379  
    [74187]  08  Apr  15:57:38.298  *  MASTER  <-­‐>  SLAVE  sync  started  
    [74187]  08  Apr  15:57:38.298  #  Error  condition  on  socket  for  SYNC:  Connection  
    refused  
    [74187]  08  Apr  15:57:39.204  *  Discarding  previously  cached  master  state.  
    [74187]  08  Apr  15:57:39.204  *  MASTER  MODE  enabled  (user  request)  
    [74187]  08  Apr  15:57:39.206  #  CONFIG  REWRITE  executed  with  success.  
    [74187]  08  Apr  15:57:40.685  *  Slave  asks  for  synchronization  
    [74187]  08  Apr  15:57:40.685  *  Full  resync  requested  by  slave.  
    [74187]  08  Apr  15:57:40.685  *  Starting  BGSAVE  for  SYNC  
    [74187]  08  Apr  15:57:40.685  *  Background  saving  started  by  pid  74356  
    [74356]  08  Apr  15:57:40.687  *  DB  saved  on  disk  
    [74187]  08  Apr  15:57:40.718  *  Background  saving  terminated  with  success  
    [74187]  08  Apr  15:57:40.718  *  Synchronization  with  slave  succeeded
    De slave wordt master

    View full-size slide

  90. [74267]  08  Apr  15:57:39.679  *  Connecting  to  MASTER  127.0.0.1:6379  
    [74267]  08  Apr  15:57:39.679  *  MASTER  <-­‐>  SLAVE  sync  started  
    [74267]  08  Apr  15:57:39.679  #  Error  condition  on  socket  for  SYNC:  Connection  
    refused  
    [74267]  08  Apr  15:57:40.116  *  Discarding  previously  cached  master  state.  
    [74267]  08  Apr  15:57:40.117  *  SLAVE  OF  127.0.0.1:6381  enabled  (user  request)  
    [74267]  08  Apr  15:57:40.118  #  CONFIG  REWRITE  executed  with  success.  
    [74267]  08  Apr  15:57:40.684  *  Connecting  to  MASTER  127.0.0.1:6381  
    [74267]  08  Apr  15:57:40.684  *  MASTER  <-­‐>  SLAVE  sync  started  
    [74267]  08  Apr  15:57:40.684  *  Non  blocking  connect  for  SYNC  fired  the  event.  
    [74267]  08  Apr  15:57:40.684  *  Master  replied  to  PING,  replication  can  
    continue...  
    [74267]  08  Apr  15:57:40.685  *  Partial  resynchronization  not  possible  (no  
    cached  master)  
    [74267]  08  Apr  15:57:40.685  *  Full  resync  from  master:  
    13f081057c3b4c0bb148e53f2097b8c2e8d8dfbb:1  
    [74267]  08  Apr  15:57:40.718  *  MASTER  <-­‐>  SLAVE  sync:  receiving  18  bytes  from  
    master  
    [74267]  08  Apr  15:57:40.718  *  MASTER  <-­‐>  SLAVE  sync:  Flushing  old  data  
    [74267]  08  Apr  15:57:40.718  *  MASTER  <-­‐>  SLAVE  sync:  Loading  DB  in  memory  
    [74267]  08  Apr  15:57:40.719  *  MASTER  <-­‐>  SLAVE  sync:  Finished  with  success
    Den anderen slave moet
    herconnecteren

    View full-size slide

  91. [74359]  08  Apr  16:01:49.806  #  Server  started,  Redis  version  2.8.7  
    [74359]  08  Apr  16:01:49.806  *  DB  loaded  from  disk:  0.000  seconds  
    [74359]  08  Apr  16:01:49.806  *  The  server  is  now  ready  to  accept  connections  
    on  port  6379  
    [74359]  08  Apr  16:01:59.877  *  SLAVE  OF  127.0.0.1:6381  enabled  (user  request)  
    [74359]  08  Apr  16:01:59.877  #  CONFIG  REWRITE  executed  with  success.  
    [74359]  08  Apr  16:01:59.888  *  Connecting  to  MASTER  127.0.0.1:6381  
    [74359]  08  Apr  16:01:59.889  *  MASTER  <-­‐>  SLAVE  sync  started  
    [74359]  08  Apr  16:01:59.889  *  Non  blocking  connect  for  SYNC  fired  the  event.  
    [74359]  08  Apr  16:01:59.889  *  Master  replied  to  PING,  replication  can  
    continue...  
    [74359]  08  Apr  16:01:59.890  *  Partial  resynchronization  not  possible  (no  
    cached  master)  
    [74359]  08  Apr  16:01:59.890  *  Full  resync  from  master:  
    13f081057c3b4c0bb148e53f2097b8c2e8d8dfbb:17013  
    [74359]  08  Apr  16:01:59.985  *  MASTER  <-­‐>  SLAVE  sync:  receiving  18  bytes  from  
    master  
    [74359]  08  Apr  16:01:59.985  *  MASTER  <-­‐>  SLAVE  sync:  Flushing  old  data  
    [74359]  08  Apr  16:01:59.985  *  MASTER  <-­‐>  SLAVE  sync:  Loading  DB  in  memory  
    [74359]  08  Apr  16:01:59.986  *  MASTER  <-­‐>  SLAVE  sync:  Finished  with  success
    De master is doar were
    en is geen master meer

    View full-size slide

  92. In app/etc/local.xml
     
         
           Cm_Cache_Backend_Redis  
             
                 
                     
                       127.0.0.1  
                       26379              
                     
                     
                       127.0.0.1  
                       26380  
                                     
                     
           true  
           true          
           true                  
           mymaster  
             
         

    Sentinel

    View full-size slide

  93. Witje wuk dak
    vandage gevoen’dn
    en?

    View full-size slide

  94.  
             
                   Zend_Cache_Backend_Apc  
                   MAGE_  
             

     
             
                   apc  
                   MAGE_  
             

    2-level cache
    deruut aaln

    View full-size slide

  95. En van
    zukke
    dieng
    liggen
    wieder
    wakker

    View full-size slide

  96. Vraagt uus nie voe de
    programmeren in
    Magento

    View full-size slide

  97. Mo we kun’n
    godverdomme
    Magento serieus doen
    affeceren

    View full-size slide