Solutions informatiques 7 Projet LowHifi Techniciens : Paul-Emile MELLET Vincent AUFEVRE Remy BOUCOUX Anaëlle SCHEMID 1
Solutions informatiques 7
Projet LowHifi
Techniciens :
Paul-Emile MELLET Vincent AUFEVRE Remy BOUCOUX Anaëlle SCHEMID
Année 2016-2017
1
Documentation technique
Informations sur les serveurs :
Routeur virtuel - OS : Windows Server 2008 R2.- Rôle : « Services de stratégie et d’accès réseau ».- NAT : actif.
Serveurs Web - OS : Debian 8.5 Jessie.- Services : Apache 2.4, PHP 7, SSH, rsync 3.1, phpMyAdmin 4.6.
Cluster HTTP (Haute disponibilité) - OS : Debian 8.5 Jessie.- Service : HAProxy 1.5.
Serveur MySQL - OS : Debian 8.5 Jessie.- Services : MySQL Server 5.5, MySQL Client 5.5, rsync 3.1.
Cluster MySQL (Equilibrage de charges) - OS : Debian 8.5 Jessie.- Services : HAProxy 1.5, MySQL Client 5.5, rsync 3.1.
2
Configuration du routeur virtuel :
Ajouter le rôle « Services de stratégie et d’accès réseau » d’activer le routage réseau.
Activer le routage ainsi que le service NAT.
3
Configuration des serveurs Web :
Ajout de source de paquets :
echo "deb http://packages.dotdeb.org jessie all" > /etc/apt/sources.list.d/dotdeb.listwget -O- https://www.dotdeb.org/dotdeb.gpg | apt-key add -
Mise à jour des composants.
apt-get update && apt-get dist-upgrade
Installation du service « Apache ».
apt-get install apache2
Vérifier que la version d’apache est en 2.4 ou supérieur.
apache2 -v
Installation de « PHP 7 » et dépendances.
apt-get install php7.0 libapache2-mod-php7.0 php7.0-mysql php7.0-curl php7.0-json php7.0-gd php7.0-mcrypt php7.0-msgpack php7.0-memcached php7.0-intl php7.0-sqlite3 php7.0-gmp php7.0-geoip php7.0-mbstring php7.0-xml php7.0-zip
Installer le serveur SSH afin de sécuriser les échanges de fichiers entre les serveurs web et d’activer le protocole SFTP pour le dépôt des fichiers web depuis Internet.
apt-get install openssh-server
Sécuriser l’accès SSH en ajoutant ces lignes à la suite dans le fichier de configuration.
- nano /etc/ssh/sshd_config
Subsystem sftp internal-sftp
# Permit Local RootMatch Address 192.168.0.2,192.168.0.3 PermitRootLogin yes
# Custom Chroot DirectoryMatch User lowhifi ChrootDirectory %h AllowTCPForwarding no X11Forwarding no ForceCommand internal-sftp
4
Créer un utilisateur « lowhifi » pour l’accès distant par SFTP.
useradd -m lowhifipasswd lowhifiusermod -g www-data lowhifiusermod -G lowhifi lowhifiusermod lowhifi –d /var/www/public/lowhifi
Installer et configurer « rsync » pour la synchronisation des fichiers web sur le serveur web secondaire.
apt-get install rsync
Cette manipulation est à faire sur le serveur secondaire.
ssh-keygen -t rsa -b 2048ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
Tester la connexion automatique.
Planification d’une synchronisation des fichiers web du serveur web principal vers le secondaire.
crontab -e
Ajouter ce qui suit à la suite.
# rsync# Synchronize Web and Backup files*/5 * * * * rsync -avz --ignore-existing --recursive --delete [email protected]:/var/www/public/ /var/www/public
Installation de phpMyAdmin sur un ou plusieurs serveurs web.
cd /var/wwwwget https://files.phpmyadmin.net/phpMyAdmin/4.6.5.1/phpMyAdmin-4.6.5.1-all-languages.tar.gztar -zxvf phpMyAdmin-4.6.5.1-all-languages.tar.gz mv phpMyAdmin-4.6.5.1-all-languages.tar.gz phpmyadmin
Activer le fichier de configuration de phpMyAdmin.
cd phpMyAdmin mv config.sample.inc.php config.inc.php
5
Configurer phpMyAdmin.
- nano config.inc.php
Editer les lignes suivantes :
$cfg['blowfish_secret'] = 'xV4iXb47tkRv7x9kjh1Zx32b7iG2of4q';$cfg['Servers'][$i]['host'] = '192.168.0.50';
Création des « VirtualHost » personnalisées.
cd /etc/apache2/sites-availablecp 000-default.conf lowhifi.confcp 000-default.conf phpmyadmin.conf
Désactiver le « VirtualHost » par défaut.
a2dissite 000-default.conf
Configurer le chemin du site web.
- nano lowhifi.conf
Editer la ligne suivante :
DocumentRoot /var/www/public/lowhifi
Configurer le port et le chemin de phpMyAdmin.
- nano phpmyadmin.conf
Editer les lignes suivantes :
# HTTP Custom PortListen *:8080<VirtualHost *:8080>DocumentRoot /var/www/phpmyadmin
Activer les « VirtualHost » personnalisées.
a2ensite lowhifi.confa2ensite phpmyadmin.conf
- service apache2 reload
6
Créer les règles NAT afin de rediriger les ports internes vers Internet.
Même principe pour autoriser phpMyAdmin depuis Internet sur le port « 8336 ».
Création des répertoires.
mkdir –p /var/www/public/lowhifimkdir –p /var/www/public/backups/databases/dailymkdir /var/www/public/backups/databases/monthlymkdir /var/www/public/backups/databases/weeklymkdir –p /var/www/public/backups/websites/dailymkdir /var/www/public/backups/websites/monthlymkdir /var/www/public/backups/websites/weekly
7
mkdir /var/www/public/backups/others
Appliquer des droits sur les répertoires accessibles avec l’accès SFTP.
cd /var/www/public/chown lowhifi :www-data *chmod 1755 *
Créer des scripts de sauvegarde des fichiers web.
cd /etc/cron.daily
- touch backup.sh
Donner le droit d’exécution au script :
chmod +x backup.sh
- nano backup.sh
Ajouter ce qui suit :
cd /var/www/public/lowhifitar -zcvf /var/www/public/backups/websites/daily/d_lowhifi-[$(date +%d-%m-%Y)].tar.gz *
Même principe pour les tâches « cron.monthly » et « cron.weekly ». Il suffit de faire la même manipulation en se plaçant dans un dossier de tâches et en remplaçant simplement le chemin « daily » par « …/websites/monthly/… » ou « …/websites/weekly/… ».
- service cron restart
8
Mise en place d'un service de haute disponibilité HTTP :
Mise à jour des composants.
apt-get update && apt-get dist-upgrade
Installation du service « haproxy ».
apt-get install haproxy
Vérifier que la version de HAProxy est en 1.5.8 ou supérieur.
haproxy --version
Configurer « HAProxy » pour de la haute disponibilité entre les deux serveurs web.
- nano /etc/haproxy/haproxy.cfg
Ajouter les lignes suivantes :
# High Availabilityfrontend http_front bind *:80 default_backend http_back
backend http_back balance roundrobin server websrv1 192.168.0.1:80 check server websrv2 192.168.0.2:80 check backup
# Web Statisticslisten stats :8794 stats enable stats uri /stats
9
stats realm Strictly\ Private stats auth admin:admin stats hide-version stats refresh 30s
- service haproxy restart
Les statiques web sont disponibles en local depuis « http://<adresse-du-cluster-web>:8794 ». Une règle de redirection peut être définie dans le routeur avec d’avoir accès à ces statistiques depuis Internet.
Configuration et réplication des serveurs MySQL :
Mise à jour des composants.
apt-get update && apt-get dist-upgrade
Installation du service « haproxy ».
apt-get install mysql-server mysql-client
Vérifier que la version de MySQL est en 1.5.8 ou supérieur.
mysql --version
Configurer MySQL.
- nano /etc/mysql/my.cnf
Sur le serveur MySQL primaire, éditer les lignes suivantes :
server-id = 1log_bin = /var/log/mysql/mysql-bin.logbinlog_do_db = lowhifi#bind-address = 127.0.0.1
Sur le serveur MySQL secondaire, éditer les lignes suivantes :
server-id = 2log_bin = /var/log/mysql/mysql-bin.logbinlog_do_db = lowhifi#bind-address = 127.0.0.1
- service mysql restart
10
Créer la même base de données sur les deux serveurs MySQL.
mysql –u root –pcreate database lowhifi ;
Redémarrer les deux serveurs MySQL.
shutdown –r now
Configurer la réplication des serveurs MySQL.
create user 'replicator'@'%' identified by 'replicator';grant replication slave on *.* to 'replicator'@'%';flush privileges;
Sur le serveur MySQL primaire, exécuter cette commande.
show master status;
Sur le serveur MySQL secondaire, exécuter les commandes suivantes.
mysql –u root –pcreate user 'replicator'@'%' identified by 'replicator';grant replication slave on *.* to 'replicator'@'%';flush privileges ;slave stop; CHANGE MASTER TO MASTER_HOST = '192.168.0.3', MASTER_USER = 'replicator', MASTER_PASSWORD = 'replicator', MASTER_LOG_FILE = 'mysql-bin.000017', MASTER_LOG_POS = 107; slave start;
Sur ce même serveur, exécuter cette commande.
show master status;
11
Sur le serveur MySQL primaire, exécuter les commandes suivantes.
slave stop; CHANGE MASTER TO MASTER_HOST = '192.168.0.4', MASTER_USER = 'replicator', MASTER_PASSWORD = 'replicator', MASTER_LOG_FILE = 'mysql-bin.000017', MASTER_LOG_POS = 107; slave start;
Manipulation à faire sur l’un des deux serveurs MySQL.
Créer un utilisateur « lowhifi ».
useradd –m lowhifi
Créer les répertoires de sauvegardes.
mkdir –p /home/lowhifi/databases/dailymkdir /home/lowhifi/databases/monthlymkdir /home/lowhifi/databases/weekly
Créer un utilisateur MySQL avec tous les privilèges pour l’accès depuis phpMyAdmin.
mysql –u root -pGRANT ALL PRIVILEGES ON *.* TO 'lowhifi'@'%' IDENTIFIED BY PASSWORD 'lowhifi';
Créer un utilisateur MySQL local pour les sauvegardes MySQL.
mysql –u root -pGRANT SELECT, LOCK TABLES ON `lowhifi`.* TO 'dump'@'localhost' IDENTIFIED BY PASSWORD 'dump';
Créer des scripts de sauvegarde de la base de données.
cd /etc/cron.daily
- touch mysqldump.sh
Donner le droit d’exécution au script :
chmod +x mysqldump.sh
12
- nano mysqldump.sh
Ajouter ce qui suit :
mysqldump -u dump -pdump webbit | gzip > /home/lowhifi/databases/daily/d_lowhifi-[$(date +%d-%m-%Y)].sql.gz
Même principe pour les tâches « cron.monthly » et « cron.weekly ». Il suffit de faire la même manipulation en se plaçant dans un dossier de tâches et en remplaçant simplement le chemin et nom du fichier « …/daily/d_lowhifi… » par « …/monthly/m_lowhifi… » ou « …/weekly/w_lowhifi… ».
- service cron restart
Installer et configurer « rsync » pour la copie des fichiers de base de données sur le serveur SFTP.
apt-get install rsync
Cette manipulation est à faire sur le serveur secondaire.
ssh-keygen -t rsa -b 2048ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
Tester la connexion automatique.
Planification d’une synchronisation des fichiers web du serveur web principal vers le secondaire.
crontab -e
Ajouter ce qui suit à la suite.
# rsync# Daily task (Every day at 00:00 PM)0 0 * * * rsync -avzhe ssh /home/lowhifi/databases/daily/ [email protected]:/var/www/public/backups/databases/daily# Weekly task (Every Thursday at 00:15 PM)15 0 * * 5 rsync -avzhe ssh /home/lowhifi/databases/weekly/ [email protected]:/var/www/public/backups/databases/weekly# Monthly task (Every 1st Month at 00:30)30 0 1 * * rsync -avzhe ssh /home/lowhifi/databases/monthly/ [email protected]:/var/www/public/backups/databases/monthly
13
Mise en place d'un cluster MySQL :
Mise à jour des composants.
apt-get update && apt-get dist-upgrade
Installation du service « haproxy » et de « mysql-client »
apt-get install haproxy mysql-client
Vérifier que la version de HAProxy est en 1.5.8 ou supérieur.
haproxy --version
Configurer « HAProxy » pour de la haute disponibilité entre les deux serveurs web.
- nano /etc/haproxy/haproxy.cfg
Commenter les lignes suivantes :
#mode http#option httplog
Ajouter les lignes suivantes :
# MySQL Load Balancinglisten mysql-cluster mode tcp bind *:3306 option mysql-check user haproxy_check balance roundrobin server dbsrv1 192.168.0.3:3306 check
14
server dbsrv2 192.168.0.4:3306 check
# Statisticslisten stats :3478 mode http stats enable stats uri /stats stats realm Strictly\ Private stats auth admin:admin stats hide-version stats refresh 30s
- service haproxy restartLes statiques web sont disponibles en local depuis « http://<adresse-du-cluster-mysql>:3478 ». Une règle de redirection peut être définies dans le routeur avec d’avoir accès à ces statistiques depuis Internet.
Vérifier le fonctionnement de l’équilibrage de charges.
mysql -h 127.0.0.1 -u lowhifi -p -e "show variables like 'server_id'"
Exécuter cette commande à plusieurs reprises pour voir l’équilibrage de charges.
On peut aussi vérifier l’alternance des serveurs MySQL avec une boucle.
for i in `seq 1 10`domysql -h 127.0.0.1 -u lowhifi –plowhifi -e "show variables like 'server_id'"done
15
16