The present document can't read!
Please download to view
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
...

Cahier Des Charges

by cellas974

on

Report

Category:

Documents

Download: 0

Comment: 0

132

views

Comments

Description

Download Cahier Des Charges

Transcript

M1 CERI Avignon 2010/2011 Cahier des charges Optimisation/Sécurité d¶un serveur Web NGINX/PHP/MySQL Cyril CADET/Habib BAKAKAS 11 M1 CERI Cahier des charges 2010-2011 Contenu 1. 2. 3. Avant-propos ............................................................................................... 2 Introduction .................................................................................................. 2 Partie Optimisation ...................................................................................... 3 3.1. 3.2. 3.3. 4. 5. 6. 7. 8. Nginx..................................................................................................... 3 Les cache d¶opcode ............................................................................. 4 eAccelerator ......................................................................................... 5 Serveur Web Nginx ..................................................................................... 5 Memcache ................................................................................................... 5 5.1. MySQL et memcached ......................................................................... 6 MySQL & Memcached ................................................................................ 6 Disponibilité/Robustesse .............................................................................8 7.1. 8.1. Réplication Master/slave temps réel MySQL ....................................... 8 Mise en place de NGINX+PHP-FPM .................................................11 ANNEXE ....................................................................................................11 Installation .................................................................................................11 Script de démarrage ..................................................................................11 8.2. Mise en place de eAccelerator ........................................................... 13 Installation .................................................................................................13 Configuration ............................................................................................. 14 8.3. 8.4. Mise en place de Percona Serveur .................................................... 16 Mise en place de memcache ............................................................. 16 Installation .................................................................................................16 1 M1 CERI Cahier des charges 2010-2011 1. Avant-propos Nous participons au développement et à la mise en production d¶un jeu de stratégie Web moderne (ajax/jQuery, php5/symfony/doctrine) utilisant des techniques innovantes. Plus précisément nous déterminerons l'architecture réseau (serveur web, mysql, php) permettant un fonctionnement optimal du jeu de stratégie. Nous avons au premier semestre fait l¶étude de la technologie que nous allons adoptée (grâce aux différents benchmarck). Ce rapport va montrer un descriptif sur l¶optimisation de notre serveur Web, serveur PHP, serveur MySQL pour qu¶il puisse supporter une charge importante. Il va également traiter de la partie robustesse en traitant la réplication MySQL ainsi que la sécurisation du serveur Web. 2. Introduction Devant un nombre croissant de connexions, les performances des serveurs Web s'effondrent. Afin d'améliorer les temps de réponse, le premier réflexe est généralement de dissocier le serveur HTTP et la base de données. Une solution tout aussi courante consiste à augmenter le nombre de serveursHTTP en utilisant des solutions de « loadbalancing ». Si ces solutions se montrent généralement efficaces, elles restent néanmoins coûteuses en termes de matériel et d'hébergement. De plus, elles sont parfois complexes à mettre en uvre.Pourtant d'autres solutions trop souvent méconnues existent. C¶est en particulier le cas des« optimiseurs » et des systèmes de cache (« opcode » ou fichiers). 2 M1 CERI Cahier des charges 2010-2011 3. Partie Optimisation 3.1. Nginx Configuration des Vhosts Principe de l¶URL Rewriting Le principe de la réécriture d'URL est de mettre en place un « système » sur le serveur pour qu'il sache interpréter ce nouveau format d'URL. Dans notre exemple, quand un visiteur accède à la page http://www.notresite.com/articles/article-12-2-5.html, le serveur doit renvoyer exactement la même chose que si le visiteur avait demandé à accéder à la page http://www.notre-site.com/articles/article.php?id=12&page=2&rubrique=5 . La correspondance entre les deux schémas d'URL est alors décrite sous forme de « règles de réécriture ». Chaque règle permet de décrire un format d'URL. Dans l'exemple ci-dessus, la règle de réécriture va indiquer au serveur de prendre le premier nombre comme numéro d'article, le deuxième comme numéro de page et le troisième comme numéro de rubrique. La technique de réécriture d'URL la plus connue est celle disponible sur les serveurs Apache, le plus souvent utilisés avec le langage PHP. Sauf mention spéciale, tous les exemples de cet article seront donc consacrés au langage PHP et au serveur Apache. Optimisation 3 M1 CERI Cahier des charges 2010-2011 La configuration générale de Nginx se fait via "/etc/nginx/nginx.conf" L'information sur les directives se trouve sur wiki.nginx.org/CoreModule SIGNATURE : pour enlever la signature du serveur, il suffit d'ajouter la ligne suivante : server_tokens off; PROCESSUS NGINX Le réglage des processus se fait via "worker_processes" et "worker_connections" qui définissent le paramètre "max_clients" selon la régle suivante : max_clients = worker_processes * worker_connections La recommandation pour "worker_processes" est de le fixer avec une valeur égale au nombre de processeurs. exemple pour une machine avec 8 coeurs : worker_processes 8; 3.2. Les cache d¶opcode Lors de l¶exécution d¶un script, PHP5 procède ainsi : il charge l¶intégralité du script il convertit les instructions en opcodes (sorte de langage intermédiaire entre le script et unexécutable), - il exécute les instructions.Lorsqu'un même script est appelé plusieurs fois, ces opérations sont renouvelées. Ceci est une pertede temps évidente. Les solutions de cache d¶opcode se proposent donc d¶effectuer une mise en cache des opcodes, afind¶en garder une trace. Ceci permet à PHP5 de les exécuter directement. 4 M1 CERI Cahier des charges 2010-2011 3.3. eAccelerator is a free open-source PHP accelerator & optimizer. It increases the performance of PHP scripts by caching them in their compiled state, so that the overhead of compiling is almost completely eliminated. It also optimizes scripts to speed up their execution. eAccelerator typically reduces server load and increases the speed of your PHP code by 1-10 times. eAccelerator eAccelerator was born in December 2004 as a fork of the TurckMMCache project. TurckMMCache was created by Dmitry Stogov and much of the eAccelerator code is still based on his work. eAccelerator stores compiled PHP scripts in shared memory and executes code directly from it. It creates locks only for a short time, while searching for a compiled PHP script in the cache, so one script can be executed simultaneously by several engines. Files that can't fit in shared memory are cached on disk only. The latest release, 0.9.6.1, features support for PHP 5.3 and also works with PHP 5.1 and 5.2. The previous 0.9.5 branch supports PHP 4 and all PHP 5 releases including 5.2. In older releases, the encoder will only work with PHP versions from the 4.x.x branch. 4. Serveur Web Nginx 5. Memcache 5 M1 CERI Cahier des charges 2010-2011 Pour de meilleures performances sur vos sites web Memcache est un serveur de cache qui utilise la mémoire vive du serveur pour stocker ses données. Ce mode de stockage garantit des temps de lecture très inférieurs au système traditionnel cd cache de fichiers. Memcached et eAccelerator peuvent fonctionner ensemble sans aucun problème. ‡Memcached met en cache les résultats et diverses variables de php. ‡eAccelerator optimise le code PHP. Url du site officiel : http://memcached.org/ 5.1. MySQL et memcached 6. MySQL &Memcached Memcached améliore les performances et l'évolutivité des sites Web dynamiques sous MySQL en mettant des données et des objets en mémoire cache pour soulager la charge pesant sur la base de données. Les plus grands noms du Web, comme YouTube, Facebook, Fotolog ou Wikipedia déploient Memcached et MySQL pour satisfaire la demande de millions d'utilisateurs visionnant chaque mois des milliards de pages. « Memcached s'est révélé un composant crucial de l'architecture Web 2.0 de Fotolog. Il nous a permis de devenir l'une des principales destinations en ligne : nous servons des milliards de pages vues par mois depuis 2006 » Farhan « Frank » Mashraqi, Directeur des opérations commerciales et de la stratégie technique de FotologInc Memcached et MySQL permet aux entreprises : 6 M1 CERI Cahier des charges 2010-2011 - de mettre en place une solution de mise en cache des données évolutive et performante pour leurs applications en ligne - de réduire le coût total de possession (TCO) des bases de données en supprimant les coûts de licences de logiciels propriétair es de mise en cache des données - de réduire le TCO système en utilisant mieux des ressources telles que la RAM inactive ou disponible sur les systèmes existants - d'augmenter ou de réduire de façon incrémentielle la capacité de mise en cache des données, à la demande, afin de réagir rapidement à l'évolution des besoins. La principale utilisation de Memcached : cacher les requêtes MySQL. Mais il faut savoir que Memcached ne se limite pas à MySQL. Le principe, c¶est de mettre en cache dans memcached les requêtes lourdes. Le resultat de la requête se trouvera dans memcached. Au lieu de faire un SELECT compliqué sur une base de données avec des accès disques, on fait simplement un accès à la mémoire. 7 M1 CERI Cahier des charges 2010-2011 7. Disponibilité/Robustesse 7.1. Réplication Master/slave temps réel MySQL La réplication MySQL consiste à avoir en temps réel deux bases de données MySQL identiques afin de pouvoir basculer sur un deuxième serveur en cas de défaillance du premier. La réplication MySQL est basée sur le fait que le serveur va garder la trace de toutes les évolutions de vos bases (modifications, effacements, etc.) dans un fichier de log binaire et les esclaves vont lire les requêtes du maître dans ce fichier de log, pour pouvoir exécuter les mêmes requêtes sur leurs copies. Il est très important de comprendre que le fichier de log binaire est simplement un enregistrement des modifications depuis un point fixe dans le temps (le moment où vous activez le log binaire). Tous les esclaves que vous activez auront besoin de la copie des données qui existaient au moment du démarrage du log. Si vous démarrez vos esclaves sur sans qu·ils ne disposent des données identiques à celles du maître au moment du démarrage du log binaire, votre réplication va échouer. Nous partons avec l¶architecture suivante: Deux serveurs A, et B sous Linux (réalisé sous Debian) ayant chacun une base de donnée MySQL. IP Serveur A: 192.168.0.1 IP Serveur B: 192.168.0.2 8 M1 CERI Cahier des charges 2010-2011 9 M1 CERI Cahier des charges 2010-2011 10 M1 CERI Cahier des charges 2010-2011 8. ANNEXE 8.1. Mise en place de NGINX+PHP-FPM Installation # Près-requis aptitude install build -essential libpcre3 -dev libssl -dev zlib1g -dev aptitude install php5 -cli php5-common php5 -mysql php5 -suhosin php5 -fpm php5-cgi php-pear php5-xcache php5 -gd php5-curl # Téléchargement des fichiers wget http://sysoev.ru/nginx/nginx -0.8.54.tar.gz # Extraction tarzxvf nginx -0.8.54.tar.gz # Configure cd nginx-0.8.54 ./configure \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --pid-path=/var/run/nginx.pid \ --lock-path=/var /lock/nginx.lock \ --http-log-path=/var/log/nginx/access.log \ --with-http_dav_module \ --http-client-body-temp-path=/var/lib/nginx/body \ --with-http_ssl_module \ --http-proxy-temp-path=/var/lib/nginx/proxy \ --with-http_stub_status_module \ --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \ --with-debug \ --with-http_flv_module \ # Compilation make # Installation makeinstall # Création des repertoires que l¶on a besoin mkdir /var/lib/nginx mkdir /etc/nginx/conf.d mkdir /etc/nginx/sites -enabled Script de démarrage 11 M1 CERI #! /bin/sh ### BEGIN INIT INFO # Provides: # Required -Start: # Required -Stop: # Default-Start: # Default-Stop: # Short-Description: # Description: ### END INIT INFO Cahier des charges 2010-2011 nginx $all $all 2 3 4 5 0 1 6 starts the nginx web server starts nginx using start -stop-daemon PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/local/nginx/sbin/nginx PID=/var/run/nginx.pid NAME=nginx DESC=nginx test -x $DAEMON || exit 0 # Includenginx defaults if available if [ -f /etc/default/nginx ] ; then . /etc/default/nginx fi set -e case "$1" in start) echo -n "Starting $DESC: " start-stop-daemon --start --quiet --pidfile $PID \ --exec $DAEMON -- $DAEMON_OPTS echo "$NAME." ;; stop) echo -n "Stopping $DESC: " start-stop-daemon --stop --quiet --pidfile $PID \ --exec $DAEMON echo "$NAME." ;; restart|force -reload) echo -n "Restarting $DESC: " start-stop-daemon --stop --quiet --pidfile $PID \ --exec $DAEMON sleep 1 start-stop-daemon --start --quiet --pidfile \ /usr/local/nginx/logs/nginx.pid --exec $DAEMON -- $DAEMON_OPTS echo "$NAME." ;; reload) echo -n "Reloading $DESC configuration: " start-stop-daemon --stop --signal HUP --quiet --pidfile $PID \ --exec $DAEMON echo "$NAME." ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart|force -reload}" >&2 exit 1 ;; esac 12 M1 CERI Cahier des charges 2010-2011 exit 0 # On donne les droits au script, on le configure pour le démarrage mvnginx /etc/init.d/ chmod 755 /etc/init.d/nginx /usr/sbin/update -rc.d -f nginx defaults # démarrerPHP-FPM et NGINX /etc/init.d/php5 -fpm start /etc/init.d/nginx start 8.2. Mise en place de eAccelerator Installation # Près-requis pour utiliser phpsize sudo apt-get install php5 -dev # Téléchargement derniere version wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator -0.9.6.1.tar.bz2 # Extraction tarjxvf eaccelerator -0.9.6.1.tar.bz2 cd eaccelerator -0.9.6.1 # Compilation phpize ./configure make sudo make install # dire à PHP de charger la librairie: sudo echo "; configuration for phpeaccelerator module" > /etc/php5/conf.d/eaccelerator.ini sudoecho "extension=eaccelerator.so" >> /etc/php5/conf.d /eaccelerator.ini #On redémarre le serveur php sudo /etc/init.d/php5 -fpm restart 13 M1 CERI Configuration Cahier des charges 2010-2011 # Création d¶un répertoire et modification des droits /var/www/cache/eaccelarator avec un chmod de 0777 pour qu'il soit disponible en lecture et écriture mkdir /var/www/cache/eaccelerator chmod 0777 /var/www/cache/eaccelerator # Mise en place des options dans eaccelerator.ini dans le répertoire /etc/php5/conf.d/ vim/etc/php5/conf.d/eaccelerator.ini extension="eaccelerator.so" eaccelerator.shm_size="16" eaccelerator.cache_dir="/var/www/cache/eaccelerator" eaccelerator.enable ="1" eaccelerator.optimizer="1" eaccelerator.check_mtime="1" eaccelerator.debug="0" eaccelerator.filter="" eaccelerator.shm_max="0" eaccelerator.shm_ttl="0" eaccelerator.shm_prune_peri od="0" eaccelerator.shm_only="0" eaccelerator.compress="1" eaccelerator.compress_level="9" Explications des différentes options disponibles : eaccelerator.shm_size = "64" Cette variable permet de définir la quantité de mémoire partagée à allouer à eAccelerator. Valeur par défaut : 0 qui correspond à la valeur par défaut du système d'exploitation. eaccelerator.cache_dir="/var/www/cache/eaccelerator" Répertoire dans lequel sont stockées les pages "cachées" de eaccelerator, pour Windows, le chemin doit être du type "C:pathtotmp". eaccelerator.enable = "1" Active ou désactive eAccelerator, 1 pour activé et 0 pour désactivé. Par défaut : 1. eaccelerator.optimizer = "1" 14 M1 CERI Cahier des charges 2010-2011 Active ou désactive l'optimiseur de eAccelerator qui sert à augmenter les performances. 1 pour activé et 0 pour désactivé. Par défaut : 1. eaccelerator.debug = "0" Active ou désactive les logs de eAccelerator. Par défaut : 0. eaccelerator.check_mtime = "1" Active ou désactive le comparateur (basé sur la date) de eAccelerator. Si vous modifiez souvent vos scripts, donnez la valeur "1" à cette variable, sinon donnez-lui la valeur "0". eaccelerator.filter = "" Specifie les extensions de fichiers susceptible d'être mis en cache par eAccelerator. Exemple: ".php *.phtml". La négation de cette exemple est "!.php *.phtml" (notez le caractère "!" au début de l'expression. Valeur par défaut : "", en l'occurence, met en cache tous les fichiers php). eaccelerator.shm_max = "0" Spécifie la quantité de mémoire partagée maximale pour l'utilisation de la fonction "eaccelerator_put()". Exemple : 10240, 10K, 1M. Valeur par défaut : "0", en l'occurence, aucune limite de mémoire. eaccelerator.shm_ttl = "0" Quand eAccelerator a atteint sa limite de mémoire partagée, il enlèvera de cette mémoire tous les scripts qui n'ont pas été sollicités depuis "shm_ttl" seconde. Valeur par défaut : 0, en l'occurence, n'enlève aucun script de la mémoire. eaccelerator.shm_prune_period = "0" Quand eAccelerator a atteint sa limite de mémoire partagée, il essaiera d'enlever les scripts les plus vieux dont le code compilé a été créer il y a plus de "shm_prune_period" seconde. Valeur par défaut "0", en l'occurence, n'enleve aucun script de la mémoire. eaccelerator.shm_only = "0" Active ou désactive l'utilisation du disque pour le stockag e des données (n'a aucun effet sur les données relatives aux sessions et le cache du contenu, on 15 M1 CERI Cahier des charges 2010-2011 parle ici de code compilé intermédiaire). Valeur par défaut : "0", en l'occurence, l'utilisation du disque ET de la mémoire est autorisé. eaccelerator.compress = "1" Active ou désactive la compression du cache du contenu. Valeur par défaut : "1", en l'occurence, les données mises en cache sont compressées. eaccelerator.compress_level = "9" Specifie l'indice de compression utilisé pour le stockage des données mis e en cache. Valeur par défaut : "9", en l'occurence, l'indice de compression maximum. 8.3. Mise en place de Percona Serveur Installation # Les paquets Debian depuis Percona sont signés avec une clé. Ajout de la clé gpg --keyserver hkp://keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A ... [some output removed] ... gpg: imported: 1 gpg -a --export CD2EFD2A | apt -key add #Ajout des dépôts dans : /etc/apt/sources.list: deb http://repo.percona.com/apt lenny main deb-src http://repo.percona.com/apt lenny main # On fait un update: apt-get update : # Installation : apt-get install percona -server-client-5.1 percona -server-server-5.1 percona server-common 8.4. Mise en place de memcache # Installation aptitudeinstallmemcached 16 M1 CERI Cahier des charges 2010-2011 # On lance memcached en utilisant la ligne de commande suivante : /etc/init.d/memcachedstart # Vérifier que Memcache fo nctionne bien. php -r "phpinfo();" | grepmemcache # Vous devriez avoir quelque chose comme ça : memcache memcache support => enabled memcache.allow_failover => 1 => 1 memcache.chunk_size => 8192 => 8192 memcache.default_port => 11211 => 11211 memcache.default_timeout_ms => 1000 => 1000 memcache.hash_function => crc32 => crc32 memcache.hash_strategy => standard => standard memcache.max_f ailover_attempts => 20 => 20 Registered save handlers => files user sqlitememcache # Autre test pour vérifier que memcache fonctionne bien : #Créer un fichier test -memcache.php avec le contenu suivant mettez -le dans /var/www et afficher le dans votre navi gateur : 17 M1 CERI Cahier des charges 2010-2011 18
Fly UP