Performing an ECS 2.2 single node install on ESXi

EMC ECS 2.2 (Elastic Cloud Storage) has been released as part of the “free and frictionless” as a software only download for customer testing. This free download is a fully containerized version of ECS for development and test only with online community support (not intended for production environments).

 

What does this mean for EMC customers?  Free and frictionless ECS software gives customers access to a fully functional object storage platform without having to go to the public cloud for storage.  What does this mean for EMC?  The ability to run proof of concept efforts with a lower risk and lower cost than a traditional POC with loaner hardware and hours spent in the datacenter.  Getting familiar with this process will help in your efforts to deploy ECS as a software only option.

 

Two options are available for download, the “ECS Docker Single Node Deployment” and the “ECS Docker Multiple Node Deployment”.  The “containerized” version of ECS simply means the ECS software is delivered as a Docker container.  This post will run though the single node install to get a basic understanding of the process and the multiple node deployment process is not included here.

 

Getting started with software only ECS can be done with a Linux host that meets the requirements stated in the documentation.  A virtualized CentOS Linux host is used for this example to keep things simple.   I’ve used vSphere/ESXi but feel free to use desktop virtualization products if you have the hardware.  The virtual Linux host for ECS needs four (4) CPU cores, 16GB RAM, a 16GB boot/OS disk, and a 100GB data disk physically separate from the boot/OS disk.

 

EMC has a public facing free ECS test drive site that provides a free object store target for testing (https://portal.ecstestdrive.com).  No access to the ECS management interface is provided through the ECS test drive site so it is intended for testing ECS as a target only.  Use the ECS test drive if you are simply testing an ECS target (ie, CloudPools target, application development, etc).  Read on and perform the steps in the document if you want the full ECS install and admin experience.

 

Lets get started!

 

Prerequisites and Assumptions

 

  • ECS virtualized on ESXi
  • ECS 2.2 Single Node Docker Configuration
  • CentOS 7 minimal ISO
  • 4 cores (virtual)
  • 16GB RAM (virtual)
  • 16GB boot/OS disk
  • 100GB disk (physically separate from the boot/OS disk)
  • Linux host is *not* behind the EMC firewall!  I have not tried this within the EMC firewall but you will have to modify the certificates on the host, see https://github.com/EMCECS/ECS-CommunityEdition/tree/master/emc-ssl-cert..

 

Preparation

 

  • Download CentOS 7 x86_64 iso, the instructions in this doc assume a “minimal” install to avoid firewall issues--> http://isoredirect.centos.org/centos/7/isos/x86_64/
  • Optional Download ECS 2.2.0.0 from https://www.emc.com/products-solutions/trial-software-download/ecs.htm.  The zip file URL is http://downloads.emc.com/emc-com/usa/ViPR/ECS_CommunityEdition_Download.zip.  This step is optional because you don’t need the download files for this process but you will get the official documentation if you need it for reference.
  • Upload the CentOS 7 iso to an ESX datastore
  • Create a new Linux virtual machine (typical, provide a name, provide a datastore with free space, guest OS is Linux "CentOS 4/5/6/7 (64-bit)", select your VM network with default one (1) NIC, thin provision).
  • Edit the VM, remove the CD/DVD, re-add CD/DVD, select “use ISO image..”, browse datastore to CentOS 7 iso on your datastore, and select, finish.
  • Edit the VM, leave 1 socket but increase to 4 cores per socket
  • Edit the VM, increase to 16GB RAM
  • Edit the VM, add “hard disk”, “create a new virtual disk”, 100GB thin provision, all defaults afterwards
  • CentOS 7 VM config should look like screenshots below, 16GB RAM, 4 cores, 16GB boot/OS vdisk, 100GB data vdisk, and the CentOS 7 iso attached to the CD/DVD drive.

1.png

2.png

 

CentOS 7 Installation

 

  • Power on the VM and open console within the vSphere client
  • Install CentOS 7
  • Select your language
  • Scroll down and select “network & host name”
  • Turn “on” ethernet and click “configure”
  • On “general” tab, select “automatically connect to this network…”
  • Configure IPv4 if you are not using DHCP (leave as-is if DHCP is used)
  • Click “save”
  • Configure “host name”
  • Click “done”
  • Click “installation destination” and select a disk to for CentOS install (16GB boot/OS vdisk) and “done”.  Do not install the OS on the 100GB disk, install on the smaller 16GB boot/OS disk.
  • Click “begin installation”
  • Set the root password
  • “Finish configuration”, “Reboot”
  • At this point you should have CentOS installed on a 16GB disk with an unformatted 100GB disk attached, single socket with 4 cores, 16GB RAM, and a single NIC.
  • From the VM console install ifconfig --> yum install net-tools (if you need it, otherwise use ‘ip addr’ for Centos 7)
  • From the VM console disable IPv6 by creating file ‘disableipv6.conf’ in /etc/sysctl.d (vi /etc/sysctl.d/disableipv6.conf) and adding the entry in the file 'net.ipv6.conf.all.disable_ipv6=1'. Then ‘reboot’
  • From the VM console log in as root and run ‘ifconfig’.  Ethernet interface (eno*) should show an IPv4 address.  Record the address for the next step.
  • Use Putty/terminal from another host to ssh (as root) into the CentOS 7 IPv4 address to confirm IPv4 is working correctly. Continue all remaining work below from putty/terminal instead of the VM console to make things easier.
  • Disable SELinux --> vi /etc/selinux/config and set “SELINUX=disabled”.  Then ‘reboot’.
  • CentOS 7 firewall (firewalld) should not be running from a minimal install.  However, stop and disable the firewalld daemon just to be sure ('systemctl stop firewalld; systemctl disable firewalld').  See next step if you want to leave the firewall running or are running an external firewall.
  • Install NTP to avoid time drift problems with Cyberduck --> 'yum install ntp'
  • Configure NTP --> 'chkconfig ntpd on; ntpdate pool.ntp.org'
  • Configure the hardware clock --> 'hwclock --systohc'
  • Confirm time is set correctly with --> 'date'
  • FYI – If you are using a firewall you will need to open ports on your network.  The Linux firewall is disabled if you followed the previous step.


ECS requires the following ports open:

|Port Number|Port Description|

|-----------|----------------|

|22| SSH, needed if using remote access |

|443 | Port used for accessing the ECS management Website|

|9020| Port used for the S3 API|

|9024| Port used for SWIFT API |

|4443| ECS Management API Port *|

|9011| ECS Management API Port *|

|9101| ECS Diagnostic Service Index |


Collect Information for ECS install

 

  • Run ‘fdisk –l’ , find the Linux ~100GB vDisk and record the /dev/sd#.  For this example, 100GB vDisk is displayed as 107.4GB /dev/sdb. See screenshot below for an example.

3.png

  • Run ‘ifconfig’ and record ethernet interface name and IP.  For this example, interface name is ‘eno16777984’ and IP address is 192.168.0.18.  See screenshot for an example.

4.png

  • Run ‘hostname’ and record the hostname for the Linux host.  Change the hostname if the default was used during installation to match your environment.

 

ECS Installation

 

  • Install Git (as root) --> ‘yum install git’
  • Clone the ECS 2.2 repository --> ‘git clone https://github.com/EMCECS/ECS-CommunityEdition
  • Navigate to the ‘ecs-single-node’ directory (‘cd ~/ECS-CommunityEdition/ecs-single-node’)
  • Run the setup python script for a single node ECS assuming the inputs from the CentOS installation above (100GB Linux disk, ethernet adapter name, hostname).  Python should already be installed from the minimal install --> ‘python step1_ecs_singlenode_install.py --disks sdb --ethadapter eno16777984 --hostname ecssinglenode.hostname.com`.  **NOTE** Do not close your terminal or kill this script until its done, ECS will not start!
  • Take a 30 minute break   Seriously, don’t watch the error messages, don’t stress over failed authentication servicer messages, just relax and wait for things to start in 15-30min.
  • Things are done when you get the message “Step 1 Completed.  Navigate to the administrator website that is available from any of the ECS data nodes.  The ECS administrative portal can be accessed from port 443. For example: https://ecs-node-external-ip-address.  The website may take a few minutes to become available.”  See screenshot below.  If you did not allow the script to run to completion or if you killed/lost your terminal session ECS will not start correctly!

5.png

  • Navigate to the https://<ecs-ip-address> to confirm things are working.  Log on as root (root password is ‘ChangeMe’).  Do not change the password and do not make any config changes! Close the web page!
  • Run the ~/ECS-CommunityEdition/ecs-single-node/step2-object-provisioning.py python script to finish the installation.  This simply does the configuration via command line to save you from having to configure in the webUI.  You can edit the values if you like but the defaults will work fine, you just need to correct the IP address in the example below --> ‘python step2_object_provisioning.py --ECSNodes=<ecs.ip.address.> --Namespace=ns1 --ObjectVArray=ova1 --ObjectVPool=ovp1 --UserName=emccode --DataStoreName=ds1 --VDCName=vdc1 --MethodName=’.  **NOTE** Do not close your terminal or kill this script until its done, ECS will not start!   See screenshot for an example of a successful install, the script will create a user on ECS called “emccode” that we can use later to test the connection.

6.png

  • Take another 15 minutes break, there is no rush   Tables will initialize during this phase, the install script will provide a secret key for user ‘emccode’ when the process is complete (see screenshot below).  Record this secret key for reference.  If you did not allow the script to run to completion or if you killed/lost your terminal session it will not start correctly!

7.png

 

Validation

 

  • Log into webUI (https://<ecs.ip.address>) as root with password “ChangeMe”.  Change the root password and record.
  • Log back in with root and new password
  • ECS single node VM is ready to use!
  • You can resume the wizard by clicking “resume checklist” and “create bucket”.  Bucket can be any name depending on how you intend on using ECS.  See admin guide for explanation on how buckets are used.  Bucket creation is not necessary for basic functionality testing.
  • Read the ECS 2.2 admin guide and follow along with your virtual ECS node!

 

Persisting Reboots

 

  • Reboot the Linux VM.  ECS will not start automatically, the steps below are required for automatically starting up ECS.
  • The 100GB disk partition (/dev/sdb1 in our example) needs to be permanently mounted (entry below) in /etc/fstab.  Edit /etc/fstab (vi /etc/fstab) and correct if necessary.

           /dev/sdb1 /ecs/uuid-1 xfs rw,noatime,seclabel,attr2,inode64,noquota 0 0


8.png

  • Confirm /etc/fstab mounts correctly by running 'mount -a; mount'. Verify you see /dev/sdb1 mounted as /ecs/uuid-1 in the output of 'mount'.
  • Enable the docker service --> 'systemctl enable docker.service'
  • Start the docker service --> 'systemctl start docker.service'
  • Start ECS docker container manually and confirm things are working (will not persist a reboot) --> 'docker start ecsstandalone'
  • Run 'docker ps' to confirm ecsstandalone is running

9.png

  • Copy the example systemd service file to the right location --> ‘cp ~/ECS-CommunityEdition/ecs-single-node/systemd/docker.ecsstandalone.service /usr/lib/systemd/system/.'
  • Edit this file --> ' vi /usr/lib/systemd/system/docker.ecsstandalone.service' and change the final line in this file to --> 'WantedBy=multi-user.target'

10.png

  • Run --> 'systemctl enable docker.ecsstandalone.service'.  You should see a symlink created in the output.
  • Reload the systemctl daemon --> 'systemctl daemon-reload'

11.png

  • Reboot
  • After the reboot wait at least 5 minutes for things to start
  • Run 'docker ps' to confirm ecsstandalone is running
  • Run 'netstat -an | grep :443' .  The webUI is ready when port 443 is listening.

12.png

  • Log into webUI (https://<ecs.ip.address>), things should be running!

 

Cyberduck

 

  • Cyberduck is a free tool used for managing files on an object store.  The S3 browser is similar and can be substituted for this step. Get Cyberduck -->https://cyberduck.io/?l=en and install on a Windows/Mac desktop.
  • Download Cyberduck profiles to the same desktop where you installed Cyberduck to make connecting to ECS easy --> https://community.emc.com/docs/DOC-27683
  • Double click a profile file to open in Cyberduck, for this example the “EMC VIPR S3 (HTTPS).cyberduckprofile” was used.
  • In Cyberduck click “open connection”, the profile will pre-populate the ports and format required to connect via HTTPS.  See screenshots.

13.png

 

14.png

 

15.png

  • Edit the server and replace the “s3.vipr.company.com” with the IP address of your virtual ECS node.  Keep 9021 as the port.
  • Add the username = “emccode” (no quotes) if you ran the script to configure ECS (step 8 of the ECS install section).  Enter the secret key returned from the setup scrip as the password.  See the screenshot below for an example.

16.png

  • Click “connect”, you will get a certificate error since we did not setup the certificate, click “continue”. See screenshot for example.

17.png

  • Cyberduck should connect successfully, click the “action” pull down menu, create a new folder, double click the folder, click “action” and select “upload”.  Upload a file to test ECS (continue when any certificate errors pop up).  See screenshots below.

18.png

 

19.png

 

Done! Things are working!