150 likes | 232 Views
Designing Enterprise Drupal. Environments. How to scale Drupal server infrastructure. Jason Burnett ( jason@neospire.net ) NeoSpire Director of Network Services Ben Chavet ( bchavet@neospire.net ) NeoSpire Senior Engineer Brian Skowron ( bskowron@neospire.net )
E N D
Designing Enterprise Drupal Environments How to scale Drupal server infrastructure
Jason Burnett (jason@neospire.net) NeoSpire Director of Network Services Ben Chavet (bchavet@neospire.net) NeoSpire Senior Engineer Brian Skowron (bskowron@neospire.net) NeoSpire Account Executive Introductions
So…first thing’s first • Prerequisites that you’ll need (or at least want). • A good, reliable network with plenty of capacity • At least one expertSystems Administrator • You don’t necessarily need this:
But you don’t want this: (hopefully this isn’t you)
After you’ve fired that guy, let’s talk stacks Default Stack Performance Stack
First, don’t use Drupal (well, sorta) • Drop-in replacement for Drupal 6.x • Support for database replication • Support for reverse proxy caching • Optimization for MySQL • Optimization for PHP 5 • Available at: http://fourkitchens.com/pressflow-makes-drupal-scale
After Pressflow, it’s all about Cache • Varnish is a reverse proxy cache • Caches content based on HTTP headers • Uses kernel-based virtual memory • Watch out for cookies, authenticated users • Available at • http://varnish-cache.org/
HTTP Pipeline Apache Configuration Varnish Configuration NameVirtualHost *:8080 Listen 8080 <VirtualHost *:8080> […] </VirtualHost> backend default { .host = "127.0.0.1"; .port = "8080"; }
HTTP Logging VarnishNCSA daemon handles logging Default Apache logs will always show 127.0.0.1 Define a new log format to use X-Forwarded-For LogFormat"%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined_proxy CustomLog/var/log/apache2/access.log combined_proxy
Caching with Cookies sub vcl_recv { // Remove has_js and Google Analytics __* cookies. set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(__[a-z]+|has_js)=[^;]*", ""); // Remove a ";" prefix, if present. set req.http.Cookie = regsub(req.http.Cookie, "^;\s*", ""); // Remove empty cookies. if (req.http.Cookie ~ "^\s*$") { unset req.http.Cookie; } } sub vcl_hash { // Include cookie in cache hash if (req.http.Cookie) { set req.hash += req.http.Cookie; } }
Basic Security // Define the internal network subnets acl internal { "127.0.0.0"/8; "10.0.0.0"/8; } sub vcl_recv { […] // Do not allow outside access to cron.php if (req.url ~ "^/cron\.php(\?.*)?$" && !client.ip ~ internal) { set req.url = "/404-cron.php"; } }
Varnish is super-fast /etc/security/limits.conf Able to handle many more connections than Apache Needs a large number of file handles * soft nofile 131072 * hard nofile 131072
Apache Optimizations • Tune apache to match your hardware • Setting MaxClients too high is asking for trouble • Every application is different • A good starting point is total amount of memory allocated to Apache divided by 40MB • One of the areas that will need to be monitored and updated on an ongoing basis
Still all about Cache • APC Opcode Cache • APC is an Opcode cache • Officially supported by PHP • Prevents unnecessary PHP parsing and compiling • Reduces load on Memory and CPU
allocate enough memory FOR APC extension=apc.so apc.shm_size=120 apc.ttl=300 Php.ini Sysctl.conf kernel.shmmax=134217728