SystemUpdate/InstallRPM

De TartareFR
Version datée du 3 octobre 2012 à 18:17 par Didier (discussion | contributions) (Page créée avec « = Introduction = Ce document décrit le déroulement pas à pas de la mise à jour de MySQL depuis une version 5.1 vers la version 5.5 et par voie de conséquence, tous progr... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

Introduction

Ce document décrit le déroulement pas à pas de la mise à jour de MySQL depuis une version 5.1 vers la version 5.5 et par voie de conséquence, tous programme qui est lié à MySQL :

  • php
  • sphinx
  • gearman
  • maatkit
  • nagios-plugins

Le but est de toujours pouvoir revenir en arrière si un problème survient. C'est pourquoi les seules choses que nous effacerons, ce seront les liens symboliques ( sauf cas particulier ). Tous le reste restera en place. On en profite pour re-dimensionner les partitions.

Upgrade des serveurs

Partitions

En effet on va rogner la partition home pour agrandir la partition var. On laissera uniquement 5G sur celle-ci.

Sys. de fich.                    Tail. Occ.  Disp. %Occ. Monté sur
/dev/mapper/VolGroup00-LogVol03  29G   614M  27G    3%   /home
/dev/mapper/VolGroup00-LogVol02  38G   30G   6,5G  82%   /var

Si /home/joyau existe, il faut le démonter d'abord et le remonter après avoir remonté la partition home. On rabote le volume de la partition home à 4G de manière à pouvoir réduire le container LVM à 5G, puis on re-dimensionne le volume de la partition afin d'occuper tout l'espace du container.

umount /home/joyau # s'il existe seulement
umount /home
e2fsck -f /dev/mapper/VolGroup00-LogVol03
resize2fs -p /dev/mapper/VolGroup00-LogVol03 4G
lvresize -L 5G /dev/mapper/VolGroup00-LogVol03
resize2fs /dev/mapper/VolGroup00-LogVol03
e2fsck -f /dev/mapper/VolGroup00-LogVol03
mount /home
mount /home/joyau # s'il existe seulement

Pour connaître l'espace non alloué on exécute

vgdisplay | grep Free
  Free  PE / Size       617 / 19,28 GB

On a donc 19G de disponible pour var

lvresize -L +19G /dev/mapper/VolGroup00-LogVol02
resize2fs /dev/mapper/VolGroup00-LogVol02

Maintenant on a un peu plus d'espace sur var

/dev/mapper/VolGroup00-LogVol02    57G   36G   18G  67% /var
/dev/mapper/VolGroup00-LogVol03   9,7G  614M  8,8G   7% /home

Dump des databases

On dump les bases

for BASE in BASE_B2PWEB_VITRINE BASE_BDF mysql CITIES session BASE_TRAITEMENT ; do /opt/mysql/bin/mysqldump -B $BASE > /tmp/$BASE.sql ; done

RPM Repositories

On désactive le repository dag qui n'est plus qu'un lien vers rpmforge et on active rpmforge ( la cible du lien ) à la place.

mv /etc/yum.repos.d/dag.repo /etc/yum.repos.d/dag.repo.bak
rpm -Uhv http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

Mise à jour générale

Le paramètre '--skip-broken' est obligatoire car on a un problème de dépendances, que l'on résoudra plus tard.

yum update --skip-broken

installation du repository b2pweb

On spécifie l'adresse du repository

echo -e "192.168.0.11\trpm.b2pweb.com\t\trpm" >> /etc/hosts

On installe le repository b2pweb

yum install yum-priorities
wget http://admin:b2p2010web@rpm.b2pweb.com:8080/centos/5/os/RPMS/noarch/b2pweb-prod-1.1.0-2.el5.noarch.rpm
rpm -Uvh b2pweb-prod-1.1.0-2.el5.noarch.rpm
yum update --skip-broken

On reboot car il y a une mise à jour du noyau

reboot

On en profite pour ajouter les services qui doivent être démarrés et qui ne le sont pas, à coup de

chkconfig PACKAGE on

Problème de dépendances

On va purger les paquets incriminer et les ré-installer

yum erase perl-IO-Compress

Ce qui va purger les paquets:

  1. perl-libwww-perl
  2. perl-IO-Compress
  3. munin-node

On refait une mise à jour pour la forme, on réinstalle nos paquets et on redémarre les services affectés par ce problème.

yum update
yum install munin-node srvadmin-all
mv /etc/munin/munin-node.conf.rpmsave /etc/munin/munin-node.conf
/etc/init.d/munin-node restart
chkconfig munin-node on

ANTE update

On va créer un répertoire /opt.bak

mkdir /opt.bak

Mise à jour de MySQL

Nous allons passer MySQL de la version 5.1 à la version 5.5.

On arrête l'esclave, et on note la position dans le binlog.

mysql -e "STOP SLAVE;" 
mysql -e "SHOW SLAVE STATUS \G;" 

On note:

  • bin file
  • bin position

On arrête MySQL.

/etc/init.d/mysql.server stop

On supprime les liens symboliques des exécutables MySQL dans /usr/bin

rm -f $(ll /usr/bin/* | grep opt | grep mysql | awk '{print $9}')

On déplace les fichiers en-têtes du répertoire /usr/include

mv /usr/include/mysql /usr/include/mysql.bak

On supprime les liens symboliques des librairies MySQL dans /usr/lib*/

rm -f /usr/lib{,32,64}/{,lib}my*

Désactivation de l'ancien script de démarrage

mv /etc/init.d/mysql.server /etc/init.d/mysql.server.bak
chmod -x /etc/init.d/mysql.server.bak
rm -f /etc/rc3,d/*mysql*

On sauvegarde le fichier /etc/my.cnf et on install MySQL

mv /etc/my.cnf /etc/my.cnf.bak
yum install MySQL-conf-prod

On édite le fichier /etc/my.cnf pour préciser le server-id, on redémarre mysql, on lance l'outil d'upgrade, on re-démarre mysql et on supprime le démarrage automatique au boot

yum install mysql-server mysql-client mysql-shared
/etc/init.d/mysql start
mysql_upgrade
/etc/init.d/mysql restart
chkconfig mysql off

Déplacement du répertoire et création du lien symbolique dans /opt/mysql/bin

mv /opt/mysql /opt.bak/
mkdir -p /opt/mysql/bin ; ln -s /usr/bin/mysql* /opt/mysql/bin/

Modification du script de purge pour ne garder que 2 heures de binlog

vim /root/scripts/purge_binary_logs.sh
…
mysql -e "purge binary logs before date_sub(now(), interval 2 hour);"
…

Modification du cron pour lancer la purge toutes les heures.

Si nécessaire, recaler la réplication

STOP SLAVE ;
RESET SLAVE ;
CHANGE MASTER TO MASTER_HOST='MASTER-IP', MASTER_USER='myslave', MASTER_PASSWORD='bre2005bis', MASTER_LOG_FILE='mysql-bin.xxxxxx', MASTER_LOG_POS=xxx;
START SLAVE ;

Mise à jour d'apache et de php

On arrête apache

/etc/init.d/httpd stop

On renomme le script d'init et on le désactive

mv /etc/init.d/httpd /etc/init.d/httpd.bak
chmod -x /etc/init.d/httpd.bak
rm -f /etc/rc3,d/*httpd*

On supprime le lien symbolique /etc/httpd s'il existe et on déplace le home d'apache

rm -f /etc/httpd
mv /opt/httpd /opt.bak/
mv /opt/php /opt.bak/
mv /opt/php-cli /opt.bak/

On sauvegarde la conf php

mv /etc/php.ini /etc/php.ini.bak
mv /etc/php.d /etc/php.d.bak # s'il existe

On installe Apache et php

yum install php php-common php-mysql php-bcmath php-dba php-gd php-mbstring php-mcrypt php-mhash php-ncurses php-odbc php-pear php-process php-pspell php-recode php-soap php-tidy php-xml php-xmlrpc php-imap php-ldap php-odbc php-snmp php-pdo httpd mod_ssl php-compat-opt httpd mod_ssl

On redémarre apache pour tester après lui avoir remis les vhosts et le ldirectord

cp /opt.bak/httpd/conf/extra/httpd-vhosts.conf /etc/httpd/conf/extra/
cp /opt.bak/httpd/htdocs/ldirectord.html /var/www/htdocs/
/etc/init.d/httpd start
chkconfig httpd on

A rajouter dans le fichier /etc/yum.repo.d/b2pweb.repo, à la fin de la section [b2pweb].

Les nouveaux paquets le font automatiquement.

exclude=php*5.3*

Comme httpd tourne maintenant sous l'utilisateur apache, il convient de supprimer les anciennes sessions qui appartiennent à daemon.

rm -f /tmp/sess_*

Mise à jour de Sphinx

On déplace l'ancien sphinx et on installe le nouveau

mv /opt/sphinx{,32,64} /opt.bak/
rm -f /opt/sphinx
yum install sphinx php-pecl-sphinx

On installe les données

yum install sphinx-data-b2pweb

On démarre et on désactive l'ancien script de démarrage

/etc/init.d/searchd start
chkconfig searchd on
chmod -x /etc/init.d/sphinx ; mv /etc/init.d/sphinx /etc/init.d/sphinx.bak
rm -f /etc/rc3,d/*sphinx*

On assure la compatibilité, on restart apache

mkdir -p /opt/sphinx/{bin,etc,var}
ln -s `which search` /opt/sphinx/bin/
ln -s `which indexer` /opt/sphinx/bin/
ln -s /etc/sphinx/sphinx.conf /opt/sphinx/etc/b2p.conf
ln -s /var/lib/sphinx/data /opt/sphinx/var/data
/etc/init.d/httpd restart

On test

/opt/sphinx/bin/search -c /opt/sphinx/etc/b2p.conf -i city -l 1 -e "cavaillon*" @countrycode "FR"

Mise à jour de gearman

On arrête le daemon et on désactive le script de démarrage

/etc/init.d/gearmand stop
mv /etc/init.d/gearmand /etc/init.d/gearmand.bak
chmod -x /etc/init.d/gearmand.bak
rm -f /etc/rc3,d/*gearman*

On installe le RPM

yum install gearman gearmand gearman-server php-pecl-gearman
chkconfig gearmand on
/etc/init.d/gearmand start
/etc/init.d/httpd restart

Mise à jour de maatkit

Ici on va supprimer maatkit, car il est très facile de le ré-installer.

rm -f /usr/bin/mk-* ; rm -f /usr/share/man/man1/mk-* ; rm -f /usr/lib/perl5/site_perl/5.8.8/maatkit.pod
mv /etc/init.d/mk-slave-restart /etc/init.d/mk-slave-restart.bak
mv /etc/init.d/mk-heartbeat-update /etc/init.d/mk-heartbeat-update.bak
chmod -x /etc/init.d/mk-slave-restart.bak /etc/init.d/mk-heartbeat-update.bak

Et on installe l'outil égyptien

yum install perl-DBD-MySQL maatkit

Mise à jour de Nagios

On arrête nrpe et on désactive le script de démarrage

/etc/init.d/nrpe stop
mv /etc/init.d/nrpe /etc/init.d/nrpe.bak; chmod -x /etc/init.d/nrpe.bak
rm -f /etc/rc3,d/*nrpe*

On sauvegarde l'ancien répertoire de nagios et on l'installe

mv /opt/nagios /opt.bak/
yum install nagios-plugins nagios-plugins-b2pweb nagios-nrpe nagios-plugins-setuid
chkconfig nrpe on
/etc/init.d/nrpe start

Mise à jour de glusterfs

umount /home/joyau
/etc/init.d/glusterfsd stop
mv /opt/glusterfs/ /opt.bak/
mv /etc/glusterfs /etc/glusterfs-bak
mv /etc/init.d/glusterfsd /etc/init.d/glusterfsd.bak
chmod -x /etc/init.d/glusterfsd.bak
rm -f /etc/rc.d/rc?.d/*gluster*
yum install glusterfs-core glusterfs-fuse glusterfs-rdma
/etc/init.d/glusterd start
chkconfig glusterd on
mkdir -p /var/lib/glusterfs/datastore

Suivre la notice sur glusterfs paragraphe 7 ( glusterfs >= 3.1 )

# gluster peer probe 192.168.0.106
Probe successful
# gluster peer probe 192.168.0.111
Probe successful
# gluster peer probe 192.168.0.116
Probe successful
# gluster peer probe 192.168.0.121
Probe successful
# gluster peer probe 192.168.0.126
Probe successful
# gluster volume create joyau replica 3 transport tcp \ 192.168.0.101:/var/lib/glusterfs/datastore 192.168.0.106:/var/lib/glusterfs/datastore \ 192.168.0.111:/var/lib/glusterfs/datastore 192.168.0.116:/var/lib/glusterfs/datastore \ 192.168.0.121:/var/lib/glusterfs/datastore 192.168.0.126:/var/lib/glusterfs/datastore
Creation of volume joyau has been successful. Please start the volume to access data.
# gluster volume start joyau
Starting volume joyau has been successful


Installation des modules pear/pecl pour php

Les modules ne nécessitent aucunement de modifier le php.ini. Il suffit de relancer apache dans le cas du module apache, rien à faire dans le php-cli.

Installation de PHPUnit ( et ses dépendances )

yum install php-pear-phpunit-phpunit

Dépendances de PHPUnit ( celles-ci sont installées automatiquement avec la commande précédente ).

PHPUnit nécessite donc trois channels supplémentaires :

  • pear.phpunit.de
  • components.ez.no
  • pear.symfony-project.com

Ces channels sont installés via yum

yum install php-channel-phpunit php-channel-symfony-project php-channel-ezcomponents

File_Iterator

yum install php-pear-phpunit-file-iterator

DbUnit

yum install php-pear-phpunit-dbunit

PHPUnit_MockObject

yum install php-pear-phpunit-mockobject

PHPUnit_Selenium

yum install php-pear-phpunit-selenium

PHP_CodeCoverage

yum install php-pear-phpunit-php-codecoverage

PHP_Timer

yum install php-pear-phpunit-php-timer

PHP_TokenStream

yum install php-pear-phpunit-php-tokenstream

Text_Template

yum install php-pear-phpunit-text-template

YAML ( pear.symfony-project.com )

yum install php-pear-symfony-yaml

Base ( components.ez.no )

yum install php-pear-ezc-base

ConsoleTools ( components.ez.no )

yum install php-pear-ezc-consoletools

Installation de test_helpers

yum install php-pecl-test-helpers

Installation de APC

yum install php-pecl-apc

Installation de phar

yum install php-pecl-phar

Installation de xdebug

yum install php-pecl-xdebug

Installation de gearman

yum install php-pecl-gearman

Installation de sphinx

yum install php-pecl-sphinx

Installation de CodeSniffer

yum install php-pear-php-codesniffer

Installation de PhiMX

Ce composant ne dispose d'aucun channel mais ne fait pas parti de l'offre officielle pear.

yum install php-pear-phimx

Installation de PHPDoc

yum install php-pear-phpdoc

Installation de PHPDocumentor

yum install php-pear-phpdocumentor

Dépendances automatiquement installées avec PHPDocumentor

yum install php-pear-xml-parser
yum install php-pear-xml-beautifier

Installation de Swift ( pear.swiftmailer.org )

yum install php-pear-swift-swift

Post update

Installation des outils complémentaires

yum install sysstat vnstat htop innotop tree lsof -y