mardi 17 novembre 2009

HACMP concurrent Vg synchronizing

On a HACMP/PowerHA cluster, with concurrent VG, if a filesystem is created outside HACMP, the cluster is "out of sync"... if we do a lsvg -l on both nodes, some mount point will be N/A on the remote node.

The online way to resynchronize is :

on the passive node :
varyoffvg VGname

on the active node :
/usr/es/sin/cluster/sbin/cl_updatevg -cspoc -g ResourceGroupName VGname
or via Cspoc menu -> HACMP Logical Volume Management -> synchronize a Shared VG definition

On the passive node :
varyonvg -n -c -P VGname

jeudi 24 septembre 2009

trace réseau

# tcpdump -v -i ent1 -A -w /tmp/tcpdump.out
Peut etre lu par ethereal ou par un tcpdump -r
# tcpdump host machine1 port 53
filtre sur le nom de host et le port named

mardi 15 septembre 2009

mercredi 12 août 2009

quicky : create / extend a fs on a redhat 5 with lvm

list volume groups :
#vgs
or
#vgdisplay

create a lv :
#lvcreate -L 10G -n lvname vgname

format the lv to ext3:
#mkfs.ext3 /dev/vgname/lvname

to create the fs, need to add the correct entry in /etc/fstab

list the lvm /fs :

#lvdisplay

extend lv :
#lvextend -L +54 /dev/vg01/lvol10 /dev/sdk3

extend fs :
#resize2fs /dev/vg01/lvol10

samedi 13 juin 2009

Verify the PowerHa POL (Priority Override Location)

/usr/es/sbin/cluster/utilities/clRGinfo -p

Primary instance POL : must be blank

Resetted via Cspoc, should not be disruptive.

mercredi 3 juin 2009

useful hmc commands

lspartition -dlpar <= Active <1> for partition to accept commands.



if not 1, then, on the partition :

partition :root / # /usr/sbin/rsct/bin/rmcctrl -z

partition :root / # /usr/sbin/rsct/install/bin/recfgct

0513-071 The ctcas Subsystem has been added.

partition :root / # /usr/sbin/rsct/bin/rmcctrl -s

0513-071 The ctrmc Subsystem has been added.

0513-059 The ctrmc Subsystem has been started.

Subsystem PID is 401430.

partition :root / # /usr/sbin/rsct/bin/rmcctrl -p





Migrate lpar (live mobility) :

migrlpar -o m -m P570origine -t P520destination -p Partitionabasculer



Migrate lpar (from /to MSP):

migrlpar -o v -m srcSystem -t destSystem -p myLPAR –I source_msp_id=2,dest_msp_name=S2_VIOS2

List all the systems :

lssyscfg -r sys -F name

List the scsi devices defined for a partition :

lssyscfg -r prof -m P570 --filter "lpar_names=darecb1" -F lpar_id,virtual_scsi_adapters

List all the defined scsi devices for a physical server :

lshwres -r virtualio --rsubtype scsi -m P570 --level lpar -F lpar_name,lpar_id,slot_num,remote_lpar_id,remote_slot_num --header


samedi 16 mai 2009

Problem determination PowerHA / HACMP

Collect logs : clsnap -d '/tmp' -p2 -n 'node1,node2'

or

snap -e

If cspoc pb : /tmp/cspoc.log <= more details

If Vg configuration is inconstitent between nodes :

1) Validate that all disks in a VG are know, on both nodes

node1 # lspv grep vg1

hdisk3 005a2b2a4dc045f3 vg1 active

hdisk4 005a2b2ab58a59b2 vg1 active

node 2 # lspv grep vg1

hdisk3 005a2b2a4dc045f3 vg1

hdisk4 is missing ....

if HACMP is > 5.4, and VG are not ehanced concurrent (which is not the case, since the vg is not "concurrent" but "active" then :

node 2 # lspv grep 005a2b2ab58a59b2

hdisk4 005a2b2ab58a59b2 None

2) Integrate it in the vg correctly

node1 # lqueryvg -p hdisk3 -T > /usr/es/sbin/cluster/etc/vg/vg1 <= this is to save the good timestamp for the cluster

node1 # varyonvg -ub vg1 <= From now on, NO MORE manipulation on vg1, on node 1, must occur...

node2 # importvg -L vg1 hdisk3

vg1

node2 # lqueryvg -p hdisk3 -T > /usr/es/sbin/cluster/etc/vg/vg1 <= This way, the timestamp is correct on both nodes.

node1 #varyonvg vg1 <= Things are back to normal, now.

This is the simplest way to refefine correctly the vg on backup node... But, this is when things are going smooth.... its not always that way....

First, if the pvid is not known on node 2... First, is it's zoning correctly defined ? if yes, you MUST have a disk in "none None" on your backup node. If you want it to be correctly defined on you second node, you must do a "rmdev/cfgmgr" while vg1 is in mode 'unlocked' on node 1, via the varyonvg -ub command.

If it has been known, and now, it is no more, it means you have 'phantom' disks. Some disks must be "Defined" on node 2, as others are defined in place, with no definition (None = no pvid none = no vg defined). The good way to define them correctly, is to remove the "None none" disk, and to "mkdev" the Defined one, again.

For the timestamp definition, since HACMP 5.4, the timestamp is synchronised via the clveryfy command.

mercredi 6 mai 2009

Beware of the storm...

While configuring two vio server the other day, i wanted to transform both vio server SEA cards into SEA failover mode. I fell into the following trap :


If one Vio server is configured as followed :

1 virtual ethernet in vlan / pvid 1 with external network access yes, and trunk pri 1

SEA created between the adapter and this card, and, an internal adress configured on the SEA.


While configuring the other VIO server, in the same way than the first one, in order to transform it in failover mode, later, when you create the SEA adapter (with the virtual adapter on the same Vlan / pvid than the first vio server), you generate a biiig arp storm / broadcast storm, that can put your vlan, and more, down.


So, the good way to do it is to make directly the failover mode, as you create the SEA, or, to transform it before creating the second SEA on the second VIO server.


NOT : mkvdev -sea ent1 -vadapter ent4 -default ent4 -defaultid 3

but directly

mkvdev -sea ent1 -vadapter ent4 -default ent4 -defaultid 3 ha_mode=auto ctl_chan=ent3


Before, you should have the virtual adapter ent3 created, on vlan 3.


OR : if you just need to modify your existing SEA into failover mode :


chdev -dev ent3 -attr ha_mode=auto ctl_chan=ent4


there seems also to be a bypass at the switch level, which could be helpful : its the BPDU guard setting, which disables the port if bridging loop or packet storm occurs.



This is what it looks like at the end (2 differents networks for every partition)



SEA Failover entre 2 vio servers

Configuration réseau des vio servers, si on a 2 cartes réseaux physiques dans chaque vio server. Ceci ne concerne que les interfaces virtuelles qui sont présentées aux partitions :
Cette configuration permet de faire du fail over entre les vio servers, et de n'indiquer qu'une seule carte aux partitions hébergées, et que celle-ci soit en haute disponibilité.
1) Dans chaque vio serveur, il faut créer 4 interfaces virtuelles avec les parametres suivants :
ent2 dans le vlan (pvid) 1, acces au réseau externe, trunk priority 1 pour le 1er vio server, et trunk priority 2 sur le 2eme vio server
ent3 dans le vlan (pvid) 2, acces au réseau externe, trunk priority 1 pour le 1er vio server, et trunk priority 2 sur le 2eme vio server
ent4 dans le vlan 99
ent5 dans le vlan 98

2) Il faut ensuite créer DIRECTEMENT, et non pas, par étapes (sinon attention au storm arp) via la commande suivante, les SEA en mode FAIL OVER :
Pour la production :
mkvdev -sea ent0 -vadapter ent2 -default ent2 -defaultid 99 -attr ha_mode=auto ctl_chan=ent4
Explication : on crée l'interface ent6 qui sera le SEA (Shared ethernet adapter) via l'adaptateur virtuel ent2, en nous appuyant sur l'interface physique ent0. On le configure directement en fail over mode et le heartbit passe par ent4
pour le réseau de sauvegarde :
mkvdev -sea ent1 -vadapter ent3 -default ent3 -defaultid 98 -attr ha_mode=auto ctl_chan=ent5
qui va créer ent7
3) ensuite il faut configurer l'adresse ip par laquelle on va joindre les vio servers :
cfgassist => et configurer les interfaces SEA soit ent6 et ent7, avec les bonnes adresses ip.

mercredi 22 avril 2009

tester les perfs réseau entre 2 serveurs

ftp
bin
put " [pipe symbol] dd if=/dev/zero bs=2000b count=1 " /dev/null

liste d'argument trop long problème ARG_MAX

getconf -a : liste les valeurs des variables d'environnement système


par default la valeur de ARG_MAX = 24576 (6x4Ko)


si lors d'une routine exec() on sort avec une erreur de type E2BIG, visible avec analyse truss ou trace

ou si lors d'une commande on a un arglist too long


celà est dû à un passage trop grand d'arguments à une commande.


l'environnement système peut être modifié en dynamique afin d'augmenter la valeur :


chdev -l sys0 -a ncargs=16

installp en mode debug


export INST_DEBUG=y

permet d'avoir le mode debug en installp

Difference de taille entre du et ls

Difference de taille entre du et ls :


exemple : Ce programme reproduit le fonctionnement de ls : on se positionne au début du fichier et on se déplace jusqu'a la fin et on compte le deplacement


#include
#include
#include

long fileSize(char *FileName)
{
FILE *fp;
long fileLen;

fp = fopen(FileName,"r");
fseek(fp,0L, SEEK_END);
fileLen = ftell(fp);
fclose(fp);
return fileLen;

}


main(argc,argv)
int argc;
char **argv;

{

printf(" Taille de %s : %d bytes \n",argv[1],fileSize(argv[1]));

}


ew43punix1:root # dd if=/dev/zero of=./sparsefile seek=945616 bs=1024 count=10

10+0 records in.

10+0 records out.

ew43punix1:root # ll

/u/eym674h/dev/ls

total 395

drwxr-sr-x 2 root 200 512 Jan 10 11:53 ./

drwxrwsrwx 26 root 200 1024 Jan 10 11:37 ../

-rwxr-xr-x 1 root 200 198749 Jan 10 11:51 sizefile*

-rw-r--r-- 1 root 200 363 Jan 10 11:51 sizefile.c

-rw-r--r-- 1 root 200 968321024 Jan 10 12:00 sparsefile



ew43punix1:root # du -sk *


184 sizefile

1 sizefile.c

3 sparsefile <==== !!!


ew43punix1:root # ./sizefile sparsefile

Taille de sparsefile : 968321024 bytes <==== !!!


changer le TZ pour test


export TZ=nft-7200dft; date


affiche la date avec 2 mois de moins

créer une image iso de cdrom pour monter sur un serveur dépourvu de lecteur (merci Jluc!)


sur un serveur possédant un lecteur de cdrom, créer une image du cdrom dans un fichier :

dd if=/dev/cd0 of=/download/reltools.iso bs=512b

transférer l'image sur le serveur cible :

tar -cvf - reltools.iso (rsh testserver "cd /tmp/trace ; tar -xvf -")

copier l'image dans un volume logique

mklv -y'lvtest' rootvg 2

dd if=/tmp/trace/reltools.iso of=/dev/lvtest bs=512b

créer et monter un filesystem de type cdrfs :

vi /etc/filesystem

/TEST:
dev = /dev/lvtest
vfs = cdrfs
mount = false
options = ro
account = false

mount /TEST

et c'est tout bon !

Tracer le boot a partir d'une hmc ...

Pour tracer le boot d une machine d'un Pseries :


Sur n'importe quelle bécane :
# script boot.log (ca sauve tout ce qui passe sur le terminal dans boot.log)
# ssh hmc –l hscroot
# vtmenu

Retrieving name of managed system(s) . . . Server-9117-MMA-XXXXXX ------

----------------------------------------------------------
Partitions On Managed System: Server-9117-MMA-XXXXXXX------
OS/400 Partitions not listed
----------------------------------------------------------
1) PART1
2) PART2

Enter Number of Running Partition (q to quit): 1
Opening Virtual Terminal On Partition PART1. . .

Open in progress

Open Completed.


Ensuite booter la machine (ici PART1) en mode firmware Invite OK
Sur le prompt :

boot -s trap
mw enter_dbg
42
.
g


A la fin du boot, ou alors au moment du hang :
~.

Et ctrl+d pour sortir de script
Dans boot.log, vous avez la trace du boot

Code 4EE au boot sur un AIX 5.2

Si code 4EE au boot sur aix 5.2, systeme bloqué... il faut rebooter en maintenance et agrandir / . En effet, le 4EE est lié au fait de découvrir des nouveaux disques, et impossible de les ajouter dans l'odm.... Galere ce code là !!

lundi 20 avril 2009

Who's disk is it ??

If you have a no pvid disk, defined in a partition, how do you find which one it is, on the VIO server ?
1) on the aix partition :
# lscfg -l hdiskX
=> hdiskX U8203.xx.... V3-
C2-T1-L810000.... Virtual...
Slot
Lun
2) Get the AIX client ID :
# uname -L
3 PartitonName
Partion ID
3) On which Vio server is running the partition :
Log on the HMC :
# lssyscfg -r sys -F name <= gives all the managed system names #lshwres -m
PowerName -r virtualio --rsubtype scsi --filter lpar_ids=3
Powersystem on which the partition is running
Partion ID in 2)

=>lpar_name=PartitionName,lpar_id=3,slot_num=2,state=1,is_required=1,adapter_type=client,remote_lpar_id=1,remote_lpar_name=VioServerName,remote_slot_num=12,backing_devices=none
Remote Slot number
4) Log on the Vio Server (padmin)
# lsmap -all
note which adapter (
vhostX) is on the slot number 12
# lsmap -vadapter vhostX
=> the disk you are looking for, is the one with the Lun Id 810000 in 1)

vendredi 17 avril 2009

Tips HMC

Passer la HMC en francais ou en anglais...
C'est tout bête : il suffit de changer la langue... de son browser !!!!

Ajouter des disques dans une partition virtuelle

Méthode ajout de disque sur VIO server (lorsqu'il y a 2 vio serveurs, qui peuvent éventuellement récupérer les partitions en live mobility):

1) faire ajouter les disques sur les cartes fcs des vio servers
2) Sur le premier vio server

  • Se logger padmin
  • lspv => tous les disques doivent avoir un pvid, si ça n'est pas le cas, il faut faire un chdev -l hdiskx -a pv=yes en oem_setup_env ou bien chdev -dev hdiskx -attr pv=yes en padmin
  • cfgdev
  • lspv grep none awk '{ print "chdev -dev "$1" -attr pv=yes reserve_policy=no_reserve algorithm=round_robin" }'
  • récuperer l'output avec la souris et executer toutes les lignes (paste via la souris par exemple)


A ce stade les disques sont prêts sur le 1er vio server

3) se connecter sur le 2eme vio server, en padmin

  • lspv
  • cfgdev
  • passer, pour chaque disque supplémentaire, la commande suivante : (ou la commande ci dessus)
    chdev -dev hdiskX -attr reserve_policy=no_reserve algorithm=round_robin

    4) Maintenant, il faut définir les disques sur le serveur lui-même (la partition cible)
  • lancer IE : https://adresse/ de la hmc
  • Accepter la license s'il vous la propose et autoriser les popup pour ce site
    cliquer sur :


    log on and launch the hardware management console console

  • se connecter hscroot
    éventuellement, s'il le propose lancer une nouvelle session
    séléctionner le systeme concerné, dans systeme management :




  • cliquer sur properties (ou propriétés)
  • onglet "Virtual adapter" (ou la meme chose en francais!!)
  • relever la valeur du "connecting adapter", correspondant à la carte SCSI par laquelle on va voir le disque (ici, 15)




    5) définition sur le vio server

retourner sous le vio serveur hébergeant la partition

  • lsmap -all grep vhost
  • relever la carte comportant le numéro correspondant, (le vhost correspondant) et passer la commande suivante, pour y attribuer le ou les disques correspondants :
    mkvdev -vdev hdiskxx -vadapter vhostx
    ensuite, la méthode de définition sous la partition est classique.

Attention : il est prudent de vérifier les pvid obtenus sur la partition, pour les comparer avec ceux du vio serveur

Tuning Vio server

All commands as padmin :

lsdev -dev ent3 -attr thread
ent3=SEA

if 1 => threaded, else, not threaded.
Being threaded, is better for the disks i/o (better handled), counterpart is the cpu overhead.

entstat -all ent3
if thread queue overflow packet more than 0, then the vio server is overcharged.

Tips Oracle/Aix

# vmstat -v
Si
pending disk I/O blocked with no pbuf s'incrémente : alors empilement dans la couche LVM
Si paging space I/O blocked with no psbuf s'incrémente ainsi que external pager line, alors, il faut voir la valeur j2_dynamicBufferPreallocation via ioo

# lvmo -a -v datavg
Si pervg_blocked_io_count s'incrémente, alors, utiliser ioo pour augmenter pv_min_pbuf à 2048, ou lvmo -v datavg -o pv_pbuf_count=2048 (là, on ne change que pour le vg)

Lors de la création des fs pour oracle : mettre un agblksize=512. Par défaut, on est à 4096, et on risque de faire des I/O inutiles. Les autres fs peuvent garder leur taille par défaut, par contre, celui qui contient les dbf, doit avoir son agblksize à db_block_size*db_file_multiblock_read_count. Ces parametres sont à voir avec les dbas.

Si le block size est à plus de 4096, oracle recommande 4096. Sinon 1024 ou 2048.

Pour connaitre le blocksize d'un fs : lsfs -q

Pour les I/O asynchrones :

iostat -A pour récupérer des stats

Si maxg s'approche de maxreqs, augmenter maxreqs.

Préconisation Oracle:

Il faut préferer les parametres Oracle suivants :

  • filesystemio_options=setall
  • disk_async_io=true

Séparer les redo et control files

Rapide résumé des direct io et autres concurrent IO (noté rapidement, à corriger) :

Le DIO existe depuis longtemps et est positionnable sur le JFS
Le CIO existe depuis peu et est positionnable sur le JFS2

Le CIO, permet de positionner un lock particulier sur l'inode du fichier sur lequel on travaille, et d'accéder le fichier en mode DIO de maniere implicite. En plus de l'accéder en direct IO, on peut accéder le fichier en multiple lectures/ecritures avec tous les locks gérés par oracle. Donc en clair, (encore une fois, de ce que j'ai compris) quand tu fais du CIO, tu fais implicitement du Direct IO, mais en plus en concurrent. Un des gros points forts du Direct IO est que tu t'affranchis des buffers JFS2 AIX (plus rapide dans certains cas, mais surtout, moins consommateur en ram),

Le gros point noir de tout ça, c'est qu'il peut etre genant, voire dangereux, de positionner autre chose que la base oracle en Concurrent IO ou Direct IO. Donc, il faut isoler les bases, si on veut monter les jfs2 avec le parametre CIO. C'est pour ça qu'en 9i c'était délicat, parce que c'était le seul moyen de taper les bases en Cio/Dio. Apparement avec oracle 10g, il n'est plus nécéssaire de positionner le JFS2 en Cio, il suffit de mettre en place le parametre filesystemio_options dans oracle à setall, et oracle se débrouille, et ouvre les fichiers qu'il veut acceder dans le mode qui lui convient le mieux.

En résumé, si on fait des gros accès séquentiels en lecture, avec peu d'écritures, il faut rester en asynchrone de base (via le jfs2), et si on fait des accès random, il vaut mieux bypasser le cache jfs2. Le direct IO seul est de toutes facons, déconseillé (parce que plus d'io asynchrones) si j'ai bien compris.

Par contre, pour fonctionner dans ce mode là, il faut avoir un outils de sauvegarde à chaud, ou bien sauvegarder les bases, avec oracle arreté. (en effet, si on passe une base (un table space ?) en read only pour la sauver, le fichier dbf est inaccessible.)

nice awk tip !

- ex : to delete disks not belonging to rootvg :

lspv | grep -v rootvg|awk '{ print "rmdev -dl "$1 }'| ksh

Very useful to treat multiple lines commands in one line .... instead of the usual for i in ....

Useful command (related to cloned part)

- If partition is cloned (via alt_disk_install), it must be reinitialised via :

/usr/sbin/rsct/install/bin/uncfgct -n

/usr/sbin/rsct/install/bin/cftct

HMC commands ...

Migrate a partition :


1) list partitions

lslparmigr -r lpar -m Pserver

2) gives details for the migrating partition

lslparmigr -r msp -m Power1 -t Power2 --filter lpar_names=partition_name

3) migration

migrlpar -o v -m Power1 -t Power2 -p partition_name



Verify if partition can be dynamically modified :

lspartition -dlpar <= Active: must be <1>

Vio server commands

-List virtual adapters (padmin) :

lsdev -virtual

-list adapters (padmin):

lsdev -type adapter

-list virtual network adapters (padmin):

lsmap -all -net

-list all pci adapters (oem_setup_env):

lsslot -c pci

- list all parents for an adapter (oem_setup_env):

lsparent -Cl fcs0

- list all children from an adapter (oem_setup_env):

lsdev -p pci0

- list all free disks (padmin):

lspv -free

- list Vio level

ioslevel

- save config disk in crontab to a mailing list (in order to rebuild the config in case of a crash) (oem_setup_env):

0 0 * * * export HOST=$(hostname);/home/padmin/mapluns.sh uuencode recreation_mapping mail -s "configuration vio server $HOST " root

root is an alias in /etc/aliases pointing to a real user address (toto@aaaa.fr)

- create a SEA adapter between ent1 (physical adapter) and ent2 (virtual adapter) (padmin) :

mkvdev -sea ent1 -vadapter ent2 -default ent2 -defaultid 1 <= creates ent3

and then ...

cfgassist <= config ent3

- create a virtual disk for a partition with hdisk6 (padmin) :

mkvdev -vdev hdisk6 -vadapter vhost0 -dev prex0rootvg

-create a virtual cdrom (padmin) :

mkvdev -vdev cd0 -vadapter vhost3 -dev cd