From d5f7d3589358bf025112eb2729b2efcbf7339ac3 Mon Sep 17 00:00:00 2001 From: Catherine Liu Date: Thu, 7 Mar 2024 16:43:06 +0800 Subject: [PATCH] CA-389564 XenCert guide issue report Signed-off-by: Catherine Liu --- ...rver-shared-storage-verification-form.docx | Bin 78576 -> 78595 bytes docs/xenserver-xencert-guide.md | 210 +++++++++--------- 2 files changed, 105 insertions(+), 105 deletions(-) diff --git a/docs/xenserver-shared-storage-verification-form.docx b/docs/xenserver-shared-storage-verification-form.docx index 9a19412dea01ffb5ad7e6909cd6aebab96d12e45..ad61f06535944b96802d8134ba173964363d403f 100644 GIT binary patch delta 30569 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 delta 30414 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 T0w4ixvH{4TTIjy$7});

-# XenServer 8 Shared Storage Certification kit User Guide +# XenServer 8 Shared Storage Certification kit User Guide
-Published Oct 2023 -8.3.1 Edition +Published Mar 2024 +8.4.0 Edition
#### Table of Contents - -- [XenServer 8 Shared Storage Certification kit User Guide](#xenserver-8-shared-storage-certification-kit-user-guide) - - [Table of Contents](#table-of-contents) - - [Overview](#overview) - - [Environmental Guidelines](#environmental-guidelines) - - [Installation](#installation) - - [Test Categories](#test-categories) - - [Shared storage certification kit usage explained](#shared-storage-certification-kit-usage-explained) - - [Execution time estimates](#execution-time-estimates) - - [Running shared storage certification kit against various storage types](#running-shared-storage-certification-kit-against-various-storage-types) - - [Executing iSCSI tests](#executing-iscsi-tests) - - [Executing HBA and FCOE tests](#executing-hba-and-fcoe-tests) - - [Executing NFS tests](#executing-nfs-tests) - - [Executing SMB tests](#executing-smb-tests) - - [Executing Boot from SAN Multipath tests](#executing-boot-from-san-multipath-tests) - - [Forcing failure in multipath tests](#forcing-failure-in-multipath-tests) - - [Failing paths with iSCSI storage](#failing-paths-with-iscsi-storage) - - [Failing paths with HBA storage](#failing-paths-with-hba-storage) - - [Space Reclamation Tests](#space-reclamation-tests) - - [Log submission](#log-submission) - - [Appendix A-Blocking paths for failover testing](#appendix-a-blocking-paths-for-failover-testing) - - [iSCSI storage type](#iscsi-storage-type) - - [HBA storage type](#hba-storage-type) - - [Appendix B-Notes on storage discovery](#appendix-b-notes-on-storage-discovery) - - [Appendix C-Sample scripts provided with shared storage certification kit](#appendix-c-sample-scripts-provided-with-shared-storage-certification-kit) - - [blockunblockpaths](#blockunblockpaths) - - [blockunblockiscsipaths](#blockunblockiscsipaths) - - [blockunblockhbapaths](#blockunblockhbapaths) - - [blockunblockHBAport.sh.brocade](#blockunblockhbaportshbrocade) - - [blockunblockHBAport.sh.qlogic](#blockunblockhbaportshqlogic) - - [blockunblockHBAport.sh.cisco](#blockunblockhbaportshcisco) - - [Appendix D-Sample commands for testing multipathing with shared storage certification kit](#appendix-d-sample-commands-for-testing-multipathing-with-shared-storage-certification-kit) - - [iSCSI](#iscsi) - - [HBA](#hba) - - [QLogic](#qlogic) - - [Brocade](#brocade) - - [Cisco](#cisco) - - [Notice and Disclaimer](#notice-and-disclaimer) +- [Overview](#overview) +- [Environmental Guidelines](#environmental-guidelines) +- [Installation](#installation) +- [Test Categories](#test-categories) +- [Shared storage certification kit usage explained](#shared-storage-certification-kit-usage-explained) +- [Execution time estimates](#execution-time-estimates) +- [Running shared storage certification kit against various storage types](#running-shared-storage-certification-kit-against-various-storage-types) + - [Executing iSCSI tests](#executing-iscsi-tests) + - [Executing HBA and FCOE tests](#executing-hba-and-fcoe-tests) + - [Executing NFS tests](#executing-nfs-tests) + - [Executing SMB tests](#executing-smb-tests) + - [Executing Boot from SAN Multipath tests](#executing-boot-from-san-multipath-tests) +- [Forcing failure in multipath tests](#forcing-failure-in-multipath-tests) + - [Failing paths with iSCSI storage](#failing-paths-with-iscsi-storage) + - [Failing paths with HBA storage](#failing-paths-with-hba-storage) +- [Space Reclamation Tests](#space-reclamation-tests) +- [Log submission](#log-submission) +- [Appendix A-Blocking paths for failover testing](#appendix-a-blocking-paths-for-failover-testing) + - [iSCSI storage type](#iscsi-storage-type) + - [HBA storage type](#hba-storage-type) +- [Appendix B-Notes on storage discovery](#appendix-b-notes-on-storage-discovery) +- [Appendix C-Sample scripts provided with shared storage certification kit](#appendix-c-sample-scripts-provided-with-shared-storage-certification-kit) + - [blockunblockpaths](#blockunblockpaths) + - [blockunblockiscsipaths](#blockunblockiscsipaths) + - [blockunblockhbapaths](#blockunblockhbapaths) + - [blockunblockHBAport.sh.brocade](#blockunblockhbaportshbrocade) + - [blockunblockHBAport.sh.qlogic](#blockunblockhbaportshqlogic) + - [blockunblockHBAport.sh.cisco](#blockunblockhbaportshcisco) +- [Appendix D-Sample commands for testing multipathing with shared storage certification kit](#appendix-d-sample-commands-for-testing-multipathing-with-shared-storage-certification-kit) + - [iSCSI](#iscsi) + - [HBA](#hba) + - [QLogic](#qlogic) + - [Brocade](#brocade) + - [Cisco](#cisco) ### Overview @@ -80,7 +76,7 @@ The command returns the update uuid of shared storage certification kit package xe update-apply uuid= host= -After installing the supplemental pack, shared storage certification kit can be found in the directory /opt/xensource/debug/XenCert. XenCert is made up of a number of scripts and support files: +After installing the supplemental pack, shared storage certification kit can be found in the directory **/opt/xensource/debug/XenCert**. XenCert is made up of a number of scripts and support files: XenCert XenCertCommon.py @@ -113,11 +109,11 @@ Shared storage certification kit is controlled using the ./XenCert script. Its u ./XenCert –h Common options: - -f functional [optional] perform functional tests - -c control [optional] perform control path tests - -m multipath [optional] perform multipath configuration verification tests - -o pool [optional] perform pool verification tests - -d data [optional] perform data verification tests + -f functional [optional] perform functional tests + -c control [optional] perform control path tests + -m multipath [optional] perform multipath configuration verification tests + -o pool [optional] perform pool verification tests + -d data [optional] perform data verification tests -M metadata [optional] perform metadata tests -h help [optional] show this help message and exit @@ -125,30 +121,33 @@ Shared storage certification kit is controlled using the ./XenCert script. Its u Storage type iscsi: -t target [required] comma separated list of Target names/IP addresses - -q targetIQN [required] comma separated list of target IQNs OR "*" + -q targetIQN [required] comma separated list of target IQNs OR "*" -s SCSIid [optional] SCSIid to use for SR creation -x chapuser [optional] username for CHAP - -w chappasswd [optional] password for CHAP + -w chappasswd [optional] password for CHAP Storage type nfs: -n server [required] server name/IP addr - -e serverpath [required] exported path + -e serverpath [required] exported path - Storage type smb: - -r server [required] Full path to share root on SMB server - -y username [required] The username to be used during SMB authentication - -p password [required] The password to be used during SMB authentication + Storage type cifs: + -r server [required] Full path to share root on CIFS server + -y username [required] The username to be used during CIFS authentication + -p password [required] The password to be used during CIFS authentication - Storage type hba and fcoe: + Storage type hba: -a adapters [optional] comma separated list of HBAs to test against - -S SCSIIDs [required] comma separated list of SCSI IDs to test against + -S scsiIDs [required] comma separated list of SCSI-IDs to test against + + Storage type isl: + -F file [required] configuration file describing target array parameters Test specific options: Multipathing test options (-m above): - -b storage_type [required] storage type (iscsi, hba, nfs, cifs, fcoe) + -b storage_type [required] storage type (iscsi, hba, nfs, isl, fcoe) -u pathHandlerUtil [optional] absolute path to admin provided callout utility which blocks/unblocks a list of paths, path related information should be provided with the -i option below - -i pathInfo [optional] pass-through string used to pass data to the callout utility above, for e.g. login credentials etc. This string is passed as-is to the callout utility. - -g count [optional] count of iterations to perform in case of multipathing failover testing + -i pathInfo [optional] pass-through string used to pass data to the callout utility above, for e.g. login credentials etc. This string is passed as-is to the callout utility. + -g count [optional] count of iterations to perform in case of multipathing failover testing **Notes:** @@ -158,10 +157,10 @@ Shared storage certification kit is controlled using the ./XenCert script. Its u ### Execution time estimates Shared storage certification kit has been designed so as to limit the total execution time of the kit to 12 hours. This duration is partitioned between the various tests as: -• **Functional tests:** Maximum 4 hours. -• **Control path stress tests:** Maximum 6 hours. -• **Multipath configuration verification tests:** N.A. as not IO intensive. -• **Pool tests:** N.A. as not IO intensive. +- **Functional tests:** Maximum 4 hours. +- **Control path stress tests:** Maximum 6 hours. +- **Multipath configuration verification tests:** N.A. as not IO intensive. +- **Pool tests:** N.A. as not IO intensive. The tests will try to predict if it might take longer than the set limit and flag an error accordingly. Further, the maximum LUN size will also be indicated to help restrict the execution time to the respective limit. @@ -169,8 +168,8 @@ Please note however, that these estimates are arrived at run-time using some rou **Important:** The 12 hours interval is a maximum execution time heuristic. If the execution completes earlier, the execution time should not be taken as a measure of correctness. -### Running shared storage certification kit against various storage types -#### Executing iSCSI tests +### Running shared storage certification kit against various storage types +##### Executing iSCSI tests To be able to run the tests against an iSCSI target, the following details need to be specified: - The IP address(es) or Fully Qualified Domain Name(s) of one or more controllers. (Note that where controllers do not advertise the presence of other logically connected controllers during an iSCSI sendtargets query, you must explicitly enter the IP addresses/FQDNs of all controllers as a comma separated list) @@ -185,7 +184,7 @@ The test can then be initiated using the following command: The above command will run all 4 categories of tests. If required, specific flags can be used to run particular tests only. Control path stress tests will be executed using fully provisioned LVM storage mapping and thin provisioned Global Filesystem 2 (GFS2) distributed filesystem storage. -Note that the IQNs visible to the XenServer host from a given IP address(es) can be probed using the XenServer CLI command outlined in the Appendix. +Note that the IQNs visible to the XenServer host from a given IP address(es) can be probed using the XenServer CLI command outlined in the Appendix B. **Note:** @@ -195,7 +194,7 @@ To extend support for alternate multipath configurations: - Rerun the multipath tests as outlined above. - Update the verification form fields (Note changes to multipath.conf and update Test: XC.MultiPath (alternate multipath configuration - optional)). -#### Executing HBA and FCOE tests +##### Executing HBA and FCOE tests To be able to run these tests, the system will need to have access to LUNs from hardware HBAs. Thus before running the test the user will need access to: - A list of adapters to run the test against @@ -208,7 +207,7 @@ The test can then be initiated using the following command: ``` If no adapter is specified, the tests would be run against all the adapters with LUNs mapped to the server where shared storage certification kit is being executed. The above command will run all 4 categories of tests. If required, specific flags can be used to run particular tests only. Control path stress tests will be executed using fully provisioned LVM storage mapping and thin provisioned Global Filesystem 2 (GFS2) distributed filesystem storage. -Note that the adapters known to the XenServer host can be probed using the XenServer CLI command outlined in the Appendix. +Note that the adapters known to the XenServer host can be probed using the XenServer CLI command outlined in the Appendix B. **Important:** Please note that the ports specified using the –i option should be visible from the host. Specifying non-available ports may lead to pathological scenarios like blocking both the paths to a device, so additional care needs to be taken when specifying the pass-through information using -i. @@ -220,7 +219,7 @@ To extend support for alternate multipath configurations: - Rerun the multipath tests as outlined above. - Update the verification form fields (Note changes to multipath.conf and update Test: XC.MultiPath (alternate multipath configuration - optional)).   -#### Executing NFS tests +##### Executing NFS tests To be able to run the tests against a NFS target, the following details need to be specified: - The IP addresses or fully qualified DNS names of the NFS server @@ -232,9 +231,9 @@ The test can then be initiated using the following command: The above command will run all 4 categories of tests. If required, specific flags can be used to run particular tests only. The multipathing and pool tests are not valid for NFS and are not supported or tested. -Note that the NFS target mount points visible to the XenServer host can be probed using the XenServer CLI command outlined in the Appendix. +Note that the NFS target mount points visible to the XenServer host can be probed using the XenServer CLI command outlined in the Appendix B. -#### Executing SMB tests +##### Executing SMB tests To be able to run the tests against a SMB share, the following details need to be specified: @@ -263,25 +262,25 @@ Valid SMB tests with their respective flags are: - Control Path: -c - Data Integrity: -d -#### Executing Boot from SAN Multipath tests +##### Executing Boot from SAN Multipath tests -Please follow the following steps below to perform boot from SAN multipath tests manually. +Please follow the following steps below to perform boot from SAN multipath tests manually. For more information, see [boot from san](https://docs.xenserver.com/en-us/xenserver/8/install/advanced-install.html#boot-from-san). -1.Ensure that your array has boot from SAN capability -2.Configure your array for multipath support (multiple paths to the XenServer) -3.Install XenServer on the LUN provided by the SAN with multipathing enabled, as outlined in the Xenserver Installation Guide. -4.Make sure that the expected number of paths are being used for the boot LUN. -5.Unplug a single path/Fiber cable of the SAN and observe that the path has indeed not present on the XenServer within a maximum time of 50 seconds. (Fail over) -6.Plug in the disconnected cable and look for the failed paths to be active again within a maximum time of 2 minutes.(Fail back) -7.Repeat this step for all the available paths. -8.Observe the number of paths available before and after the test and they should be consistent. +1. Ensure that your array has boot from SAN capability +2. Configure your array for multipath support (multiple paths to the XenServer) +3. Install XenServer on the LUN provided by the SAN with multipathing enabled, as outlined in the Xenserver Installation Guide. +4. Make sure that the expected number of paths are being used for the boot LUN. +5. Unplug a single path/Fiber cable of the SAN and observe that the path has indeed not present on the XenServer within a maximum time of 50 seconds. (Fail over) +6. Plug in the disconnected cable and look for the failed paths to be active again within a maximum time of 2 minutes.(Fail back) +7. Repeat this step for all the available paths. +8. Observe the number of paths available before and after the test and they should be consistent. **Note:** Multipath boot from SAN is currently supported on hardware HBAs only. (SAS, HBA and FCoE) ### Forcing failure in multipath tests Multipath tests are intended to exercise the port failover capabilities within a single host. Note that these tests only apply to the LVM over iSCSI and LVM over HBA (iscsi, fcoe and hba) storage types. -#### Failing paths with iSCSI storage +##### Failing paths with iSCSI storage For failing paths in the case of iSCSI storage, the iptables command can be used. Sample commands for blocking and unblocking paths have been posted in the Appendix A. -#### Failing paths with HBA storage +##### Failing paths with HBA storage There are several ways to fail paths in the case of hba storage: - Cable pull @@ -332,7 +331,7 @@ Execution time: 47 minutes, 42 seconds. ### Appendix A-Blocking paths for failover testing -#### iSCSI storage type +##### iSCSI storage type For iSCSI storage type, the paths can be failed over by using the iptables utility: iptables –A OUTPUT –d -j DROP or iptables –A INPUT –s -j DROP @@ -341,7 +340,7 @@ Subsequently, the paths can be brought online as follows: iptables –D OUTPUT –d -j DROP or iptables –D INPUT –s -j DROP -#### HBA storage type +##### HBA storage type The scripts to block and unblock paths for HBA storage type would be vendor specific. A sample script to bring down a qlogic port has been pasted below: ``` @@ -581,7 +580,7 @@ Error parameters: , The request is missing the device parameter, ``` + 4.If it’s a unblock operation:    a.Bring the blocked ports up by executing blockunblockHBAport.sh with the following arguments (for Brocade): @@ -652,7 +652,7 @@ blockunblockHBAport.sh ip username password port portenable 5.Set the ‘/xencert/block-unblock-over’ entry in XenStore to ‘1’ and exit. -#### blockunblockHBAport.sh.brocade +##### blockunblockHBAport.sh.brocade This sample script telnets to a brocade switch and brings ports up or down. The script is packaged with the kit, and looks like: ``` #!/bin/bash @@ -668,7 +668,7 @@ This sample script telnets to a brocade switch and brings ports up or down. The echo exit ) | telnet ``` -#### blockunblockHBAport.sh.qlogic +##### blockunblockHBAport.sh.qlogic This sample script telnets to a QLogic SANbox switch and brings ports up or down. The script is packaged with the kit, and looks like: #!/bin/bash @@ -688,7 +688,7 @@ This sample script telnets to a QLogic SANbox switch and brings ports up or down ) | telnet -#### blockunblockHBAport.sh.cisco +##### blockunblockHBAport.sh.cisco This sample script telnets to a cisco switch and brings ports up or down. The script is packaged with the kit, and looks like: @@ -712,24 +712,24 @@ This sample script telnets to a cisco switch and brings ports up or down. The sc -### Appendix D-Sample commands for testing multipathing with shared storage certification kit +### Appendix D-Sample commands for testing multipathing with shared storage certification kit The following illustrations assume that shared storage certification kit has been installed at /root/XenCert. If this is not true, then please replace “/root/XenCert” in all the examples with the respective path. -#### iSCSI +##### iSCSI For 100 iterations of multipathing failover test: - ./XenCert –b lvmoiscsi –t 10.20.345.67 –q xx.xx.xx.xx.xx –m –u /root/XenCert/blockunblockiscsipaths + ./XenCert –b lvmoiscsi –t 10.20.345.67 –q xx.xx.xx.xx.xx –m –u /root/XenCert/blockunblockiscsipaths For less than 100 iterations of multipathing failover test, for instance for 10 iterations: - ./XenCert –b lvmoiscsi –m –u /root/XenCert/blockunblockiscsipaths –g 10 + ./XenCert –b lvmoiscsi –m –u /root/XenCert/blockunblockiscsipaths –g 10 -#### HBA +##### HBA This section further assumes that the scripts blockunblockhbapaths-brocade, blockunblockhbapaths-qlogic, blockunblockHBAPort-brocade.sh and blockunblockHBAPort-qlogic.sh, have been tested to working for the respective storage type, and performing as expected. The port numbers as mentioned in the example below are as they appear on the switch. -##### QLogic +###### QLogic For 100 iterations of multipathing failover test: ./XenCert –b lvmohba –m –u /blockunblockhbapaths-qlogic –i fc-switch-ip:username:password:, -S @@ -737,7 +737,7 @@ For 100 iterations of multipathing failover test: For less than 100 iterations of multipathing failover test, for instance for 10 iterations: ./XenCert –b lvmohba –m –u /XenCert/blockunblockhbapaths-qlogic –i fc-switch-ip:username:password:, -S -g 10 -##### Brocade +###### Brocade For 100 iterations of multipathing failover test: ./XenCert –b lvmohba –m –u /XenCert/blockunblockhbapaths-brocade –i fc-switch-ip:username:password:, -S @@ -746,7 +746,7 @@ For less than 100 iterations of multipathing failover test, for instance for 10 ./XenCert –b lvmohba –m –u /XenCert/blockunblockhbapaths-brocade –i fc-switch-ip:username:password:, -S -g 10 -##### Cisco +###### Cisco For 100 iterations of multipathing failover test: ./XenCert –b lvmohba –m –u /XenCert/blockunblockhbapaths-cisco –i fc-switch-ip:username:password:, -S @@ -756,7 +756,7 @@ For less than 100 iterations of multipathing failover test, for instance for 10 ./XenCert –b lvmohba –m –u /XenCert/blockunblockhbapaths-cisco –i fc-switch-ip:username:password:, -S -g 10   -#### Notice and Disclaimer +#### Notice and Disclaimer The contents of this kit are subject to change without notice. Copyright © 2023 Cloud Software Group, Inc. This kit allows you to test your products for compatibility with XenServer products. Actual compatibility results may vary. The kit is not designed to test for all compatibility scenarios. Should you use the kit, you must not misrepresent the nature of the results to third parties. TO THE EXTENT PERMITTED BY APPLICABLE LAW, XENSERVER MAKES AND YOU RECEIVE NO WARRANTIES OR CONDITIONS, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, AND XENSERVER SPECIFICALLY DISCLAIMS WITH RESPECT TO THE KIT ANY CONDITIONS OF QUALITY, AVAILABILITY, RELIABILITY, BUGS OR ERRORS, AND ANY IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. YOU ASSUME THE RESPONSIBILITY FOR ANY INVESTMENTS MADE OR COSTS INCURRED TO ACHIEVE YOUR INTENDED RESULTS. TO THE EXTENT PERMITTED BY APPLICABLE LAW, XENSERVER SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL, PUNITIVE OR OTHER DAMAGES (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF INCOME, LOSS OF OPPORTUNITY, LOST PROFITS OR ANY OTHER DAMAGES), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, AND WHETHER OR NOT FOR NEGLIGENCE OR OTHERWISE, AND WHETHER OR NOT XENSERVER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.