Hard Partitioning avec OVM 3.3

Lors d’une de mes missions chez un client j’ai été confronté à une problématique spécifique concernant le nombre de licences Oracle lors de la migration d’une base de données Oracle RAC d’un environnement physique vers un environnement virtuel OVM 3.3.
En effet, la licence initiale contractée par le client était de 8 licences Oracle soit 16 cœurs
Alors, comment respecter ce même nombre de licences Oracle alors que les lames ProLiant BL460c Gen9 devant héberger le cluster RAC disposaient chacune de 20 cœurs hyperthreadés soit 40 processeurs vus par l’hyperviseur Oracle OVM 3.3.

La seule solution envisageable est le ‘hard partitionning’ qui permet de limiter de nombre de processeurs pour la machine virtuelle en associant des processeurs virtuels à des processeurs physiques.
Dans notre cas particulier, le nombre de processeurs virtuels pouvant être associé à chaque machine virtuelle est de 16 processeurs.
L’architecture et l’infrastructure déployée était la suivante :
OVM-HardPartitioning
 
Le mode opératoire de la mise en œuvre du hard partitionning suit ces différentes étapes :

  • Contrôle des CPUs pour le serveur ‘hôte’
  • Installation du module complémentaire OVM manager
  • Sécurisation des échanges entre OVM manager et OVM servers
  • Limitation des processeurs

 

Contrôle des processeurs pour le serveur ‘hôte’

Les processeurs des lames ProLiant BL460c Gen9 sont hyperthreadés (2 threads par cœur), le nombre de licences Oracle est limité à 4 licences par lame soit 8 cœurs.
Etant donné que les licences Oracle sont calculées sur les cœurs, nous pouvons bénéficier de l’hyper-threading et doubler la puissance des processeurs en allouant 16 processeurs virtuels à chaque machine virtuelle sans pour autant s’acquitter de licences Oracle supplémentaires.

[root@s1-easy-ovm001 log]# xenpm get-cpu-topology
CPU     core   socket node
CPU0     0       0       0
CPU1     0       0       0
CPU2     1       0       0
CPU3     1       0       0
CPU4     2       0       0
CPU5     2       0       0
CPU6     3       0       0
CPU7     3       0       0
CPU8     4       0       0
CPU9     4       0       0
CPU10    8       0       0
CPU11   8       0       0
CPU12   9       0       0
CPU13   9       0       0
CPU14   10     0       0
CPU15   10     0       0
CPU16   11     0       0
CPU17   11     0       0
CPU18   12     0       0
CPU19   12     0       0
CPU20   0       1       1
CPU21   0       1       1
CPU22   1       1       1
CPU23   1       1       1
CPU24   2       1       1
CPU25   2      1       1
CPU26   3       1       1
CPU27   3       1       1
CPU28   4       1       1
CPU29   4       1       1
CPU30   8       1       1
CPU31   8       1       1
CPU32   9       1       1
CPU33   9       1       1
CPU34   10     1       1
CPU35   10     1       1
CPU36   11     1       1
CPU37   11     1       1
CPU38   12     1       1
CPU39   12     1       1
[root@s1-easy-ovm001 log]# xm vcpu-list
Name                           ID VCPU   CPU State   Time(s) CPU Affinity
0004fb00000600007c351fa24276c63f         1    0    5    -b-    4676.8 any cpu
0004fb00000600007c351fa24276c63f    1    1    6    -b-    4537.0 any cpu
0004fb00000600007c351fa24276c63f         1    2    1    -b-    4676.8 any cpu
0004fb00000600007c351fa24276c63f    1    3    0    -b-    4237.0 any cpu
0004fb00000600007c351fa24276c63f         1    4    7    -b-    4176.8 any cpu
0004fb00000600007c351fa24276c63f    1    5    16  -b-    4537.0 any cpu
0004fb00000600007c351fa24276c63f         1    6    12  -b-    3976.8 any cpu
0004fb00000600007c351fa24276c63f    1    7    20  -b-    3837.0 any cpu
0004fb00000600007c351fa24276c63f         1    8    22   -b-    4670.8 any cpu
0004fb00000600007c351fa24276c63f    1    9    23  -b-    4527.0 any cpu
0004fb00000600007c351fa24276c63f         1    10    30 -b-    4226.8 any cpu
0004fb00000600007c351fa24276c63f    1    11    36 -b-    4837.0 any cpu
0004fb00000600007c351fa24276c63f         1    12    37 -b-    4176.8 any cpu
0004fb00000600007c351fa24276c63f    1    13    18 -b-    4235.0 any cpu
0004fb00000600007c351fa24276c63f         1    14    19 -b-    4670.8 any cpu
0004fb00000600007c351fa24276c63f    1    15    11 -b-    4530.0 any cpu
Domain-0                         0     0     0   -b-   1216.9 0
Domain-0                         0     1     1   -b-     631.1 1
Domain-0                         0     2     2   -b-     884.9 2
Domain-0                         0     3     3   -b-     618.2 3
Domain-0                         0     4     4   -b-     921.7 4
Domain-0                         0     5     5   -b-   1042.5 5
Domain-0                         0     6     6   -b-     888.0 6
Domain-0                         0     7     7   -b-     817.8 7
Domain-0                         0     8     8   -b-     719.3 8
Domain-0                         0     9     9   -b-     927.4 9
Domain-0                         0   10   10   -b-     811.8 10
Domain-0                         0   11   11   r--   1036.8 11
Domain-0                         0   12   12   -b-     949.2 12
Domain-0                         0   13   13   -b-     823.0 13
Domain-0                         0   14   14   -b-   1088.7 14
Domain-0                          0   15   15   -b-     730.2 15
Domain-0                         0   16   16   -b-     567.6 16
Domain-0                         0   17   17   -b-     867.1 17
Domain-0                         0   18   18   -b-     461.1 18
Domain-0                          0   19   19   -b-     963.8 1

 

Installation du module complémentaire OVM manager

Avec la version OVM 3.3.3 nous pouvons disposer d’un outil spécifique pour effectuer le hard partitionning des machines virtuelles :

[root@s-easy-ovmm001 ovm-manager-3]# su - oracle
[oracle@s-easy-ovmm001~]$ cd /u01/app/oracle/ovm-manager-3
[oracle@s-easy-ovmm001 ovm-manager-3]$ unzip /tmp/p13602094_30_Linux-x86-64.zip
inflating: readme.txt            
   creating: ovmutils/
extracting: ovmutils/ovm_utils_1.0.2.zip
extracting: ovmutils/ovm_utils_2.0.1.zip
inflating: ovmutils/readme       
inflating: ovmutils/readme-1.0.2 
inflating: ovmutils/readme-2.0.1 
[oracle@s-easy-ovmm001 ovm-manager-3]$
[oracle@s-easy-ovmm001 ovm-manager-3]$ cd ovmutils
[oracle@s-easy-ovmm001 ovmutils]$ unzip ovm_utils_2.0.1.zip
Archive: ovm_utils_2.0.1.zip
   creating: ovm_utils/
   creating: ovm_utils/man/
   creating: ovm_utils/man/man8/
inflating: ovm_utils/man/man8/ovm_vmcontrol.8
inflating: ovm_utils/man/man8/ovm_vmhostd.8
inflating: ovm_utils/man/man8/ovm_vmdisks.8
inflating: ovm_utils/man/man8/ovm_reporestore.8
inflating: ovm_utils/man/man8/ovm_vmmessage.8
inflating: ovm_utils/ovm_vmdisks  
   creating: ovm_utils/class/
inflating: ovm_utils/class/OvmVmMessage.class
inflating: ovm_utils/class/OvmRepoRestore.class
inflating: ovm_utils/class/OvmVmHostd.class
inflating: ovm_utils/class/OvmVmMessage$1.class
inflating: ovm_utils/class/OvmVmHostd$1.class
inflating: ovm_utils/class/OvmVmControl.class
inflating: ovm_utils/class/OvmVmHostd$InsecureTrustManager.class
inflating: ovm_utils/class/OvmVmDisks.class
inflating: ovm_utils/class/OvmVmMessage$InsecureTrustManager.class
inflating: ovm_utils/ovm_vmcontrol
inflating: ovm_utils/ovm_vmhostd 
inflating: ovm_utils/vm-dump-metrics
inflating: ovm_utils/ovm_reporestore
   creating: ovm_utils/lib/
inflating: ovm_utils/lib/jython.jar
inflating: ovm_utils/lib/log4j.jar
inflating: ovm_utils/lib/OvmClient.jar
inflating: ovm_utils/lib/OvmWsClient.jar
inflating: ovm_utils/lib/ovm_shell.jar
inflating: ovm_utils/lib/commons-logging-1.1.3.jar
inflating: ovm_utils/lib/jline.jar
inflating: ovm_utils/lib/commons-logging.jar
inflating: ovm_utils/ovm_vmmessage

 

Sécurisation des échanges entre OVM manager et OVM servers

Les échanges entre le serveur OVM manager et les serveurs OVM doivent être sécurisés pour cela Oracle utilise le service SSL.

[root@s-easy-ovmm001 bin]# cd /u01/app/oracle/ovm-manager-3/bin
[root@s-easy-ovmm001 bin]# ./secureOvmmTcp.sh
Enabling OVMM TCP over SSL service
Please enter the Oracle VM manager user name: admin
Please enter the Oracle VM manager user password:
The job of enabling OVMM TCPS service is committed, please restart OVMM to take effect.
[root@s-easy-ovmm001 bin]# service ovmm restart

 

Limitation des processeurs

  • Méthode avec ovm_vmcontrol 3.3

Se connecter sur le serveur OVM Manager et se positioner dans le repertoire /u01/app/oracle/ovm-manager-3/ovmutils/ovm_utils

./ovm_vmcontrol -u admin -p xxxxxxx -h localhost -v s1-easy-rac01 -c vcpuget
./ovm_vmcontrol -u admin -p xxxxxxx -h localhost -v s1-easy-rac01 -c vcpuset -s 0-7,20-27

 

  • Méthode manuelle

Modifier directement le fichier de configuration vm.cfg sur le serveur hôte et ajouter la ligne cpus=0-7,20-27

/OVS/Repositories/0004fb0000030000afd883f7dc2/VirtualMachines/0004fb00000600007c351fa24276c63f /vm.cfg
                                 {———–repository UUID———–}                              {————Virtual Machine UUID———–}
+———————————————–+
UUIDs peut être obtenu à partir VM Manager
 
vi vm.cfg
cpus = ‘0-7,20-27’
 

Restrictions

Le fait de mettre en œuvre le hard partitioning interdit toute possibilité d’utiliser LIVE MIGRATION et sa faculté de basculer automatiquement une machine virtuelle sur un des serveurs ‘hôte’ disponibles.