Gérer le module SDC de ScaleIO sur ESXi en ligne de commande

On ne l’arrête plus ! Je sais, je sais … mais je continue mes pérégrination ScaleIO malgré le dernier billet sorti il y a quelques heures. En fait, j’ai dit des bêtises dans le troisième billet sur l’intégration VMWare (je vais mettre un petit pingback sur ce billet pour corriger) : on peut tout à fait gérer entièrement le SDC de ESXi via ligne de commande ! Il faut seulement savoir lire « entre les lignes » de la documentation EMC, qui n’est, de fait, pas à jour :)

Il est écrit dans la doc actuelle, version 302-001-033 révision 12, que l’on peut modifier les paramètres du module noyau « scini » via des commandes esxcli. Mais si vous testez directement les commandes en exemple, comme celle-ci esxcli system module parameters get -m scini vous obtenez une erreur du type « Error: Unknown command or namespace system module parameters get ». Ca décourage un peu … mais il s’agit surtout d’une commande ESXi 5.5 ! Avec ESXi 6, on peut le faire aussi, mais il faut utiliser cette commande esxcli system module parameters list -m scini et vous obtenez cette fois-ci une réponse parfaite :

[root@kuiper3:~] esxcli system module parameters list -m scini
Name                           Type    Value                        Description                                                                                                                                                                                             
-----------------------------  ------  ---------------------------  --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
IoctlIniGuidStr                string                               Ini Guid, for example: 12345678-90AB-CDEF-1234-567890ABCDEF                                                                                                                                             
IoctlMdmIPStr                  string  172.16.16.221,172.16.16.222  Mdms IPs, IPs for MDM in same cluster should be coma separated. To configure more than one cluster use '+' to separate between IPs.For Example: 10.20.30.40,50.60.70.80+11.22.33.44. Max 1024 characters
blkDevMaxCmdLen                int                                  Maximum SCSI Command length                                                                                                                                                                             
blkDev_QDepth                  int                                  Maximum Outstanding Commands                                                                                                                                                                            
blockUnmapMaxBlocksModParam    int                                  Number MB that can be concurently unmapped from a thin provisioned volume.Default 100. Minimum 1. Maximum 200                                                                                           
fastEagerZeroSupport           int                                  Whether we support fast eager zero support (1 for enable).Default 0                                                                                                                                     
iniBwcEnabled                  int                                  Whether Bandwidth counters are enabled.Default 1                                                                                                                                                        
iniBwcWinSec                   int                                  Window size in seconds for the bandwidth counters.Default 5. Minimum 1. Maximum 60                                                                                                                      
iniSchedQuota                  int                                  Quota of MITs before re-scheduling to another thread.Default 3. Minimum 0. Maximum 100                                                                                                                  
iniSchedThreads                int                                  Number general purpose scheduler threads.Default 3. Minimum 1. Maximum 16                                                                                                                               
mapHeadHashAnchors             int                                  Number of anchors in global HEAD hash (Power of 2).Default 1024. Minimum 128. Maximum 4096                                                                                                              
mapITLHashAnchors              int                                  Number of anchors in global volume hash (Power of 2).Default 16. Minimum 4. Maximum 1024                                                                                                                
mapMdmEnableMultipleInstances  int                                  For debugging only. Shouldn't be used in production.                                                                                                                                                    
mapMdmMilliBetweenQuery        int                                  Timeout in millis between MDM queries.Default 60000. Minimum 10000. Maximum 600000                                                                                                                      
mapMdmMilliBetweenVolNotif     int                                  Timeout in millis between MDM volume notifications.Default 5000. Minimum 1000. Maximum 600000                                                                                                           
mapMdmMinMilliBetweenQuery     int                                  Minimum timeout in millis between MDM queries.Default 1000. Minimum 100. Maximum 5000                                                                                                                   
mapMdmPrKeysPerVol             int                                  Maximum PR keys allowed per volumeDefault 64. Minimum 8. Maximum 1000                                                                                                                                   
mapScsiIniHashAnchors          int                                  Number of anchors in global SCSI Initiators hash (Power of 2).Default 1024. Minimum 128. Maximum 4096                                                                                                   
mapTgtHashAnchors              int                                  Number of anchors in global targets hash (Power of 2).Default 1024. Minimum 128. Maximum 4096                                                                                                           
mapTgtSockets                  int                                  Number of sockets per target end-point.Default 1. Minimum 1. Maximum 8                                                                                                                                  
mapVTreeHashAnchors            int                                  Number of anchors in global V-Tree hash (Power of 2).Default 16. Minimum 4. Maximum 1024                                                                                                                
mapVolHashAnchors              int                                  Number of anchors in global volume hash (Power of 2).Default 16. Minimum 4. Maximum 1024                                                                                                                
netChanDebugFailAlloc          int                                  Debug parameter. Do not use in production.                                                                                                                                                              
netChanMaxInflight             int                                  Maximum amount of in-flight requests to one target.Default 100 Minimum 1. Maximum 10000                                                                                                                 
netChanMbInflight              int                                  Number MB in-flight per target connection.Default 10. Minimum 1. Maximum 10000                                                                                                                          
netConConnectTimeoutMillis     int                                  Timeout logical connection establishment in milliseconds.Default 1000. Minimum 1000. Maximum 10000                                                                                                      
netConIdleTimeoutMillis        int                                  Amount of milliseconds before an idle socket is closed.Default 3000. Minimum 100. Maximum 60000                                                                                                         
netConKaMillis                 int                                  Amount of milliseconds between keep-alive pollsDefault 100. Minimum 100. Maximum 1000                                                                                                                   
netConMillisToReconnect        int                                  Millis to wait before establishing a connection after a failed connect or a disconnect event.Default 1000. Minimum 100. Maximum 60000                                                                   
netConSchedMask                int                                  CPU mask for network scheduler threads. Can only be 32 bits.                                                                                                                                            
netConSchedQuota               int                                  Quota of MITS before re-scheduling to another network thread.Default 0. Minimum 0. Maximum 100                                                                                                          
netConSchedThrd                int                                  Number of network scheduler threads.Default 2. Minimum 1. Maximum 10                                                                                                                                    
netSockConnTimeoutMilli        int                                  Timeout for Socket connection in millisecondsDefault 5000. Minimum 3000. Maximum 20000                                                                                                                  
netSockDisableNagle            int                                  Whether to disable nagle for new sockets. Default 1                                                                                                                                                     
netSockQuickAckMode            int                                  Quick ack mode. 0 = Auto. 1 = Always. 2 = After receive is drained.Default 2                                                                                                                            
netSockRcvBufSize              int                                  Socket buffer receive size. Default 512K. Minimum 8K                                                                                                                                                    
netSockSndBufSize              int                                  Socket buffer send size. Default 512K. Minimum 8K                                                                                                                                                       
rpcHashAnchors                 int                                  Number of anchors for RPC global hash (Power of 2 number).Default 512. Minimum 128. Maximum 4096                                                                                                        
rpcTimeoutMillis               int                                  Timeout for RPC in millis.Default 30000. Minimum 1000. Maximum 60000                                                                                                                                    
volIoRetries                   int                                  Amount of retries per I/O.Default 12. Minimum 1. Maximum 100                                                                                                                                            
volIoSnapRetries               int                                  Amount of short timeout I/O retries for snapshots..Default 6. Minimum 1. Maximum 100                                                                                                                    
volMillisOnFault               int                                  Amount of millis to sleep when receiving a fault from target.Default 2000. Minimum 100. Maximum 10000                                                                                                   
volMillisOnSnapFault           int                                  Amount of millis to sleep when receiving a snapshot fault from target.Default 100. Minimum 100. Maximum 2000                                                                                            
[root@kuiper3:~] 

Ensuite, vous pouvez modifier les paramètres à loisir (par exemple, modifier les IP des MDM) en utilisant l’instruction « set » à la place de « list » en y ajoutant les options adéquat. Par exemple :

[root@kuiper3:~] esxcli system module parameters set -m scini -p "IoctlMdmIPStr=172.16.16.221,172.16.16.222"
[root@kuiper3:~]

Pour reconfigurer complètement votre client, vous pouvez changer le GUID et repositionner les IP des nouveaux MDM… suivi d’un reboot de l’ESXi, à l’aide d’une commande de ce type :
esxcli system module parameters set -m scini -p "IoctlIniGuidStr=aaaaaaaa-bbbb-bbbb-cccc-000000000001 IoctlMdmIPStr=172.16.16.221,172.16.16.222"

Finalement, avec ce genre d’astuce, vous pouvez carrément vous passer de plugin web client pour gérer entièrement votre cluster ScaleIO. Parfait pour de la configuration batch ou juste pour s’amuser entre ami, un soir, sans but précis, alors que vous cherchiez un chemin… que jamais vous n’avez trouvé :)