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 Slide

  2. keireltjes
    Thijs
    Yo
    Ik zien

    View Slide

  3. En ik zien
    @ThijsFeryn
    ip Twitter

    View Slide

  4. ’k Zien
    bie
    Evangelist

    View Slide

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

    View Slide

  6. ’k Weunen in Diksmude

    View Slide

  7. Aan de Pluum’n

    View Slide

  8. Juuste niet bachten de Kupe

    View Slide

  9. View Slide

  10. View Slide

  11. ’t Is soms een bitje trage

    View Slide

  12. Mo wel wreed flexibel

    View Slide

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

    View Slide

  14. W’en wreed vele
    biegeleerd

    View Slide

  15. Mo ’t ed
    tied
    gekost

    View Slide

  16. De eerste
    pogingen

    View Slide

  17. 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 Slide

  18. Ip zoek no
    Magento
    kennisse

    View Slide

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

    View Slide

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

    View Slide

  21. Gebruukt een echte
    byte code cache in
    de plekke

    View Slide

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

    View Slide

  23. Eerste concluuzjes

    View Slide

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

    View Slide

  25. W’en  leren  cachen

    View Slide

  26. Standoard ip de
    schieve
    in /var/cache

    View Slide

  27. ./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 Slide

  28. ./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 Slide

  29. APC

    View Slide

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

    View Slide

  31. Memcached

    View Slide

  32.  
       
           
             
                 
                   
                   
                   
                 
             
         
       

    In app/etc/local.xml
    Meerdere
    servers meuglik

    View Slide

  33. Toch nog files in /var/
    cache?

    View Slide

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

    View Slide

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

    View Slide

  36. De machienerie
    ipdrieven

    View Slide

  37. is trage

    View Slide

  38. Zeker d’oede versies

    View Slide

  39. Magento werkt
    „zohezeid” niet met
    nieuwe versies

    View Slide

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

    View Slide

  41. Zoender byte code
    cache ziej gezien!

    View Slide

  42. We woaren vergeetn dat
    APC niet werkt ip FastCGI

    View Slide

  43. 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 Slide

  44. We woaren ook vergeetn
    dat APC vuuligheid is

    View Slide

  45. Serieus!

    View Slide

  46. -FPM

    View Slide

  47. 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

  51. realpath_cache_size  =  512k  
    realpath_cache_ttl  =  3600
    Poaden cachen

    View Slide

  52. Olles in’t heheuhen!!!

    View Slide

  53. %  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 Slide

  54. %  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 Slide

  55. W’en ook naar HVVM
    gekeek’n

    View Slide

  56. De database is ook
    belangriek

    View Slide

  57. 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 Slide

  58. Wuk homme pak’n?

    View Slide

  59.  
         
             
                 
                     
                     
                     
                     
                   1  
                 
             
             
                 
                     
                     
                     
                     
                     
                   pdo_mysql  
                   mysql4  
                   SET  NAMES  utf8  
                   1  
                 
               
         

    R/W  
    splittinge

    View Slide

  60. En in ene keer was
    Redis doa gezet!

    View Slide

  61. 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  67. Varnish

    View Slide

  68. 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 Slide

  69. Hit rate is niet te vet

    View Slide

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

    View Slide

  71. 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 Slide

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

    View Slide

  73. 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 Slide

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

    View Slide

  75. 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 Slide

  76. Zoek’n

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  81. Horizontaal schaaln

    View Slide

  82. 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 Slide

  83. Probleem!

    View Slide

  84. Cm_Cache_Backend_R
    edis kun nie overweg
    met meerdre servers

    View Slide

  85. Mo ’kzien
    dermee
    bezig, wi!

    View Slide

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

    View Slide

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

    View Slide

  88. 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 Slide

  89.    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 Slide

  90. 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 Slide

  91. Sentinel

    View Slide

  92. 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 Slide

  93. 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 Slide

  94. Loadbalanced
    Redis
    master
    Client
    Loadbalanced
    Sentinel Sentinel
    Redis
    slave
    Redis
    slave

    View Slide

  95. [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 Slide

  96. [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 Slide

  97. [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 Slide

  98. [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 Slide

  99. [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 Slide

  100. [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 Slide

  101. [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 Slide

  102. [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 Slide

  103. 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 Slide

  104. Witje wuk dak
    vandage gevoen’dn
    en?

    View Slide

  105.  
             
                   Zend_Cache_Backend_Apc  
                   MAGE_  
             

     
             
                   apc  
                   MAGE_  
             

    2-level cache
    deruut aaln

    View Slide

  106. En van
    zukke
    dieng
    liggen
    wieder
    wakker

    View Slide

  107. Vraagt uus nie voe de
    programmeren in
    Magento

    View Slide

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

    View Slide

  109. View Slide

  110. Merci hé!

    View Slide