Rapport d'installation de l'hyperviseur libvirt » History » Version 1
Bruno STEVANT, 10/02/2018 10:18 PM
1 | 1 | Bruno STEVANT | h1. Rapport d'installation de l'hyperviseur libvirt |
---|---|---|---|
2 | 1 | Bruno STEVANT | |
3 | 1 | Bruno STEVANT | * Date |
4 | 1 | Bruno STEVANT | * 2012/09/06 |
5 | 1 | Bruno STEVANT | * Utilisation du paquet debian-installer-6.0-netboot-amd64 version 20110106.squeeze4.b1 pour démarrer l'install en TFTP |
6 | 1 | Bruno STEVANT | |
7 | 1 | Bruno STEVANT | h2. Prérequis |
8 | 1 | Bruno STEVANT | |
9 | 1 | Bruno STEVANT | * Trouver un nom à la machine |
10 | 1 | Bruno STEVANT | ** Utile pour l'identification lors de l'inventaire, etc. |
11 | 1 | Bruno STEVANT | * Trouver un adressage |
12 | 1 | Bruno STEVANT | ** Afin de lui trouver une « place » dans le réseau |
13 | 1 | Bruno STEVANT | |
14 | 1 | Bruno STEVANT | h2. Réseau |
15 | 1 | Bruno STEVANT | |
16 | 1 | Bruno STEVANT | Il faut d'abord préparer la configuration réseau qu'aura chaque hyperviseur : |
17 | 1 | Bruno STEVANT | |
18 | 1 | Bruno STEVANT | * Réserver une/des IPv4 + IPv6 |
19 | 1 | Bruno STEVANT | * Configurer le switch pour que la machine soit sur le(s) VLAN(s) adéquat |
20 | 1 | Bruno STEVANT | * Configuration DNS et gateway par défaut |
21 | 1 | Bruno STEVANT | |
22 | 1 | Bruno STEVANT | h2. Spécifique à chaque machine |
23 | 1 | Bruno STEVANT | |
24 | 1 | Bruno STEVANT | |
25 | 1 | Bruno STEVANT | Dell R610 |
26 | 1 | Bruno STEVANT | |
27 | 1 | Bruno STEVANT | A besoin d'un firmware spécifique pour la carte réseau (Broadcom NetXtreme II) contenu dans le paquet firmware-bnx2, disponible dans non-free, à cette adresse par exemple : http://ftp.fr.debian.org/debian/pool/non-free/f/firmware-nonfree/firmware-bnx2_0.28+squeeze1_all.deb |
28 | 1 | Bruno STEVANT | |
29 | 1 | Bruno STEVANT | Le mettre sur une clé USB, ou alors utiliser la méthode décrite ici pour l'ajouter à l'initrd : http://wiki.debian.org/DebianInstaller/NetbootFirmware |
30 | 1 | Bruno STEVANT | |
31 | 1 | Bruno STEVANT | '''ATTENTION''' bien retirer la clé ''juste'' après que les interfaces réseau aient été détectées, afin qu'elle ne perturbe pas l'ordre de détection des disques. Ça ne pose pas de problème pour Linux qui utilise maintenant des UUID, mais c'est important pour GRUB, qui va s'installer sur le premier disque trouvé. Si vous ne l'avez pas fait, rebootez en mode « rescue », montez la racine puis le /boot, adaptez le /boot/grub/grub.cfg si besoin, et lancez : |
32 | 1 | Bruno STEVANT | |
33 | 1 | Bruno STEVANT | <pre> |
34 | 1 | Bruno STEVANT | # grub-install /dev/sdX |
35 | 1 | Bruno STEVANT | </pre> |
36 | 1 | Bruno STEVANT | |
37 | 1 | Bruno STEVANT | h2. Configuration de l'installeur |
38 | 1 | Bruno STEVANT | |
39 | 1 | Bruno STEVANT | Commencer l'installation par le réseau. |
40 | 1 | Bruno STEVANT | |
41 | 1 | Bruno STEVANT | Rentrer le nom, le domaine (?). |
42 | 1 | Bruno STEVANT | |
43 | 1 | Bruno STEVANT | Ne pas mettre de mot de passe root, ainsi sudo sera utilisé et se logger en root sera interdit. |
44 | 1 | Bruno STEVANT | |
45 | 1 | Bruno STEVANT | Partitionnement manuel : |
46 | 1 | Bruno STEVANT | |
47 | 1 | Bruno STEVANT | * Le RAID est géré par le contrôleur hard |
48 | 1 | Bruno STEVANT | * Créer une partition primaire de 1Go en ext2 pour /boot |
49 | 1 | Bruno STEVANT | * Créer un volume physique (partition primaire) pour LVM de 20Go |
50 | 1 | Bruno STEVANT | * Éventuellement créer un volume physique pour LVM sur le reste |
51 | 1 | Bruno STEVANT | * Créer un groupe de volumes sur le premier PV, qui sera le VG du système (donc avec le nom « system » c'est pas mal) |
52 | 1 | Bruno STEVANT | * Créer un volume logique dessus pour / |
53 | 1 | Bruno STEVANT | * Éventuellement séparer /var (genre 10Go/10Go) |
54 | 1 | Bruno STEVANT | * Ne ''pas'' mettre de swap (un avertissement ultérieur demandera explicitement de confirmer que vous ne voulez vraiment pas de swap), ou alors en mettre met préciser plus tard au kernel de ne l'utiliser qu'en dernier recours |
55 | 1 | Bruno STEVANT | * Mettre / (et éventuellement /var) sur les LV correspondant, en ext3 |
56 | 1 | Bruno STEVANT | * Si on utilise un /var séparé, prévoir une taille conséquente pour le stockage de la RAM des VMs qui seront mises en pause sur le disque, par exemple 1,5× le volume de RAM minimum |
57 | 1 | Bruno STEVANT | |
58 | 1 | Bruno STEVANT | Lors de la sélection des packages, choisir « Serveur SSH » et « Utilitaires standard du système » |
59 | 1 | Bruno STEVANT | |
60 | 1 | Bruno STEVANT | Faire attention à l'installation de GRUB si c'est bien sur le bon périphérique qu'il est installé ; une clé USB peut faire changer l'ordre des périphériques par rapport à un boot « normal ». |
61 | 1 | Bruno STEVANT | |
62 | 1 | Bruno STEVANT | h2. Après l'installation |
63 | 1 | Bruno STEVANT | |
64 | 1 | Bruno STEVANT | Mettre un getty sur le port série, toujours utile pour dépanner. Décommenter/ajouter la ligne suivante dans /etc/inittab : |
65 | 1 | Bruno STEVANT | |
66 | 1 | Bruno STEVANT | <pre> |
67 | 1 | Bruno STEVANT | T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100</pre> |
68 | 1 | Bruno STEVANT | Pour recharger la configuration : |
69 | 1 | Bruno STEVANT | |
70 | 1 | Bruno STEVANT | <pre># telinit q</pre> |
71 | 1 | Bruno STEVANT | == Administration de base == |
72 | 1 | Bruno STEVANT | |
73 | 1 | Bruno STEVANT | Afin de garder l'hyperviseur à l'heure, il faut installer un démon NTP : |
74 | 1 | Bruno STEVANT | |
75 | 1 | Bruno STEVANT | <pre># apt-get install ntp</pre> |
76 | 1 | Bruno STEVANT | Notez qu'il n'est pas nécessaire, voire néfaste, d'installer un tel démon sur les machines virtuelles : elles n'ont pas de référence assez précise au niveau CPU (qui est virtualisé) pour calculer la dérive de l'horloge « temps réel ». On doit plutôt utiliser un OS qui a un pilote pour le périphérique d'horloge « exacte » qu'exporte l'hyperviseur à l'invité. |
77 | 1 | Bruno STEVANT | |
78 | 1 | Bruno STEVANT | Pour des raisons de sécurité, il est mieux de désactiver l'authentification SSH par mot de passe. Pour cela, ajouter dans /etc/ssh/sshd_config la ligne : |
79 | 1 | Bruno STEVANT | |
80 | 1 | Bruno STEVANT | <pre>PasswordAuthentication no</pre> |
81 | 1 | Bruno STEVANT | (commenter PasswordAuthentication yes ne suffit pas !) |
82 | 1 | Bruno STEVANT | |
83 | 1 | Bruno STEVANT | Si vous avez mis du swap lors du partitionnement, vous devez indiquer au kernel de ne l'utiliser qu'au minimum. Pour cela, nous allons ajouter à /etc/sysctl.d/local.conf (par exemple) : |
84 | 1 | Bruno STEVANT | |
85 | 1 | Bruno STEVANT | <pre># bcama: set swap usage to the minimum; it's just here in case of emergency |
86 | 1 | Bruno STEVANT | vm.swappiness=0</pre> |
87 | 1 | Bruno STEVANT | Profitez-en pour activer les sysrq, qui peuvent aider en cas d'urgence si la machine « déconne » ; attention, ces commandes autorisent des choses dangereuses à qui contrôle le clavier local de la machine, comme un reboot immédiat par exemple (Alt+PrintScreen+b ; voir Documentation/sysrq.txt pour les autres) : |
88 | 1 | Bruno STEVANT | |
89 | 1 | Bruno STEVANT | <pre># bcama: allow sysrq |
90 | 1 | Bruno STEVANT | kernel.sysrq=1</pre> |
91 | 1 | Bruno STEVANT | Et l'activer : |
92 | 1 | Bruno STEVANT | |
93 | 1 | Bruno STEVANT | <pre># service procps restart</pre> |
94 | 1 | Bruno STEVANT | |
95 | 1 | Bruno STEVANT | h2. Installation de libvirt |
96 | 1 | Bruno STEVANT | |
97 | 1 | Bruno STEVANT | On utilise le libvirt de squeeze-backports, la version d'origine de squeeze étant un peu vieille. Pour cela, on ajoute d'abord le repository de backports dans le fichier /etc/apt/sources.list.d/squeeze-backports.list qui contient : |
98 | 1 | Bruno STEVANT | |
99 | 1 | Bruno STEVANT | <pre>deb http://backports.debian.org/debian-backports squeeze-backports main</pre> |
100 | 1 | Bruno STEVANT | Puis on installe libvirt : |
101 | 1 | Bruno STEVANT | |
102 | 1 | Bruno STEVANT | <pre># apt-get install -t squeeze-backports libvirt0 libvirt-bin</pre> |
103 | 1 | Bruno STEVANT | Il faut également ajouter les utilisateurs qui voudront avoir accès y l'hyperviseur au groupe libvirt : |
104 | 1 | Bruno STEVANT | |
105 | 1 | Bruno STEVANT | <pre># adduser un_utilisateur libvirt</pre> |
106 | 1 | Bruno STEVANT | On peut également installer virtinst, qui contient quelques utilitaires pratique pour l'installation de VM : |
107 | 1 | Bruno STEVANT | |
108 | 1 | Bruno STEVANT | <pre># apt-get install --no-install-recommends virtinst |
109 | 1 | Bruno STEVANT | # apt-git install pm-utils</pre> |
110 | 1 | Bruno STEVANT | (nous n'installons pas les paquets recommandées car ils ont trop de dépendances inutiles ; et pm-utils est une dépendance non-indiquée dans les vieux paquets libvirt) |
111 | 1 | Bruno STEVANT | |
112 | 1 | Bruno STEVANT | h2. Configuration de libvirt |
113 | 1 | Bruno STEVANT | |
114 | 1 | Bruno STEVANT | On va configurer deux réseaux : un NATé et un bridgé, en fonction du type de connectivité qu'on souhaite pour les VMs. |
115 | 1 | Bruno STEVANT | |
116 | 1 | Bruno STEVANT | Pour définir le réseau NATé, on utilise le XML suivant avec la commande virsh |
117 | 1 | Bruno STEVANT | net-define : |
118 | 1 | Bruno STEVANT | |
119 | 1 | Bruno STEVANT | <pre><network> |
120 | 1 | Bruno STEVANT | <name>routed-nat</name> |
121 | 1 | Bruno STEVANT | <forward mode='nat'/> |
122 | 1 | Bruno STEVANT | <bridge name='virbr0' stp='on' delay='0' /> |
123 | 1 | Bruno STEVANT | <ip address='192.168.122.1' netmask='255.255.255.0'> |
124 | 1 | Bruno STEVANT | <dhcp> |
125 | 1 | Bruno STEVANT | <range start='192.168.122.2' end='192.168.122.254' /> |
126 | 1 | Bruno STEVANT | </dhcp> |
127 | 1 | Bruno STEVANT | </ip> |
128 | 1 | Bruno STEVANT | </network></pre> |
129 | 1 | Bruno STEVANT | Et pour le bridgé (ça serait mieux d'utiliser macvtap mais ça n'est pas disponible sur squeeze) : |
130 | 1 | Bruno STEVANT | |
131 | 1 | Bruno STEVANT | <pre><network> |
132 | 1 | Bruno STEVANT | <name>bridged</name> |
133 | 1 | Bruno STEVANT | <forward mode='bridge'/> |
134 | 1 | Bruno STEVANT | <bridge name='br0'/> |
135 | 1 | Bruno STEVANT | </network></pre> |
136 | 1 | Bruno STEVANT | Qui utilisera br0 configuré comme suit dans /etc/network/interfaces (après avoir commenté/effacé la configuration pour eth0) : |
137 | 1 | Bruno STEVANT | |
138 | 1 | Bruno STEVANT | <pre>allow-hotplug br0 |
139 | 1 | Bruno STEVANT | iface br0 inet dhcp |
140 | 1 | Bruno STEVANT | bridge_ports eth0</pre> |
141 | 1 | Bruno STEVANT | Nous allons également les démarrer automatiquement au démarrage de la machine : |
142 | 1 | Bruno STEVANT | |
143 | 1 | Bruno STEVANT | <pre>$ virsh net-autostart routed-nat |
144 | 1 | Bruno STEVANT | $ virsh net-autostart bridged</pre> |
145 | 1 | Bruno STEVANT | Pour le stockage, nous créons un volume group LVM dédié aux VMs : |
146 | 1 | Bruno STEVANT | |
147 | 1 | Bruno STEVANT | <pre># vgcreate vm-group /dev/sda3</pre> |
148 | 1 | Bruno STEVANT | Et le pool libvirt associé, avec virsh pool-define : |
149 | 1 | Bruno STEVANT | |
150 | 1 | Bruno STEVANT | <pre><pool type='logical'> |
151 | 1 | Bruno STEVANT | <name>vm</name> |
152 | 1 | Bruno STEVANT | <source> |
153 | 1 | Bruno STEVANT | <name>vm-group</name> |
154 | 1 | Bruno STEVANT | <device path='/dev/sda3' /> |
155 | 1 | Bruno STEVANT | </source> |
156 | 1 | Bruno STEVANT | <target> |
157 | 1 | Bruno STEVANT | <path>/dev/vm-group</path> |
158 | 1 | Bruno STEVANT | </target> |
159 | 1 | Bruno STEVANT | </pool></pre> |
160 | 1 | Bruno STEVANT | On peut également faire un pool réservé aux images qui peuvent être « creuses », et donc mieux stockées dessus : |
161 | 1 | Bruno STEVANT | |
162 | 1 | Bruno STEVANT | <pre><pool type='dir'> |
163 | 1 | Bruno STEVANT | <name>images</name> |
164 | 1 | Bruno STEVANT | <target> |
165 | 1 | Bruno STEVANT | <path>/var/lib/libvirt/images</path> |
166 | 1 | Bruno STEVANT | <permissions> |
167 | 1 | Bruno STEVANT | <mode>0700</mode> |
168 | 1 | Bruno STEVANT | </permissions> |
169 | 1 | Bruno STEVANT | </target> |
170 | 1 | Bruno STEVANT | </pool></pre> |
171 | 1 | Bruno STEVANT | Ces deux pools seront automatiquement démarrés : |
172 | 1 | Bruno STEVANT | |
173 | 1 | Bruno STEVANT | <pre>$ virsh pool-autostart vm |
174 | 1 | Bruno STEVANT | $ virsh pool-autostart images</pre> |
175 | 1 | Bruno STEVANT | Nous pouvons aussi indiquer que nous souhaitons suspendre les machines lors de l'arrêt de l'hyperviseur, et les redémarrer automatiquement à son démarrage, en indiquant dans /etc/default/libvirt-guests les options suivantes : |
176 | 1 | Bruno STEVANT | |
177 | 1 | Bruno STEVANT | <pre>URIS=qemu:///system |
178 | 1 | Bruno STEVANT | ON_BOOT=start # toutes les machines allumées à l'extinction sont redémarrées |
179 | 1 | Bruno STEVANT | ON_SHUTDOWN=suspend</pre> |
180 | 1 | Bruno STEVANT | |
181 | 1 | Bruno STEVANT | h2. Configuration du SAN iSCSI |
182 | 1 | Bruno STEVANT | |
183 | 1 | Bruno STEVANT | On configure d'abord le VLAN utilisé par le SAN, en ajoutant dans /etc/network/interfaces le paragraphe suivant : |
184 | 1 | Bruno STEVANT | |
185 | 1 | Bruno STEVANT | <pre>auto eth0.501 |
186 | 1 | Bruno STEVANT | iface eth0.501 inet static |
187 | 1 | Bruno STEVANT | address 10.35.21.66 |
188 | 1 | Bruno STEVANT | netmask 255.255.255.0</pre> |
189 | 1 | Bruno STEVANT | On installe le paquet adéquat : |
190 | 1 | Bruno STEVANT | |
191 | 1 | Bruno STEVANT | <pre># apt-get install open-iscsi</pre> |
192 | 1 | Bruno STEVANT | Le nom de l'initiateur est créé lors du premier démarrage du démon ; il sert parfois pour l'authentification auprès d'une cible, et se trouve dans /etc/iscsi/initiatorname.iscsi. On démarre le démon : |
193 | 1 | Bruno STEVANT | |
194 | 1 | Bruno STEVANT | <pre># invoke-rc.d open-iscsi start</pre> |
195 | 1 | Bruno STEVANT | On découvre et active le login automatique sur la cible : |
196 | 1 | Bruno STEVANT | |
197 | 1 | Bruno STEVANT | <pre># iscsi_discovery 10.35.21.1</pre> |
198 | 1 | Bruno STEVANT | Si certains “portals” ne sont pas disponibles, on peut arrêter la recherche avec Ctrl+C. Pour effectuer le login sur tous à la main, plutôt : |
199 | 1 | Bruno STEVANT | |
200 | 1 | Bruno STEVANT | <pre># iscsiadm -m node -p 10.35.21.1 --loginall=all</pre> |
201 | 1 | Bruno STEVANT | Et pour se délogger à la main : |
202 | 1 | Bruno STEVANT | |
203 | 1 | Bruno STEVANT | <pre># iscsiadm -m node -p 10.35.21.1 --logoutall=all</pre> |
204 | 1 | Bruno STEVANT | Pour que le “montage” soit automatique au démarrage (i.e. que le démon démarre automatiquement), il faut l'indiquer ainsi : |
205 | 1 | Bruno STEVANT | |
206 | 1 | Bruno STEVANT | <pre># iscsiadm -m node -p 10.35.21.1 -o update -n node.startup -v automatic</pre> |
207 | 1 | Bruno STEVANT | Nous utilisons également le multipath pour atteindre cette cible ; pour le gérer, nous installons le démon adéquat : |
208 | 1 | Bruno STEVANT | |
209 | 1 | Bruno STEVANT | <pre># apt-get install multipath-tools</pre> |
210 | 1 | Bruno STEVANT | Pour notre utilisation du multipath, un module noyau non-chargé automatiquement est nécessaire. Nous l'ajoutons au fichier /etc/modprobe.d/iscsi-rdac.conf afin qu'il soit chargé au démarrage : |
211 | 1 | Bruno STEVANT | |
212 | 1 | Bruno STEVANT | <pre># bcama: needed module for multipath iSCSI failed-path detection |
213 | 1 | Bruno STEVANT | scsi_dh_rdac</pre> |
214 | 1 | Bruno STEVANT | Et utilisons un fichier de configuration basique, dans /etc/multipath.conf : |
215 | 1 | Bruno STEVANT | |
216 | 1 | Bruno STEVANT | <pre>defaults { |
217 | 1 | Bruno STEVANT | user_friendly_names yes |
218 | 1 | Bruno STEVANT | } |
219 | 1 | Bruno STEVANT | |
220 | 1 | Bruno STEVANT | blacklist { |
221 | 1 | Bruno STEVANT | "*" |
222 | 1 | Bruno STEVANT | # do not use the local disk |
223 | 1 | Bruno STEVANT | devnode "sda" |
224 | 1 | Bruno STEVANT | # get wwid with /lib/udev/scsi_id --whitelisted /dev/sda |
225 | 1 | Bruno STEVANT | wwid … |
226 | 1 | Bruno STEVANT | } |
227 | 1 | Bruno STEVANT | |
228 | 1 | Bruno STEVANT | multipaths { |
229 | 1 | Bruno STEVANT | multipath { |
230 | 1 | Bruno STEVANT | # wwid of the iSCSI volume |
231 | 1 | Bruno STEVANT | wwid … |
232 | 1 | Bruno STEVANT | alias my-fancy-volume |
233 | 1 | Bruno STEVANT | } |
234 | 1 | Bruno STEVANT | }</pre> |
235 | 1 | Bruno STEVANT | Nous rechargeons la configuration : |
236 | 1 | Bruno STEVANT | |
237 | 1 | Bruno STEVANT | <pre># invoke-rc.d multipath-tools reload</pre> |
238 | 1 | Bruno STEVANT | Et vérifions que ça marche : |
239 | 1 | Bruno STEVANT | |
240 | 1 | Bruno STEVANT | <pre># multipath -l</pre> |
241 | 1 | Bruno STEVANT | Pour le désactiver, si besoin, il faut utiliser le flag `-f`: |
242 | 1 | Bruno STEVANT | |
243 | 1 | Bruno STEVANT | <pre># multipath -f /dev/mapper/my-fancy-volume</pre> |
244 | 1 | Bruno STEVANT | Nous créons ensuite une partition sur ce volume ; pour les volumes de plus de 2To, il faut utiliser un partitionnement de type GPT, géré par l'utilitaire gdisk : |
245 | 1 | Bruno STEVANT | |
246 | 1 | Bruno STEVANT | <pre># apt-get install gdisk |
247 | 1 | Bruno STEVANT | # gdisk /dev/mapper/my-fancy-volume |
248 | 1 | Bruno STEVANT | ## do the partitionning</pre> |
249 | 1 | Bruno STEVANT | On utilisera ensuite cette partition comme volume physique LVM : |
250 | 1 | Bruno STEVANT | |
251 | 1 | Bruno STEVANT | <pre># pvcreate /dev/mapper/my-fancy-volume-part1</pre> |
252 | 1 | Bruno STEVANT | Qui sera ajouté à un groupe de volume : |
253 | 1 | Bruno STEVANT | |
254 | 1 | Bruno STEVANT | <pre># vgcreate my-fancy-group /dev/mapper/my-fancy-volume-part1</pre> |
255 | 1 | Bruno STEVANT | Pour éviter que LVM ne détecte à la fois les volumes « directs » et le volume multipath, on lui précise de ne pas utiliser certains périphériques bloc, dans /etc/lvm/lvm.conf, par exemple : |
256 | 1 | Bruno STEVANT | |
257 | 1 | Bruno STEVANT | <pre># bcama: we discard every /dev/sd* except /dev/sda, as this is how iSCSI |
258 | 1 | Bruno STEVANT | # devices appears, and we handle them with multipath |
259 | 1 | Bruno STEVANT | filter = [ "a/.*/", "r|/dev/sd[^a]|" ]</pre> |
260 | 1 | Bruno STEVANT | Pour l'ajouter à libvirt, nous utilisons le XML suivant : |
261 | 1 | Bruno STEVANT | |
262 | 1 | Bruno STEVANT | <pre><pool type='logical'> |
263 | 1 | Bruno STEVANT | <name>iscsi-disi-rsm</name> |
264 | 1 | Bruno STEVANT | <source> |
265 | 1 | Bruno STEVANT | <device path='/dev/mapper/disi-rsm-vol-part1' /> |
266 | 1 | Bruno STEVANT | </source> |
267 | 1 | Bruno STEVANT | <target> |
268 | 1 | Bruno STEVANT | <path>/dev/iscsi-disi-rsm</path> |
269 | 1 | Bruno STEVANT | </target> |
270 | 1 | Bruno STEVANT | </pool></pre> |
271 | 1 | Bruno STEVANT | Et nous l'indiquons comme actif au démarrage : |
272 | 1 | Bruno STEVANT | |
273 | 1 | Bruno STEVANT | <pre>$ virsh pool-autostart iscsi-disi-rsrm |
274 | 1 | Bruno STEVANT | $ # pour le démarrer maintenant : |
275 | 1 | Bruno STEVANT | $ virsh pool-start iscsi-disi-rsm</pre> |
276 | 1 | Bruno STEVANT | |
277 | 1 | Bruno STEVANT | h2. Configuration complémentaire |
278 | 1 | Bruno STEVANT | |
279 | 1 | Bruno STEVANT | h3. Accounting de la mémoire / du CPU |
280 | 1 | Bruno STEVANT | |
281 | 1 | Bruno STEVANT | Afin d'activer diverses options d'accounting pour les VM, il est utile d'utiliser les cgroup. Pour cela, il faut monter ce FS spécial dans /cgroup, en créant d'abord ce répertoire : |
282 | 1 | Bruno STEVANT | |
283 | 1 | Bruno STEVANT | <pre># mkdir /cgroup</pre> |
284 | 1 | Bruno STEVANT | Puis en ajoutant une entrée dans /etc/fstab : |
285 | 1 | Bruno STEVANT | |
286 | 1 | Bruno STEVANT | <pre>cgroup /cgroup cgroup cpuacct,memory,devices,cpu,freezer,blkio 0 0</pre> |
287 | 1 | Bruno STEVANT | Attention, le cgroup memory n'est pas activé par défaut dans le kernel 3.2 que nous utilisons, car il provoque une légère dégradation de performances; si on veut l'utiliser, il faut passer le paramètre cgroup_enable=memory au kernel lors du boot. Pour cela, on modifie /etc/default/grub pour y modifier la ligne suivante : |
288 | 1 | Bruno STEVANT | |
289 | 1 | Bruno STEVANT | <pre>GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory quiet"</pre> |
290 | 1 | Bruno STEVANT | Et on exécute update-grub afin de prendre en compte ce paramètre. Un redémarrage est nécessaire afin de prendre en compte ces modifications. |
291 | 1 | Bruno STEVANT | |
292 | 1 | Bruno STEVANT | h3. Optimisation de l'utilisation mémoire |
293 | 1 | Bruno STEVANT | |
294 | 1 | Bruno STEVANT | Une option existe depuis le kernel 2.6.38 qui permet de regrouper les pages mémoire identiques des VMs : le Kernel Samepage Merging. Pour l'activer, il faut écrire “1” dans /sys/kernel/mm/ksm/on, par exemple dans /etc/rc.local : |
295 | 1 | Bruno STEVANT | |
296 | 1 | Bruno STEVANT | <pre>echo 1 > /sys/kernel/mm/ksm/run</pre> |
297 | 1 | Bruno STEVANT | On peut aussi, si l'application le supporte (ce qui est le cas de KVM) utiliser les “huge pages”, qui permettent de réduire la pression sur le TLB. Pour cela, il faut d'abord monter un système de fichiers spécial : |
298 | 1 | Bruno STEVANT | |
299 | 1 | Bruno STEVANT | <pre># mkdir /dev/hugepages |
300 | 1 | Bruno STEVANT | # mount -t hugetlbfs hugetlbfs /dev/hugepages </pre> |
301 | 1 | Bruno STEVANT | Puis indiquer à l'OS combien de ces pages il peut allour ; attention, la mémoire réservée pour les hugepages n'est ''pas'' allouable par l'OS pour des pages classiques, et ne sera donc pas disponible même si elle n'est pas allouée : |
302 | 1 | Bruno STEVANT | |
303 | 1 | Bruno STEVANT | <pre># sysctl vm.nr_hugepages=2048</pre> |
304 | 1 | Bruno STEVANT | La taille des pages est de 2MiB sur x86_64. Il faut ensuite indiquer dans les guests concernés qu'on souhaite les utiliser : |
305 | 1 | Bruno STEVANT | |
306 | 1 | Bruno STEVANT | <pre><domain> |
307 | 1 | Bruno STEVANT | … |
308 | 1 | Bruno STEVANT | <memoryBacking> |
309 | 1 | Bruno STEVANT | <hugepages/> |
310 | 1 | Bruno STEVANT | </memoryBacking></pre> |
311 | 1 | Bruno STEVANT | Attention : cette fonctionnalité désactive la possibilité de swapper la VM, et également le “memory ballooning”. |
312 | 1 | Bruno STEVANT | |
313 | 1 | Bruno STEVANT | h3. Optimisation des interruptions |
314 | 1 | Bruno STEVANT | |
315 | 1 | Bruno STEVANT | Par défaut, beaucoup d'interruptions sont gérées par le premier cœur du CPU. Pour améliorer les performances sur une machine multi-cœur, on peut les répartir à l'aide de irqbalance. Il faut juste l'installer, il ne demande pas de configuration spécifique : |
316 | 1 | Bruno STEVANT | |
317 | 1 | Bruno STEVANT | <pre># apt-get install irqbalance</pre> |
318 | 1 | Bruno STEVANT | |
319 | 1 | Bruno STEVANT | h3. Installation des utilitaires de gestion RAID |
320 | 1 | Bruno STEVANT | |
321 | 1 | Bruno STEVANT | La carte RAID PERC6/i peut être monitorée par un utilitaire spécifique, libre, megactl. Il existe un dépôt Debian d'outils des outils qui fonctionnent avec ces cartes : http://hwraid.le-vert.net/wiki/DebianPackages |
322 | 1 | Bruno STEVANT | |
323 | 1 | Bruno STEVANT | Pour l'installer, il faut ajouter un dépôt, dans /etc/apt/sources.list.d/hwraid-le-vert.list par exemple, contenant : |
324 | 1 | Bruno STEVANT | |
325 | 1 | Bruno STEVANT | <pre>deb http://hwraid.le-vert.net/debian wheezy main</pre> |
326 | 1 | Bruno STEVANT | Il faut également ajouter la clé du mainteneur dans notre base de clés de confiance : |
327 | 1 | Bruno STEVANT | |
328 | 1 | Bruno STEVANT | <pre>$ wget -O - http://hwraid.le-vert.net/debian/hwraid.le-vert.net.gpg.key | sudo apt-key add -</pre> |
329 | 1 | Bruno STEVANT | Puis on peut installer l'outil megasasctl : |
330 | 1 | Bruno STEVANT | |
331 | 1 | Bruno STEVANT | <pre># apt-get install megactl</pre> |
332 | 1 | Bruno STEVANT | Qui se lance simplement avec : |
333 | 1 | Bruno STEVANT | |
334 | 1 | Bruno STEVANT | <pre># megasasctl</pre> |
335 | 1 | Bruno STEVANT | Si on veut modifier la configuration de la carte, il faut utiliser l'outil propriétaire megacli : |
336 | 1 | Bruno STEVANT | |
337 | 1 | Bruno STEVANT | <pre># apt-get install megacli</pre> |
338 | 1 | Bruno STEVANT | L'outil a une syntaxe particulière, on peut trouver s'aider de cette cheatsheet : <http://tools.rapidsoft.de/perc/perc-cheat-sheet.pdf>. |
339 | 1 | Bruno STEVANT | |
340 | 1 | Bruno STEVANT | h3. Optimisation des Entrées/Sorties |
341 | 1 | Bruno STEVANT | |
342 | 1 | Bruno STEVANT | Par défaut, les Linux modernes utilisent cfq comme scheduler d'I/O. Selon les recommendations d'IBM <http://www-01.ibm.com/support/knowledgecenter/api/content/linuxonibm/liaat/liaatbestpractices_pdf.pdf>, il vaut mieux utiliser deadline. On peut l'activer par exemple dans /etc/rc.local : |
343 | 1 | Bruno STEVANT | |
344 | 1 | Bruno STEVANT | <pre>echo deadline > /sys/block/sdb/queue/scheduler |
345 | 1 | Bruno STEVANT | echo deadline > /sys/block/sdc/queue/scheduler |
346 | 1 | Bruno STEVANT | echo deadline > /sys/block/$(readlink /dev/mapper/disi-rsm-vol | cut -d/ -f2)/queue/scheduler</pre> |