SystemUpdate/InstallRPM
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:
- perl-libwww-perl
- perl-IO-Compress
- 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