diff --git a/README.md b/README.md index b8717fb3..97eae492 100644 --- a/README.md +++ b/README.md @@ -102,8 +102,7 @@ The OVA is shipped as a bootstrapped Install Node. It must be cloned multiple t ##### OVA Download Links -* [dellemc-ecsce-3.0.0.2-install-node-2.2.2-vm0.ova](http://130852476153187606.public.ecstestdrive.com/public/dellemc-ecsce-3.0.0.2-install-node-2.2.2-vm0.ova) -* [dellemc-ecsce-3.0.0.2-install-node-2.2.2-vm0.ova.xz](http://130852476153187606.public.ecstestdrive.com/public/dellemc-ecsce-3.0.0.2-install-node-2.2.2-vm0.ova.xz) +* [dellemc-ecsce-3.0.0.2-install-node-2.3.0-vm0.ova](http://130852476153187606.public.ecstestdrive.com/public/dellemc-ecsce-3.0.0.2-install-node-2.3.0-vm0.ova) #### [ECS Single-Node Deployment with Install Node (recommended)](docs/source/installation/ECS-Installation.md) Using an Install Node for isolated environments, deploy a stand-alone instance of ECS to a single hardware or virtual machine. diff --git a/README.rst b/README.rst index a2a5bfff..93e18b1e 100644 --- a/README.rst +++ b/README.rst @@ -144,8 +144,7 @@ If you prefer to download a prefab Install Node as an OVF/OVA, follow one of the links below. Please note that OVAs are produced upon each release and do not necessarily have the most current software. -- `dellemc-ecsce-2.0.2-beta.ova `__ -- `dellemc-ecsce-2.0.2-beta.ova.xz `__ +- `dellemc-ecsce-3.0.0.2-install-node-2.3.0-vm0.ova `__ `ECS Multi-Node Deployment with Install Node (recommended, most reusable, full-featured) `__ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/bootstrap.sh b/bootstrap.sh index be1fa158..af7cb732 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -584,6 +584,13 @@ else fi ping_sudo +### Log Docker Inventory +v "Logging Docker Inventory" +p Logging Docker Inventory +sudo docker images 2>&1 | log +sudo docker ps -a 2>&1 | log +ping_sudo + ### Next steps p '' q 'All done bootstrapping your install node.' diff --git a/bootstrap_plugins/centos72.plugin.sh b/bootstrap_plugins/centos72.plugin.sh index deb78a35..bfd3e9af 100644 --- a/bootstrap_plugins/centos72.plugin.sh +++ b/bootstrap_plugins/centos72.plugin.sh @@ -35,7 +35,7 @@ in_prefix_packages() { # packages to install # list_general_packages='yum-utils git python-pip python-docker-py' -list_general_packages='git ntp docker' +list_general_packages='git ntp docker vim rsync pigz gdisk aria2' # script to run for installing general_packages in_general_packages() { @@ -49,7 +49,7 @@ in_general_packages() { } # packages to install after others -list_suffix_packages='vim htop iotop iftop jq rsync pigz gdisk aria2 python-docker-py' +list_suffix_packages='htop iotop iftop multitail dstat jq python-docker-py' # list_suffix_packages='htop jq pigz gdisk aria2 python-docker-py' # script to run for installing suffix_packages diff --git a/bootstrap_plugins/centos73.plugin.sh b/bootstrap_plugins/centos73.plugin.sh index e03502cf..bbff9450 100755 --- a/bootstrap_plugins/centos73.plugin.sh +++ b/bootstrap_plugins/centos73.plugin.sh @@ -34,7 +34,7 @@ in_prefix_packages() { # packages to install # list_general_packages='yum-utils git python-pip python-docker-py' -list_general_packages='git ntp docker' +list_general_packages='git ntp docker vim rsync pigz gdisk aria2' # script to run for installing general_packages in_general_packages() { @@ -48,7 +48,7 @@ in_general_packages() { } # packages to install after others -list_suffix_packages='vim htop iotop iftop jq rsync pigz gdisk aria2 python-docker-py' +list_suffix_packages='htop iotop iftop multitail dstat jq python-docker-py' # list_suffix_packages='htop jq pigz gdisk aria2 python-docker-py' # script to run for installing suffix_packages diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 00000000..5b4c9bc4 --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1 @@ +sphinxcontrib-fulltoc \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py index 800bdbe0..001c48c7 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -30,7 +30,7 @@ # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = [] +extensions = ['sphinxcontrib.fulltoc'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] @@ -89,13 +89,19 @@ # further. For a list of options available for each theme, see the # documentation. # -#html_theme_options = { +html_theme_options = { # 'navbar_links': [ # ("Google", "http://google.com", True) #] -#} + 'navbar_pagenav': False, +} html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() +# Add sidebar to display toc +html_sidebars = { + '**': ['localtoc.html'] +} + # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". diff --git a/docs/source/index.rst b/docs/source/index.rst index 92f49ed8..9f3574ec 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -13,7 +13,9 @@ Welcome to ECS Community Edition's documentation! installation/ECS-Installation.rst use/ECS-UI-Web-Interface.rst + use/Migration.rst troubleshooting/ECS-Troubleshooting.rst + troubleshooting/FAQ.rst .. include:: ../../README.rst diff --git a/docs/source/troubleshooting/ECS-Troubleshooting.md b/docs/source/troubleshooting/ECS-Troubleshooting.md index e80139f5..78e1b83e 100644 --- a/docs/source/troubleshooting/ECS-Troubleshooting.md +++ b/docs/source/troubleshooting/ECS-Troubleshooting.md @@ -1,15 +1,28 @@ # ECS Software 3.x - Troubleshooting Tips - -## Troubleshooting Tips This is a list of troubleshooting tips and nuggets that will help with issues. If you still have problems, please use the support section. + +## Installation + +### If you change deploy.yml after running step1, you must run `update_deploy` before running step1 again. Otherwise you will likely get the following error: + +``` +{"failed": true, "msg": "An unhandled exception occurred while running the lookup plugin 'file'. + Error was a , original message: the file_name + '/opt/ssh/id_ed25519.pub' does not exist, or is not readable"} + +``` + +### `A block device configured in deploy.yml for data nodes is already partitioned.` + +This error often shows up after a failed installation attempt. In order to clean up the block devices to start over run `ecsremove purge-nodes`. -### Provisioning of ECS +## Provisioning of ECS -It takes roughly 30 minutes to get the system provisioned for Step 2 (step2_object_provisioning.py). ECS creates Storage Pools, Replication Groups with the attached disks. If Step 2 is successful, you should see something along these lines. +It takes roughly 30 minutes to get the system provisioned for Step2. ECS creates Storage Pools, Replication Groups with the attached disks. If Step2 is successful, you should see something along these lines. -#### Adding a Secret Key for a user +### Adding a Secret Key for a user Set the user and the key that needs to be used and execute the command. For example: @@ -36,17 +49,14 @@ If you want to see if system is making progress: `curl -X GET "http://:9101/stats/dt/DTInitStat”` +## ECS Services + ### Docker Container immediately exits on startup If your docker instance immediately exits when started, please ensure that the entries in `/etc/hosts` on the host system and `network.json` in the install directory are correct (the latter should reflect the host's public IP and the corresponding network adapter). -### For those operating behind EMC firewall - -To install ECS Community Edition under these conditions, please view the readme file under **/emc-ssl-cert** for further instructions in installing the necessary CA certificate. - - ### Restoring ECS after host shutdown/restart In the case that the ECS Community Edition container does not automatically start on boot, you can bring it up manually by ensuring that docker is running (`service docker start`) and issuing a start command for the container (`docker start `, where the container-ID is `ecsstandalone` or `ecsmultinode`, viewable via the command `sudo docker ps -a`). @@ -63,6 +73,131 @@ For multiple-node installations, the `/etc/hosts` file on the host VM should inc If attempting to authenticate results in a response of "Connection Refused", review the below section and ensure all necessary ports are open on all ECS nodes in the cluster. +## NFS + +### Necessary NFS Ports +The following ports must be opened for NFS to function properly + +Port Number | +|---| +| 111 | +| 2049 | + + +### NFS Volume Refuses to Mount + +ECS does support the NFS file system. However, troubles can occur when ECS is installed on the full version, or "Everything" version, of CentOS 7. ***Note that the following solution is not necessary on CentOS 7 Minimal.*** + +#### The Problem +CentOS 7 Everything starts with NFS/RPC/Portmap components running in the root scope. This is a problem as the ECS-CE Docker container runs its own version of rpcbind. This is the instance of rpcbind that ECS is intended to communicate with. When CentOS is running rpcbind in root scope in addition to the ECS Docker container, a conflict is created and a NFS volume cannot be mounted. + +This can be seen by `# rpcinfo -p` returning no NFS services. + +#### The Solution +The conflict can be resolved by simply running `systemctl disable rpcbind`. This command will shut down the rpc service running on the host OS while leaving the Docker instance untouched. + +To confirm the CentOS service is gone, run `rpcinfo -p` in the CentOS shell. This should return an error: `rpcinfo: can't contact portmapper: RPC: Remote system error - No such file or directory` + +The same command, `rpcinfo-p`, can be run in the Docker container, which should return something similar to: +``` + program vers proto port service + 100000 4 tcp 111 portmapper + 100000 3 tcp 111 portmapper + 100000 2 tcp 111 portmapper + 100000 4 udp 111 portmapper + 100000 3 udp 111 portmapper + 100000 2 udp 111 portmapper + 100005 3 tcp 2049 mountd + 100005 3 udp 2049 mountd + 100003 3 tcp 2049 nfs + 100024 1 tcp 2049 status + 100021 4 tcp 10000 nlockmgr + 100021 4 udp 10000 nlockmgr +``` + +NFS should now function correctly. + +## IBM Tivoli Monitoring + +### Issue +ECS Community edition will fail to completely initialize the storage pool on machines that have the IBM Tivoli Monitoring agent installed. The storage pool will forever stick in the "Initializing" state and attempts to create a VDC will result in HTTP 400 errors. + +### Analysis +Doing a `ps -ef` inside the container will show that dataheadsvc and metering are restarting frequently. Looking at `/opt/storageos/logs/metering.log` will show a bind exception on port 10110. This port is already bound by Tivoli's `k10agent` process. + +### Workaround +1. Uninstall Tivoli Monitoring +or +2. Change the port on impacted nodes. + +#### Changing the port on ECS +On _all_ nodes, you will need to edit `/opt/storageos/conf/mt-var.xml` to change the bind port from 10110 to 10109. Edit the file and change the line: + +``` + +``` + +to: + +``` + +``` + +Then restart the metering service: + +``` +kill `pidof metering` +``` + +## Network Troubleshooting + +### For those operating behind EMC firewall + +To install ECS Community Edition under these conditions, please view the readme file under **/emc-ssl-cert** for further instructions in installing the necessary CA certificate. + +### Disabling IPv6 + +ECS Community Edition does not yet support IPv6. The following procedure can be used to disable IPv6 in CentOS 7. + +### To disable IPv6 on startup: + +Add the following to /etc/sysctl.conf + +``` +net.ipv6.conf.all.disable_ipv6 = 1 +net.ipv6.conf.default.disable_ipv6 = 1 +``` + +### To disable IPv6 running: + +``` +echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6 +echo 1 > /proc/sys/net/ipv6/conf/default/disable_ipv6 +``` +or + +``` +sysctl -w net.ipv6.conf.all.disable_ipv6=1 +sysctl -w net.ipv6.conf.default.disable_ipv6=1 +``` + +### Get correct interface name + +CentOS 7 does not assign network interface names as eth0, eth1, etc, but rather assigns "predictable" names to each interface that generally look like `ens32` or similar. There are many benefits to this that can be read about [here](https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/). + +This can be disabled as documented in the above link, however, these names can otherwise be simply found and used in the ECS-Community installer without issue. To find the names for each device enter the following command: `ip a`. This command will output a list of network devices. Simply find the corresponding device and substitute it for eth0 in the stage1 installation script. + +### Port Conflicts + +It is possible that on multinode installations ECS may run into a port conflict. So far there exists a port conflict with the following: + +* ScaleIO - Ports: 9011, 9099 + +In these instances the user can attempt to: + +1. Enter the container +2. Change all instances of the conflicting ports to unused ports in `/opt/storageos/conf` +3. Reboot the nodes after altering the conf file. ### List of open ports required on each ECS data node @@ -74,7 +209,7 @@ followed by `firewall-cmd --reload` for each host. `fwd_settings.sh` in the main directory will invoke the `firewalld` service and permanently open necessary ports. In the case of a failure in this setup referencing `iptables`, please ensure that your docker network bridge is running and installed using `yum install bridge-utils`. -In the case of a multiple node configuration, you may + |Port Name-Usage=Port Number| |---------------------------| diff --git a/docs/source/troubleshooting/ECS-Troubleshooting.rst b/docs/source/troubleshooting/ECS-Troubleshooting.rst index 54b58925..53606227 100644 --- a/docs/source/troubleshooting/ECS-Troubleshooting.rst +++ b/docs/source/troubleshooting/ECS-Troubleshooting.rst @@ -1,22 +1,37 @@ ECS Software 3.x - Troubleshooting Tips ======================================= -Troubleshooting Tips --------------------- - This is a list of troubleshooting tips and nuggets that will help with issues. If you still have problems, please use the support section. +Installation +------------ + +If you change deploy.yml after running step1, you must run ``update_deploy`` before running step1 again. Otherwise you will likely get the following error: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +:: + + {"failed": true, "msg": "An unhandled exception occurred while running the lookup plugin 'file'. + Error was a , original message: the file_name + '/opt/ssh/id_ed25519.pub' does not exist, or is not readable"} + +``A block device configured in deploy.yml for data nodes is already partitioned.`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This error often shows up after a failed installation attempt. In order +to clean up the block devices to start over run +``ecsremove purge-nodes``. + Provisioning of ECS -~~~~~~~~~~~~~~~~~~~ +------------------- -It takes roughly 30 minutes to get the system provisioned for Step 2 -(step2\_object\_provisioning.py). ECS creates Storage Pools, Replication -Groups with the attached disks. If Step 2 is successful, you should see -something along these lines. +It takes roughly 30 minutes to get the system provisioned for Step2. ECS +creates Storage Pools, Replication Groups with the attached disks. If +Step2 is successful, you should see something along these lines. Adding a Secret Key for a user -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set the user and the key that needs to be used and execute the command. For example: @@ -45,6 +60,9 @@ node. ``curl -X GET "http://:9101/stats/dt/DTInitStat”`` +ECS Services +------------ + Docker Container immediately exits on startup ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -53,13 +71,6 @@ that the entries in ``/etc/hosts`` on the host system and ``network.json`` in the install directory are correct (the latter should reflect the host's public IP and the corresponding network adapter). -For those operating behind EMC firewall -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -To install ECS Community Edition under these conditions, please view the -readme file under **/emc-ssl-cert** for further instructions in -installing the necessary CA certificate. - Restoring ECS after host shutdown/restart ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -93,6 +104,180 @@ If attempting to authenticate results in a response of "Connection Refused", review the below section and ensure all necessary ports are open on all ECS nodes in the cluster. +NFS +--- + +Necessary NFS Ports +~~~~~~~~~~~~~~~~~~~ + +The following ports must be opened for NFS to function properly + ++---------------+ +| Port Number | ++===============+ +| 111 | ++---------------+ +| 2049 | ++---------------+ + +NFS Volume Refuses to Mount +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +ECS does support the NFS file system. However, troubles can occur when +ECS is installed on the full version, or "Everything" version, of CentOS +7. ***Note that the following solution is not necessary on CentOS 7 +Minimal.*** + +The Problem +^^^^^^^^^^^ + +CentOS 7 Everything starts with NFS/RPC/Portmap components running in +the root scope. This is a problem as the ECS-CE Docker container runs +its own version of rpcbind. This is the instance of rpcbind that ECS is +intended to communicate with. When CentOS is running rpcbind in root +scope in addition to the ECS Docker container, a conflict is created and +a NFS volume cannot be mounted. + +This can be seen by ``# rpcinfo -p`` returning no NFS services. + +The Solution +^^^^^^^^^^^^ + +The conflict can be resolved by simply running +``systemctl disable rpcbind``. This command will shut down the rpc +service running on the host OS while leaving the Docker instance +untouched. + +To confirm the CentOS service is gone, run ``rpcinfo -p`` in the CentOS +shell. This should return an error: +``rpcinfo: can't contact portmapper: RPC: Remote system error - No such file or directory`` + +The same command, ``rpcinfo-p``, can be run in the Docker container, +which should return something similar to: + +:: + + program vers proto port service + 100000 4 tcp 111 portmapper + 100000 3 tcp 111 portmapper + 100000 2 tcp 111 portmapper + 100000 4 udp 111 portmapper + 100000 3 udp 111 portmapper + 100000 2 udp 111 portmapper + 100005 3 tcp 2049 mountd + 100005 3 udp 2049 mountd + 100003 3 tcp 2049 nfs + 100024 1 tcp 2049 status + 100021 4 tcp 10000 nlockmgr + 100021 4 udp 10000 nlockmgr + +NFS should now function correctly. + +IBM Tivoli Monitoring +--------------------- + +Issue +~~~~~ + +ECS Community edition will fail to completely initialize the storage +pool on machines that have the IBM Tivoli Monitoring agent installed. +The storage pool will forever stick in the "Initializing" state and +attempts to create a VDC will result in HTTP 400 errors. + +Analysis +~~~~~~~~ + +Doing a ``ps -ef`` inside the container will show that dataheadsvc and +metering are restarting frequently. Looking at +``/opt/storageos/logs/metering.log`` will show a bind exception on port +10110. This port is already bound by Tivoli's ``k10agent`` process. + +Workaround +~~~~~~~~~~ + +1. Uninstall Tivoli Monitoring or +2. Change the port on impacted nodes. + +Changing the port on ECS +^^^^^^^^^^^^^^^^^^^^^^^^ + +On *all* nodes, you will need to edit ``/opt/storageos/conf/mt-var.xml`` +to change the bind port from 10110 to 10109. Edit the file and change +the line: + +:: + + + +to: + +:: + + + +Then restart the metering service: + +:: + + kill `pidof metering` + +Network Troubleshooting +----------------------- + +For those operating behind EMC firewall +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To install ECS Community Edition under these conditions, please view the +readme file under **/emc-ssl-cert** for further instructions in +installing the necessary CA certificate. + +Disabling IPv6 +~~~~~~~~~~~~~~ + +ECS Community Edition does not yet support IPv6. The following procedure +can be used to disable IPv6 in CentOS 7. + +To disable IPv6 on startup: +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Add the following to /etc/sysctl.conf + +:: + + net.ipv6.conf.all.disable_ipv6 = 1 + net.ipv6.conf.default.disable_ipv6 = 1 + +To disable IPv6 running: +~~~~~~~~~~~~~~~~~~~~~~~~ + +:: + + echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6 + echo 1 > /proc/sys/net/ipv6/conf/default/disable_ipv6 + +or + +:: + + sysctl -w net.ipv6.conf.all.disable_ipv6=1 + sysctl -w net.ipv6.conf.default.disable_ipv6=1 + +Get correct interface name +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +CentOS 7 does not assign network interface names as eth0, eth1, etc, but +rather assigns "predictable" names to each interface that generally look +like ``ens32`` or similar. There are many benefits to this that can be +read about +`here `__. + +This can be disabled as documented in the above link, however, these +names can otherwise be simply found and used in the ECS-Community +installer without issue. To find the names for each device enter the +following command: ``ip a``. This command will output a list of network +devices. Simply find the corresponding device and substitute it for eth0 +in the stage1 installation script. + List of open ports required on each ECS data node ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/source/troubleshooting/FAQ.md b/docs/source/troubleshooting/FAQ.md new file mode 100644 index 00000000..fd05e016 --- /dev/null +++ b/docs/source/troubleshooting/FAQ.md @@ -0,0 +1,23 @@ +# Frequently Asked Questions + +## Can I add storage to ECS-CommunityEdition after initializing an installation? + +No. Unfortunately because ECS Community Edition lacks the 'fabric' layer present in full featured ECS, it is not possible to add storage space after a completed installation. + +## I am locked out of my ECS management console, can I reset the root password? + +Currently there is no procedure to reset the root password if you are locked out. + +## The storage capacity statistics presented on the ECS dashboard seem wrong, what's going on here? + +ECS uses a data boxcarting strategy called "chunking". Chunks are pre-allocated when ECS is first initialized. When user data is written into ECS, pre-allocated chunks are filled and ECS pre-allocates however many new chunks ECS "thinks" would be best for the future based on what it knows about the past. + +Capacity statistics are calculated based on allocated and pre-allocated chunks at the time statistics are requested, and don't exactly reflect the actual amount of user data stored within ECS. We do this because it is a performance-enhancing heuristic that is a "good enough" representation of capacities without having to churn through the whole system to figure out the actual user data capacity numbers. In short, the numbers you are seeing are not designed to be exact, but are close estimates. + +## Can I use a data store node as an NTP server for the rest of the nodes? + +No, this is not a supported deployment option. An external NTP server is required. + +## My ECS functions but the storage pools never initialize. + +If you can store objects in buckets without issue, then it's likely that your storage pools and data stores are fully initialized. ECS Community Edition is a bit weird in that there are some UI/display issues with storage pools showing "Not Ready" and data stores showing "initializing" even after they have become fully initialized. If you can create VDCs, replication groups, namespaces, and buckets, then your storage pools are certainly initialized as those higher level abstractions require a working storage pool. \ No newline at end of file diff --git a/docs/source/troubleshooting/FAQ.rst b/docs/source/troubleshooting/FAQ.rst new file mode 100644 index 00000000..64844866 --- /dev/null +++ b/docs/source/troubleshooting/FAQ.rst @@ -0,0 +1,51 @@ +Frequently Asked Questions +========================== + +Can I add storage to ECS-CommunityEdition after initializing an installation? +----------------------------------------------------------------------------- + +No. Unfortunately because ECS Community Edition lacks the 'fabric' layer +present in full featured ECS, it is not possible to add storage space +after a completed installation. + +I am locked out of my ECS management console, can I reset the root password? +---------------------------------------------------------------------------- + +Currently there is no procedure to reset the root password if you are +locked out. + +The storage capacity statistics presented on the ECS dashboard seem wrong, what's going on here? +------------------------------------------------------------------------------------------------ + +ECS uses a data boxcarting strategy called "chunking". Chunks are +pre-allocated when ECS is first initialized. When user data is written +into ECS, pre-allocated chunks are filled and ECS pre-allocates however +many new chunks ECS "thinks" would be best for the future based on what +it knows about the past. + +Capacity statistics are calculated based on allocated and pre-allocated +chunks at the time statistics are requested, and don't exactly reflect +the actual amount of user data stored within ECS. We do this because it +is a performance-enhancing heuristic that is a "good enough" +representation of capacities without having to churn through the whole +system to figure out the actual user data capacity numbers. In short, +the numbers you are seeing are not designed to be exact, but are close +estimates. + +Can I use a data store node as an NTP server for the rest of the nodes? +----------------------------------------------------------------------- + +No, this is not a supported deployment option. An external NTP server is +required. + +My ECS functions but the storage pools never initialize. +-------------------------------------------------------- + +If you can store objects in buckets without issue, then it's likely that +your storage pools and data stores are fully initialized. ECS Community +Edition is a bit weird in that there are some UI/display issues with +storage pools showing "Not Ready" and data stores showing "initializing" +even after they have become fully initialized. If you can create VDCs, +replication groups, namespaces, and buckets, then your storage pools are +certainly initialized as those higher level abstractions require a +working storage pool. diff --git a/docs/source/use/Migration.md b/docs/source/use/Migration.md new file mode 100644 index 00000000..a3467877 --- /dev/null +++ b/docs/source/use/Migration.md @@ -0,0 +1,10 @@ +# Migration + +## General Cases + +Most migration cases can be handled by a great tool we wrote called ecs-sync, found [here](https://github.com/EMCECS/ecs-sync). + +## HDFS + +An HDFS migration is possible with s3distcp or distcp. Please note that if using s3distcp with the s3a driver, it needs to be the latest version or you may run into issues. If using distcp, ECS's HCFS driver "viprfs" will need to be set up as a secondary FS and the distcp made from `hdfs://...` to `viprfs://...`. Instructions for installing the HCFS driver can be found [here](http://doc.isilon.com/ECS/3.0/DataAccessGuide/wwhelp/wwhimpl/js/html/wwhelp.htm#href=vipr_c_hdfs_ViPRHDFS_intro.html). + diff --git a/docs/source/use/Migration.rst b/docs/source/use/Migration.rst new file mode 100644 index 00000000..9a5b0dd1 --- /dev/null +++ b/docs/source/use/Migration.rst @@ -0,0 +1,19 @@ +Migration +========= + +General Cases +------------- + +Most migration cases can be handled by a great tool we wrote called +ecs-sync, found `here `__. + +HDFS +---- + +An HDFS migration is possible with s3distcp or distcp. Please note that +if using s3distcp with the s3a driver, it needs to be the latest version +or you may run into issues. If using distcp, ECS's HCFS driver "viprfs" +will need to be set up as a secondary FS and the distcp made from +``hdfs://...`` to ``viprfs://...``. Instructions for installing the HCFS +driver can be found +`here `__. diff --git a/docs/sphinx_bootstrap_theme/bootstrap/importantlinks.html b/docs/sphinx_bootstrap_theme/bootstrap/importantlinks.html new file mode 100644 index 00000000..c3c46772 --- /dev/null +++ b/docs/sphinx_bootstrap_theme/bootstrap/importantlinks.html @@ -0,0 +1,22 @@ + + + + + Important Links + + + + + \ No newline at end of file diff --git a/docs/sphinx_bootstrap_theme/bootstrap/navbar.html b/docs/sphinx_bootstrap_theme/bootstrap/navbar.html index 5c1d9b9b..9f4209c6 100644 --- a/docs/sphinx_bootstrap_theme/bootstrap/navbar.html +++ b/docs/sphinx_bootstrap_theme/bootstrap/navbar.html @@ -35,6 +35,7 @@ {% endblock %} {% endif %} {% block navbarextra %} + {% include "importantlinks.html" %} {% endblock %} {% if theme_source_link_position == "nav" %} diff --git a/docs/sphinx_bootstrap_theme/bootstrap/theme.conf b/docs/sphinx_bootstrap_theme/bootstrap/theme.conf index 03e5d335..76c4dcdf 100644 --- a/docs/sphinx_bootstrap_theme/bootstrap/theme.conf +++ b/docs/sphinx_bootstrap_theme/bootstrap/theme.conf @@ -20,7 +20,7 @@ navbar_links = navbar_sidebarrel = true # Render the current pages TOC in the navbar. (Default: true) -navbar_pagenav = true +navbar_pagenav = # Tab name for the current pages TOC. (Default: "Page") navbar_pagenav_name = Page diff --git a/patches/3.0.0.0-86889.0a0ee19/Dockerfile b/patches/3.0.0.0-86889.0a0ee19/Dockerfile deleted file mode 100644 index 6a2d0231..00000000 --- a/patches/3.0.0.0-86889.0a0ee19/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -# Fixes to the default 3.0 HF2 image. -FROM emcvipr/object:3.0.0.0-86889.0a0ee19-reduced - -# Increase memory for transformsvc -ADD transformsvc /opt/storageos/bin/ - -# Fix disk partitioning script -ADD storageserver-partition-config.sh /opt/storageos/bin/ -RUN /usr/bin/chmod +x /opt/storageos/bin/storageserver-partition-config.sh - -# Make vnest use separate thread pools to prevent deadlock -ADD vnest.object.properties /opt/storageos/conf/ - -RUN f=/opt/storageos/conf/vnest-common-conf-template.xml; grep -q "object.UseSeparateThreadPools" $f || sed -i '/properties id="serviceProperties"/a \ \ \ \ \ \ \ \ true' $f diff --git a/patches/3.0.0.0-86889.0a0ee19/storageserver-partition-config.sh b/patches/3.0.0.0-86889.0a0ee19/storageserver-partition-config.sh deleted file mode 100644 index dbb9a0b4..00000000 --- a/patches/3.0.0.0-86889.0a0ee19/storageserver-partition-config.sh +++ /dev/null @@ -1,119 +0,0 @@ -#!/bin/bash -# Copyright (c) 2013 EMC Corporation -# All Rights Reserved -# -# This software contains the intellectual property of EMC Corporation -# or is licensed to EMC Corporation from third parties. Use of this -# software and the intellectual property contained therein is expressly -# limited to the terms and conditions of the License Agreement under which -# it is provided by or on behalf of EMC. -# - -date - -# This script will generate the partition file (ss-partition-conf.json) to be used on this server if one is not found. -# Also a general configuration file will be generated with main parameters and a ss uuid. -# Assumes this is running on gen 3 hardware or a vipr data test node using disks mounted with a -# /dae/uuid-58f917ab-23ba-457f-a9df-d0f4b0597e2d type pattern or will look for /data (vipr) - -export configdir="/opt/storageos/conf" - -export p_configfile="$configdir/storageserver-partition-conf.json" -export configfile="$configdir/storageserver.conf" - -blockbinsizegb=10 -vm_bb_cout=5 -vm_part_count=5 - -function setopt() { - opt=$1 - val=$2 - if grep -q "$opt" "$configfile" ; then - sed -i "s#$opt=.*#$opt=$val#g" "$configfile" - else - echo "$opt=$val" >> $configfile - fi - -} - -echo "creating main config file: $configfile" -if [ ! -e "$configfile" ]; then - echo "creating $configfile" - mkdir -p "$configdir" - cat << EOF > "$configfile" -listenaddress=0.0.0.0 -port=9099 -iothreads=100 -blockbinsizegb=$blockbinsizegb -debugenabled=false -logtoconsole=false -logtosyslog=true -maxoutstandingrequests=0 -initblockbins=0 -netserverListenPort=9069 -netserverLogLevel=INFO -ioThreadNumber=200 -perfCountEnabled=true -maxMemThresholdKb=3145728 -sendQHighWaterMark=1000 -recvThreadNicePriority=-15 -sendThreadNicePriority=-15 -enableAffinity=true -partitionroot=/dae -agentUrlEndPoint=/host/data/agent.json -agentDisksRestFragment=/v1/agent/node/storage/disk/disks -trustStore=/host/data/security/truststore.pem -verifyCerts=true -dbusEnabled=false -EOF -else - echo "$configfile already exists, no action taken" -fi - -if grep -q -E 'VMware.*Virtual.*disk' /proc/scsi/sg/device_strs && [ ! -e /data/is_community_edition ] -then - # this a virtual datanode, creating a json file with predefined values - echo "virtual node detected - using json config file" - setopt partitionconfig $p_configfile - setopt partitionroot=/dae - root="/data/storageserver" - - for part in $(seq 1 $vm_part_count); do - for bb in $(seq 1 $vm_bb_cout); do - bb=$(printf "%0*d\n" 4 $bb) - mkdir -m 777 -p $root/uuid-$part - fallocate -l${blockbinsizegb}G $root/uuid-$part/$bb - chmod 777 $root/uuid-$part/$bb - done - done - - if [ ! -e "$p_configfile" ]; then - echo "creating $p_configfile" - mkdir -p "$configdir" - - printf '{\n%2s"disks": [\n' > $p_configfile - for part in $(seq 1 "$vm_part_count"); do - printf '%4s{\n%6s"uuid": "'$part'",\n%6s"health": "Good"\n%4s}' >> $p_configfile - [ "$part" -lt "$vm_part_count" ] && echo "," >> $p_configfile || echo "" >> $p_configfile - done - printf '%2s]\n}' >> $p_configfile - - else - echo "$p_configfile already exists, no action taken" - fi -else - # this is a commodity hardware node. do not generate a json file - ss will use dbus to obtain partitions - echo "commodity node detected - using dbus api" -fi - -if ! grep --quiet "uuid" "$configfile"; then - echo "generating server uuid" - uuidgen="$(which uuidgen)" - if [ ! -z "$uuidgen" ]; then - uuid="$(uuidgen)" - else - echo "warning: uuidgen utility was not found on your system. using timestamp as a uuid" - uuid="$(date +%s)" - fi - setopt uuid "$uuid" -fi diff --git a/patches/3.0.0.0-86889.0a0ee19/transformsvc b/patches/3.0.0.0-86889.0a0ee19/transformsvc deleted file mode 100644 index 144f5edc..00000000 --- a/patches/3.0.0.0-86889.0a0ee19/transformsvc +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh -LIB_DIR="/opt/storageos/lib" -export JAVA_HOME="/usr/lib64/jvm/java-1.8.0-oracle/jre" -export PATH="${JAVA_HOME}/bin:/opt/storageos/bin:/bin:/usr/bin" - -export CLASSPATH="/opt/storageos/conf:${LIB_DIR}:${LIB_DIR}/storageos-transformsvc.jar:${LIB_DIR}/rsa-bsafe-for-centera.jar:${LIB_DIR}/slf4j-api-1.7.5.jar:${LIB_DIR}/jul-to-slf4j-1.7.5.jar:${LIB_DIR}/jcl-over-slf4j-1.7.5.jar:${LIB_DIR}/log4j-core-2.5.jar:${LIB_DIR}/log4j-api-2.5.jar:${LIB_DIR}/log4j-slf4j-impl-2.5.jar:${LIB_DIR}/log4j-jcl-2.5.jar:${LIB_DIR}/joda-time-2.2.jar:${LIB_DIR}/super-csv-2.1.0.jar:${LIB_DIR}/antlr-runtime-3.2.jar:${LIB_DIR}/uuid-3.2.jar:${LIB_DIR}/cassandra-clientutil-2.0.10.jar:${LIB_DIR}/cassandra-thrift-2.0.10.jar:${LIB_DIR}/cassandra-all-2.0.10.jar:${LIB_DIR}/commons-lang3-3.1.jar:${LIB_DIR}/compress-lzf-0.8.4.jar:${LIB_DIR}/high-scale-lib-1.1.2.jar:${LIB_DIR}/jackson-mapper-asl-1.9.2.jar:${LIB_DIR}/jackson-core-asl-1.9.2.jar:${LIB_DIR}/jamm-0.2.5.jar:${LIB_DIR}/jbcrypt-0.3m.jar:${LIB_DIR}/jline-1.0.jar:${LIB_DIR}/json-simple-1.1.jar:${LIB_DIR}/lz4-1.2.0.jar:${LIB_DIR}/netty-3.6.6.Final.jar:${LIB_DIR}/metrics-core-2.2.0.jar:${LIB_DIR}/servlet-api-2.5.jar:${LIB_DIR}/snakeyaml-1.11.jar:${LIB_DIR}/snaptree-0.1.jar:${LIB_DIR}/antlr-3.2.jar:${LIB_DIR}/snappy-java-1.0.5.jar:${LIB_DIR}/concurrentlinkedhashmap-lru-1.3.jar:${LIB_DIR}/commons-cli-1.1.jar:${LIB_DIR}/libthrift-0.9.1.jar:${LIB_DIR}/astyanax-queue-1.56.49.jar:${LIB_DIR}/astyanax-recipes-1.56.49.jar:${LIB_DIR}/astyanax-cassandra-1.56.49.jar:${LIB_DIR}/astyanax-core-1.56.49.jar:${LIB_DIR}/astyanax-entity-mapper-1.56.49.jar:${LIB_DIR}/astyanax-thrift-1.56.49.jar:${LIB_DIR}/commons-lang-2.6.jar:${LIB_DIR}/aopalliance-1.0.jar:${LIB_DIR}/spring-aop-4.2.0.RELEASE.jar:${LIB_DIR}/spring-aspects-4.2.0.RELEASE.jar:${LIB_DIR}/spring-beans-4.2.0.RELEASE.jar:${LIB_DIR}/spring-context-4.2.0.RELEASE.jar:${LIB_DIR}/spring-context-support-4.2.0.RELEASE.jar:${LIB_DIR}/spring-core-4.2.0.RELEASE.jar:${LIB_DIR}/spring-expression-4.2.0.RELEASE.jar:${LIB_DIR}/spring-instrument-4.2.0.RELEASE.jar:${LIB_DIR}/spring-oxm-4.2.0.RELEASE.jar:${LIB_DIR}/spring-test-4.2.0.RELEASE.jar:${LIB_DIR}/spring-tx-4.2.0.RELEASE.jar:${LIB_DIR}/spring-web-4.2.0.RELEASE.jar:${LIB_DIR}/spring-webmvc-4.2.0.RELEASE.jar:${LIB_DIR}/spring-security-aspects-4.0.2.RELEASE.jar:${LIB_DIR}/spring-security-config-4.0.2.RELEASE.jar:${LIB_DIR}/spring-security-core-4.0.2.RELEASE.jar:${LIB_DIR}/spring-security-crypto-4.0.2.RELEASE.jar:${LIB_DIR}/spring-security-ldap-4.0.2.RELEASE.jar:${LIB_DIR}/spring-security-openid-4.0.2.RELEASE.jar:${LIB_DIR}/spring-security-remoting-4.0.2.RELEASE.jar:${LIB_DIR}/spring-security-taglibs-4.0.2.RELEASE.jar:${LIB_DIR}/spring-security-web-4.0.2.RELEASE.jar:${LIB_DIR}/spring-ldap-core-2.0.3.RELEASE.jar:${LIB_DIR}/netty-3.2.8.Final.jar:${LIB_DIR}/zookeeper-3.4.6-11-vipr.jar:${LIB_DIR}/curator-client-2.6.0.jar:${LIB_DIR}/curator-framework-2.6.0.jar:${LIB_DIR}/curator-recipes-2.6.0.jar:${LIB_DIR}/curator-test-2.6.0.jar:${LIB_DIR}/curator-x-discovery-2.6.0.jar:${LIB_DIR}/curator-x-discovery-server-2.6.0.jar:${LIB_DIR}/commons-logging-adapters-1.1.jar:${LIB_DIR}/commons-logging-api-1.1.jar:${LIB_DIR}/commons-httpclient-3.1.jar:${LIB_DIR}/asm-3.1.jar:${LIB_DIR}/jackson-jaxrs-1.9.2.jar:${LIB_DIR}/jackson-xc-1.9.2.jar:${LIB_DIR}/jersey-client-1.12.jar:${LIB_DIR}/jersey-core-1.12.jar:${LIB_DIR}/jersey-json-1.12.jar:${LIB_DIR}/jersey-server-1.12.jar:${LIB_DIR}/jersey-servlet-1.12.jar:${LIB_DIR}/jettison-1.1.jar:${LIB_DIR}/jsr311-api-1.1.1.jar:${LIB_DIR}/jersey-apache-client-1.12.jar:${LIB_DIR}/jersey-apache-client4-1.12.jar:${LIB_DIR}/jersey-multipart-1.12.jar:${LIB_DIR}/jetty-server-9.3.8.v20160314.jar:${LIB_DIR}/jetty-util-9.3.8.v20160314.jar:${LIB_DIR}/jetty-servlet-9.3.8.v20160314.jar:${LIB_DIR}/jetty-servlets-9.3.8.v20160314.jar:${LIB_DIR}/jetty-http-9.3.8.v20160314.jar:${LIB_DIR}/jetty-security-9.3.8.v20160314.jar:${LIB_DIR}/jetty-io-9.3.8.v20160314.jar:${LIB_DIR}/jetty-continuation-9.3.8.v20160314.jar:${LIB_DIR}/jetty-deploy-9.3.8.v20160314.jar:${LIB_DIR}/jetty-webapp-9.3.8.v20160314.jar:${LIB_DIR}/jetty-xml-9.3.8.v20160314.jar:${LIB_DIR}/commons-jexl-1.1.jar:${LIB_DIR}/perf4j-0.9.16.jar:${LIB_DIR}/aspectjweaver-1.7.0.jar:${LIB_DIR}/aspectjrt-1.7.0.jar:${LIB_DIR}/cglib-nodep-2.2.2.jar:${LIB_DIR}/httpcore-4.3.2.jar:${LIB_DIR}/httpclient-4.3.3.jar:${LIB_DIR}/jna-3.5.1.jar:${LIB_DIR}/platform-3.5.1.jar:${LIB_DIR}/netty-all-4.0.19.Final.jar:${LIB_DIR}/casnaming-2.1.0.2-832.jar:${LIB_DIR}/aws-java-sdk-core-1.9.30.jar:${LIB_DIR}/aws-java-sdk-s3-1.9.30.jar:${LIB_DIR}/storageos-xml.jar:${LIB_DIR}/storageos-common.jar:${LIB_DIR}/storageos-client.jar:${LIB_DIR}/storageos-controller.jar:${LIB_DIR}/storageos-objcontrolsvc.jar:${LIB_DIR}/storageos-provisionsvc.jar:${LIB_DIR}/storageos-directoryactions.jar:${LIB_DIR}/storageos-ownership.jar:${LIB_DIR}/storageos-devicescanner.jar:${LIB_DIR}/storageos-gc.jar:${LIB_DIR}/storageos-ssmclient.jar:${LIB_DIR}/storageos-sscommunicator.jar:${LIB_DIR}/storageos-shared.jar:${LIB_DIR}/storageos-faultinjection.jar:${LIB_DIR}/storageos-centeramapiclient.jar:${LIB_DIR}/storageos-blobclient.jar:${LIB_DIR}/storageos-vnest.jar:${LIB_DIR}/storageos-vnestclient.jar:${LIB_DIR}/storageos-transformclient.jar:${LIB_DIR}/storageos-cashead.jar:${LIB_DIR}/storageos-stat.jar:${LIB_DIR}/platforminterfaces-4.3.479.jar:${LIB_DIR}/protobuf-java-2.5.0.jar:${LIB_DIR}/storageos-logging.jar:${LIB_DIR}/fabric-agent-api-1.3.0.0-2969.32ea651.jar:${LIB_DIR}/fabric-agent-client-1.3.0.0-2969.32ea651.jar:${LIB_DIR}/fabric-base-1.3.0.0-2969.32ea651.jar:${LIB_DIR}/fabric-lifecycle-api-1.3.0.0-2969.32ea651.jar:${LIB_DIR}/fabric-lifecycle-client-1.3.0.0-2969.32ea651.jar:${LIB_DIR}/cryptojce-6.1.2-FIPS-140.jar:${LIB_DIR}/cryptojcommon-6.1.2-FIPS-140.jar:${LIB_DIR}/jcmFIPS-6.1.2-FIPS-140.jar:${LIB_DIR}/certj-6.1.1-FIPS-140.jar:${LIB_DIR}/sslj-6.1.2-FIPS-140.jar:${LIB_DIR}/storageos-apisvc.jar:${LIB_DIR}/storageos-syssvc.jar:${LIB_DIR}/storageos-ec.jar:${LIB_DIR}/storageos-dynamicconfig.jar:${LIB_DIR}/storageos-daresecurity.jar:${LIB_DIR}/storageos-nfsclient.jar:${LIB_DIR}/FPLibrary-3.3.62.jar:${LIB_DIR}/commons-io-2.4.jar:${LIB_DIR}/storageos-datasecurity.jar:${LIB_DIR}/storageos-ipc.jar:${LIB_DIR}/storageos-netty.jar:${LIB_DIR}/storageos-keystone.jar:${LIB_DIR}/storageos-directoryclient.jar:${LIB_DIR}/storageos-casnaming.jar:${LIB_DIR}/storageos-resourceclient.jar:${LIB_DIR}/storageos-keypool.jar:${LIB_DIR}/storageos-metering-client.jar:${LIB_DIR}/storageos-statclient.jar:${LIB_DIR}/storageos-policy.jar:${LIB_DIR}/storageos-filesvcCommon.jar:${LIB_DIR}/quasar-core-0.7.5.jar:${LIB_DIR}/asm-5.1.jar:${LIB_DIR}/kryo-2.24.0.jar:${LIB_DIR}/comsat-okhttp-0.7.0.jar:${LIB_DIR}/storageos-directorytable.jar:${LIB_DIR}/storageos-zkstore.jar:${LIB_DIR}/storageos-monitoring.jar:${LIB_DIR}/commons-collections-3.2.1.jar:${LIB_DIR}/storageos-communication.jar:${LIB_DIR}/commons-pool2-2.2.jar:${LIB_DIR}/nile-apisvc_models-1.0.0.0.466.502508c.jar:${LIB_DIR}/cryptix-3.2.0.jar:${LIB_DIR}/bcpkix-jdk15on-1.52.jar:${LIB_DIR}/bcprov-ext-jdk15on-1.52.jar:${LIB_DIR}/bcprov-jdk16-1.46.jar:${LIB_DIR}/javax.ws.rs-api-2.0.1.jar:${LIB_DIR}/storageos-fastmd5.jar:${LIB_DIR}/jaxen-1.1.1.jar:${LIB_DIR}/dom4j-1.6.1.jar:${LIB_DIR}/junit-4.11.jar:${LIB_DIR}/hamcrest-core-1.3.jar:${LIB_DIR}/hamcrest-library-1.3.jar:${LIB_DIR}/mapi-4.3.519.jar:${LIB_DIR}/storageos-cas_security.jar:${LIB_DIR}/storageos-cas_common.jar:${LIB_DIR}/storageos-blobclient_common.jar:${LIB_DIR}/commons-configuration-1.10.jar:${LIB_DIR}/storageos-btree.jar:${LIB_DIR}/storageos-coordinatorsvc.jar:${LIB_DIR}/storageos-cas-datastore.jar:${LIB_DIR}/storageos-statistics.jar:${LIB_DIR}/storageos-npacket.jar:${LIB_DIR}/storageos-blobaddress.jar:${LIB_DIR}/storageos-agent.jar:${LIB_DIR}/storageos-bytes.jar:${LIB_DIR}/storageos-utils.jar:${LIB_DIR}/storageos-config.jar:${LIB_DIR}/storageos-blobsvc.jar:${LIB_DIR}/concurrent-1.3.3.jar:${LIB_DIR}/sisu-guice-2.1.7.jar:${LIB_DIR}/jersey-spring-1.12.jar:${LIB_DIR}/storageos-ecs-client.jar:${LIB_DIR}/storageos-controllersvc.jar:${LIB_DIR}/storageos-security.jar:${LIB_DIR}/commons-compress-1.4.1.jar:${LIB_DIR}/xz-1.0.jar:${LIB_DIR}/jema-api-0.jar:${LIB_DIR}/xercesImpl-2.9.1.jar:${LIB_DIR}/eccpresso-all-2.8.jar:${LIB_DIR}/elmjava-3.3.0.jar:${LIB_DIR}/flexlm-11.11.1.jar:${LIB_DIR}/storageos-backup.jar:${LIB_DIR}/storageos-dbclient.jar:${LIB_DIR}/okhttp-2.6.0.jar:${LIB_DIR}/okhttp-urlconnection-2.6.0.jar:${LIB_DIR}/okhttp-apache-2.6.0.jar:${LIB_DIR}/okio-1.6.0.jar:${LIB_DIR}/storageos-paxos.jar:${LIB_DIR}/storageos-zkbtree.jar:${LIB_DIR}/storageos-errorhandling.jar:${LIB_DIR}/storageos-models.jar:${LIB_DIR}/storageos-serviceutils.jar:${LIB_DIR}/storageos-md5.jar:${LIB_DIR}/storageos-directoryserver.jar:${LIB_DIR}/storageos-georeplayer.jar:${LIB_DIR}/javax.inject-1.jar:${LIB_DIR}/log4j-1.2.16.jar:${LIB_DIR}/apache-log4j-extras-1.1.jar:${LIB_DIR}/gson-2.1.jar:${LIB_DIR}/jsch-0.1.51.jar:${LIB_DIR}/storageos-geomodels.jar:${LIB_DIR}/mail-1.4.3.jar:${LIB_DIR}/javassist-3.18.0-GA.jar:${LIB_DIR}/storageos-jmx.jar:${LIB_DIR}/activation-1.1.jar:${LIB_DIR}/guava-15.0.jar:${LIB_DIR}/javax.servlet-api-3.1.0.jar:${LIB_DIR}/jackson-core-2.3.5.jar:${LIB_DIR}/jackson-databind-2.3.5.jar:${LIB_DIR}/jackson-annotations-2.3.5.jar:${LIB_DIR}/commons-codec-1.8.jar:${LIB_DIR}/commons-logging-1.2.jar:${LIB_DIR}/tools.jar" - -_wait_for_dbsvc_init() { - start_time=$(date +%s) - while [ ! -e /var/run/storageos/dbsvc_initialized -a $(($(date +%s) - ${start_time})) -lt 0 ] ; do - sleep 10 - done -} - -_wait_for_dbsvc_init -[ "${0##*/}" = "dbsvc" ] && rm -f /var/run/storageos/dbsvc_initialized - -# Save PID -pid_file_name=${0##*/} -pid_file_name=${pid_file_name%%-coverage} -echo $$ >/var/run/storageos/${pid_file_name}.pid - - -exec -a $0 ${JAVA_HOME}/bin/java -ea -server -d64 -Xmx512m -Dproduct.home="${PRODUCT_HOME:-/opt/storageos}" \ - -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/storageos/logs/transformsvc-$$.hprof -XX:+PrintGCDateStamps -XX:+PrintGCDetails \ - -Dlog4j.configurationFile=file:/opt/storageos/conf/transformsvc-log4j2.xml -XX:NewSize=300m -XX:MaxNewSize=300m -Dsun.net.inetaddr.ttl=0 -XX:MaxPermSize=128m -XX:MaxTenuringThreshold=8 -XX:+UseConcMarkSweepGC -XX:+ExplicitGCInvokesConcurrent -XX:CMSInitiatingOccupancyFraction=60 -XX:+UseCMSInitiatingOccupancyOnly -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintTenuringDistribution -XX:+PrintGCDateStamps -Xloggc:/opt/storageos/logs/transformsvc-gc-$((($(ls /opt/storageos/logs/transformsvc-gc-*.log.0* -t 2>/dev/null | head -n1 | sed 's/.*-gc-\([0-9]\).*/\1/')+1)%10)).log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=3 -XX:GCLogFileSize=50M \ - com.emc.storageos.data.transformation.Main "${@}" diff --git a/patches/3.0.0.0-86889.0a0ee19/vnest.object.properties b/patches/3.0.0.0-86889.0a0ee19/vnest.object.properties deleted file mode 100644 index 4bbb948d..00000000 --- a/patches/3.0.0.0-86889.0a0ee19/vnest.object.properties +++ /dev/null @@ -1,126 +0,0 @@ -# vnest cluster group size -object.QuorumSize=5 -# number of zk servers in the ensemble -# keep same as QuorumSize; it is a separate config so it can be adjusted for standalone -object.ZkEnsembleSize=5 -# ownership lease time -object.zkReconfigWaitTimeSecs=300 - -object.RetryInterval=10000 -# This retry limit is for heartbeat only -object.RetryLimit=0 -# retry limit for bootstrap -object.BootstrapRetryLimit=1 - -object.TcpConnTimeout=1000 -object.MembershipBroadcastIntervalSecs=60 -object.UpdateCoordConfigIntervalSecs=60 -#number of thread to start for bcast -object.BcastLoadPerThread=3 -#number of bcast retry -object.NumBcastRetry=1 -#bcast threshold for serial or parallel -object.BcastThreshold=100 - -# comm requests to other servers -object.PaxosClientTimeoutSecs=10 -object.PaxosSuspectedTimeoutMillis=3000 - -# Total number of pre-allocated files -object.NumOfFiles=10 -# Threshold: if worker crosses this threshold then a new maintenance task is triggered to create new journal files -object.TaskTriggerThreshold=6 -# max journal size -object.FileSizeBytes=52428800 - -#Configuration module parameters -object.GroupMembershipFileName=groupmembership.config -object.CoordServerFileName=coord-server -object.CoordClientFileName=coord-client - -# configurable root, base of all directories -object.VNestRoot=/data/vnest -# configurable immediate child of VNestRoot, supports multiple vnests on single node (standalone) -object.VNestId=vnest-main - -# children of /VNestRoot/VNestId -object.ConfigurationPath=configuration -object.JournalPreallocationPath=journal -object.VNestJournalDir=replay -object.VNestIndexDir=index -object.VNestLockBoxDir=lockbox -object.VNestIndexRootRecordDir=root -object.VNestTempWorkspaceDir=workspace -object.RecycleDir=recycle -object.ShadowDir=shadow -object.VNestBootstrapDir=bootstrap - -#Initial refresh timeout in sec -object.InitialRefreshTimeoutSec=5 - -# HeartBeat -object.WaitForInitSecs=900 -object.WaitForBootstrapSecs=3600 -object.UnreachableSecs=3600 -object.UnreachableLeaderSecs=300 -object.TempNodeDownSecs=120 -object.HeartBeatFrequencySecs=5 -object.HeartBeatStatusCheckFrequencySecs=5 - -# Note: this should be less than object.WaitForInitSecs -object.MaxTimeSpentInitializingSecs=600 - -# GC -object.PreviousIndexesToKeep=3 -object.IndexGCIntervalSecs=300 -object.ChunkGCIntervalSecs=500 -# delete (true) vs. move to 'recycle' (false) -object.SkipRecycleDir=false - -# retention period of stale btree pages -object.BTree.DaysToRetain=2 -object.BTree.RecycleBinDir=recycleBin -object.BTree.StalePageRetenionDays=15 -object.VNestStaleJournalRetentionDays=5 -object.BTreeGCScriptTimeoutSecs=7200 - -# index BFW -object.IndexMaxSizePerWrite=524288 - -object.WSScanIntervalSec=600 - -object.WSDeleteThresholdSec=3600 - -# provided by container -object.NetworkConfigPath=/host/data/network.json -object.NodeInfoPath=/host/data/topology.json - -# comm retry in vNest paxos layer, for things like DT not init, etc -object.vNestPaxosRetryCount=3 - - -object.ObjectLockMaxWaitSeconds=10 - -# time before key reconfiguration task scan -object.ReconfigScanIntervalSecs=60 -# wait time after key in transition -object.ReconfigScanTimeoutIntervalSecs=140 -object.ReconfigKeyPartitions=7 -object.ReconfigThreads=8 -object.ReconfigListMaxKeys=512 - -object.KeyPurgeInitialDelayMinutes=10 -object.KeyPurgeIntervalMinutes=360 - -object.OperationsToggledInitialDelayMinutes=5 -object.OperationsToggledIntervalMinutes=60 -object.OperationsToggledLengthSeconds=10 -object.OperationsToggleEnabled=true -object.DiagnosticsEnabled=false - - -# DT initialized, but can't create journal chunk -object.WaitForReadOnlySecs=60 - -# Use separate thread pools to prevent deadlock in vnest init -object.UseSeparateThreadPools=true diff --git a/patches/3.0.0.1/Dockerfile b/patches/3.0.0.1/Dockerfile index 55e98f6d..04426795 100644 --- a/patches/3.0.0.1/Dockerfile +++ b/patches/3.0.0.1/Dockerfile @@ -1,5 +1,5 @@ # Fixes to the default 3.0HF image. -FROM emcvipr/object:3.1.0.0-93256.00e3410-reduced +FROM emcvipr/object:3.0.0.0-86239.1c9e5ec-reduced # Increase memory for transformsvc ADD transformsvc /opt/storageos/bin/ diff --git a/patches/3.0.0.2/Dockerfile b/patches/3.0.0.2/Dockerfile new file mode 100644 index 00000000..95b19965 --- /dev/null +++ b/patches/3.0.0.2/Dockerfile @@ -0,0 +1,14 @@ +# Fixes to the default 3.0 HF2 image. +FROM emcvipr/object:3.0.0.0-86889.0a0ee19-reduced + +# Increase memory for transformsvc +RUN sed -i s/-Xmx128m/-Xmx512m/ /opt/storageos/bin/transformsvc + +# Fix disk partitioning script +RUN sed -i '/VMware/ s/$/ \&\& [ ! -e \/data\/is_community_edition ]/' /opt/storageos/bin/storageserver-partition-config.sh + +COPY vnest-common-conf-template.xml /opt/storageos/conf/vnest-common-conf-template.xml + +# Make vnest use separate thread pools to prevent deadlock +RUN printf "\n# Use separate thread pools to prevent deadlock in vnest init\nobject.UseSeparateThreadPools=true\n" >> /opt/storageos/conf/vnest.object.properties + diff --git a/patches/3.0.0.2/vnest-common-conf-template.xml b/patches/3.0.0.2/vnest-common-conf-template.xml new file mode 100644 index 00000000..df01f0da --- /dev/null +++ b/patches/3.0.0.2/vnest-common-conf-template.xml @@ -0,0 +1,417 @@ + + + + + + + + + + + + + + 0.1 + 10 + 12 + false + 29 + 0.5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + VNEST_INDEX + true + + + + + true + + 100 + false + 1 + 10000 + 10000 + 1 + 1 + 1 + 2000 + 30000 + 60000 + 1 + 100 + 200 + 300 + true + true + 50 + 1500 + 1000 + 50 + 5 + 10000 + 80 + 5000 + 60000 + 200 + 60000 + 2000 + 200 + 2000 + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + REQUEST_PAXOS_ACCEPT + REQUEST_PAXOS_COMMIT + REQUEST_PAXOS_QUERY + REQUEST_PAXOS_BULK_QUERY + REQUEST_PAXOS_LIST + REQUEST_PAXOS_READ + REQUEST_PAXOS_ELECT + REQUEST_PAXOS_ABORT + REQUEST_PAXOS_INITIATE_ABORT + REQUEST_PAXOS_DELETE_COMPLETE + REQUEST_PAXOS_DELETE + REQUEST_PAXOS_INSERT_TASK + + REQUEST_INSERT_ENTRY + REQUEST_INSERT_ENTRY_IF_ABSENT + REQUEST_GET_ENTRY + REQUEST_REMOVE_ENTRY + REQUEST_LIST_ENTRY + REQUEST_BATCH_EXEC_ENTRY + + REQUEST_GROUPMEMBER_PRE_BOOTSTRAP + + REQUEST_UPDATE_VNEST_CONFIG + REQUEST_GET_DATANODES + REQUEST_GET_DATANODE_INFO + REQUEST_UPDATE_DATANODES + REQUEST_GET_GROUPMEMBERSHIP + REQUEST_UPDATE_ZK_ENSEMBLE + REQUEST_ENABLE_NEST_DIAGNOSTIC + + REQUEST_CHECK_NODE + REQUEST_CHANGE_LOG_LEVEL + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/patches/3.1.0.0/Dockerfile b/patches/3.1.0.0/Dockerfile index 04426795..55e98f6d 100644 --- a/patches/3.1.0.0/Dockerfile +++ b/patches/3.1.0.0/Dockerfile @@ -1,5 +1,5 @@ # Fixes to the default 3.0HF image. -FROM emcvipr/object:3.0.0.0-86239.1c9e5ec-reduced +FROM emcvipr/object:3.1.0.0-93256.00e3410-reduced # Increase memory for transformsvc ADD transformsvc /opt/storageos/bin/ diff --git a/release.conf b/release.conf index 8d5ff977..b0555f8d 100644 --- a/release.conf +++ b/release.conf @@ -11,13 +11,19 @@ # DO NOT specify an alternate registry here. Use the -r argument to # bootstrap.sh for that. # -# Older versions ( 2.1 and up ) +### Older versions ( 3.0 ) +# release_artifact="emccorp/ecs-software-3.0.0" +# release_tag="3.0.0.1" +# release_tag="3.0.0.2" +# release_tag="latest" +# +### Older versions ( 2.1 < 3 ) # release_artifact="emccorp/ecs-software-2.1" # release_artifact="emccorp/ecs-software-2.2" # release_artifact="emccorp/ecs-software-2.2.1" # release_tag="latest" # -# Older versions ( 2.0 - 2.0.1.2 ) +### Older versions ( 2.0 - 2.0.1.2 ) # release_artifact="emccorp/ecs-software" # release_tag="2.0.0" # release_tag="2.0.1" diff --git a/ui/ansible/catfacts.sh b/ui/ansible/catfacts.sh index 705965e6..6b7adbc1 100755 --- a/ui/ansible/catfacts.sh +++ b/ui/ansible/catfacts.sh @@ -10,7 +10,7 @@ set -o pipefail # limited to the terms and conditions of the License Agreement under which # it is provided by or on behalf of EMC. -facts="/opt/cache/facts" +facts="/var/cache/emc/ecs-install/facts" host="${1}" usage() { diff --git a/ui/ansible/roles/CentOS_7_baseline_install/tasks/main.yml b/ui/ansible/roles/CentOS_7_baseline_install/tasks/main.yml index 14434169..96e33365 100644 --- a/ui/ansible/roles/CentOS_7_baseline_install/tasks/main.yml +++ b/ui/ansible/roles/CentOS_7_baseline_install/tasks/main.yml @@ -39,7 +39,7 @@ # two different runs of `yum update` during bootstrap.sh that causes it. # BUG: workaround for above the "--exclude epel-release-7-6.noarch" argument. - name: CentOS 7 | Install all packages in the cache - shell: yum -y -t -e0 -C --nogpgcheck install $(find /var/cache/yum -type f -name "*.rpm") || yum -y -t -e0 -C --nogpgcheck update || true + shell: yum -y -t -e0 -C --nogpgcheck --exclude epel-release-7-9.noarch install $(find /var/cache/yum -type f -name "*.rpm") || yum -y -t -e0 -C --nogpgcheck update args: creates: "{{host_cache_dir}}/disable_package_cache.sem" when: not ( num_data_nodes|int == 1 and top_data_node == install_node ) diff --git a/ui/ansible/roles/common_deploy/tasks/main.yml b/ui/ansible/roles/common_deploy/tasks/main.yml index 9b05add2..762b3e3c 100644 --- a/ui/ansible/roles/common_deploy/tasks/main.yml +++ b/ui/ansible/roles/common_deploy/tasks/main.yml @@ -1,21 +1,21 @@ - include_vars: main.yml ### This is where we put all the adjusted configs -- name: Common | Create a data container for ECS configuration control - shell: docker run -d -v /opt/storageos/conf -v /opt/storageos/ecsportal/conf -v /etc --name ecs-config --restart=no --entrypoint=/bin/echo {{product_common_name}} "ECS configuration data container" && touch {{host_cache_dir}}/ecs-config.created creates="{{host_cache_dir}}/ecs-config.created" - #- name: Common | Create a data container for ECS configuration control -# docker: -# image: "{{product_common_name}}" -# name: ecs-config -# detach: true -# restart_policy: no -# volumes: -# - /opt/storageos/conf -# - /opt/storageos/ecsportal/conf -# - /etc -# entrypoint: /bin/echo "ECS configuration data container" -# state: present +# shell: docker run -d -v /opt/storageos/conf -v /opt/storageos/ecsportal/conf -v /etc --name ecs-config --restart=no --entrypoint=/bin/echo {{product_common_name}} "ECS configuration data container" && touch {{host_cache_dir}}/ecs-config.created creates="{{host_cache_dir}}/ecs-config.created" + +- name: Common | Create a data container for ECS configuration control + docker: + image: "{{product_common_name}}" + name: ecs-config + detach: true + restart_policy: no + volumes: + - /opt/storageos/conf + - /opt/storageos/ecsportal/conf + - /etc + entrypoint: /bin/echo "ECS configuration data container" + state: present ### Determine any sizing we need to calculate templates # @@ -29,88 +29,116 @@ # ref: https://github.com/EMCECS/ECS-CommunityEdition/issues/74 # Installer should support installing a "full" build on systems with 64GB RAM+ #74 -### Copy templates onto host... +- name: Common | Copy configurations out of configuration data container + command: docker cp ecs-config:{{item.src}} {{item.dest}} + with_items: + - dest: /host/ssm.object.properties + src: /opt/storageos/conf/ssm.object.properties + - dest: /host/common.object.properties + src: /opt/storageos/conf/common.object.properties + - dest: /host/cm.object.properties + src: /opt/storageos/conf/cm.object.properties +# - dest: /host/application.conf +# src: /opt/storageos/ecsportal/conf/application.conf + +## Perform properties edits -- name: Common | Configure SSM Object properties - template: - src: ssm.object.properties.j2 +## SSM Object Properties +# object.freeBlocksHighWatermarkLevels +- name: 'Common | Configure SSM Object properties: FBL-Highwater' + lineinfile: dest: /host/ssm.object.properties + state: present + regexp: '^object\.freeBlocksHighWatermarkLevels=[0-9]*,[0-9]*' + line: 'object.freeBlocksHighWatermarkLevels={{ "100,50" if ansible_local.data_node.ecs_block_size|int < 1000000000000 else "1000,200" }}' -- name: Common | Configure CM Object properties - template: - src: cm.object.properties.j2 - dest: /host/cm.object.properties +# object.freeBlocksLowWatermarkLevels +- name: 'Common | Configure SSM Object properties: FBL-Lowwater' + lineinfile: + dest: /host/ssm.object.properties + state: present + regexp: '^object\.freeBlocksLowWatermarkLevels=[0-9]*,[0-9]*' + line: 'object.freeBlocksLowWatermarkLevels={{ "0,20" if ansible_local.data_node.ecs_block_size|int < 1000000000000 else "0,100" }}' + +## Common Object Properties +# When NumDtPerCoS is set to 128 (>=64GB RAM) then the number of btree +# and journal chunks for write quadruples. This means when node count is +# less than ~4 and total storage space is less than ~4TB, 128 NumDtPerCoS +# can become unwieldy. This templated param should take into account node +# count and total storage space available. https://github.com/EMCECS/ECS-CommunityEdition/issues/301 -- name: Common | Configure Common Object properties - template: - src: common.object.properties.j2 +# object.NumDirectoriesPerCoSForSystemDT +- name: 'Common | Configure Common Object properties: System NumDtPerCoS' + lineinfile: dest: /host/common.object.properties + state: present + regexp: '^object\.NumDirectoriesPerCoSForSystemDT=[0-9]*' + line: 'object.NumDirectoriesPerCoSForSystemDT={{ "128" if ( ansible_memtotal_mb|int > 65536 and ansible_local.data_node.ecs_block_size|int > 1000000000000 and num_data_nodes|int > 3 ) else "32" }}' -#- name: Common | Configure Portal properties -# template: -# src: application.conf.j2 -# dest: /host/application.conf +# object.NumDirectoriesPerCoSForUserDT +- name: 'Common | Configure Common Object properties: User NumDtPerCoS' + lineinfile: + dest: /host/common.object.properties + state: present + regexp: '^object\.NumDirectoriesPerCoSForUserDT=[0-9]*' + line: 'object.NumDirectoriesPerCoSForUserDT={{ "128" if ( ansible_memtotal_mb|int > 65536 and ansible_local.data_node.ecs_block_size|int > 1000000000000 and num_data_nodes|int > 3 ) else "32" }}' -#- name: Common | Configure additional python modules install -# copy: -# src: setup_python_requests -# dest: /host/setup_python_requests -# mode: 775 +## CM Object Properties -#- name: Common | Configure postinstall patch script -# copy: -# src: postinstall_patch -# dest: /host/postinstall_patch -# mode: 775 +# object.MustHaveEnoughResources +- name: 'Common | Configure CM Object properties: Disable Minimum Node Count' + lineinfile: + dest: /host/cm.object.properties + state: present + regexp: '^object\.MustHaveEnoughResources=true' + line: 'object.MustHaveEnoughResources=false' ### Then docker cp them into the configuration container - name: Common | Merge configurations into configuration data container - command: docker cp /host/{{item.src}} ecs-config:{{item.dest}} + command: docker cp {{item.src}} ecs-config:{{item.dest}} with_items: - - src: ssm.object.properties + - src: /host/ssm.object.properties dest: /opt/storageos/conf/ssm.object.properties - - src: cm.object.properties - dest: /opt/storageos/conf/cm.object.properties - - src: common.object.properties + - src: /host/common.object.properties dest: /opt/storageos/conf/common.object.properties + - src: /host/cm.object.properties + dest: /opt/storageos/conf/cm.object.properties +# - src: /host/application.conf +# dest: /opt/storageos/ecsportal/conf/application.conf # - src: postinstall_patch # dest: /etc/cron.hourly/postinstall_patch # - src: setup_python_requests # dest: /etc/cron.hourly/setup_python_requests -# - src: application.conf -# dest: /opt/storageos/ecsportal/conf/application.conf -# Now we shouldn't have to fiddle with VNeST #- name: debug docker create ecs-storageos # debug: # msg: docker create --name ecs-storageos -e SS_GENCONFIG=1 --volumes-from ecs-config -v /ecs:/dae:z -v /ecs:/disks:z -v /host:/host:z -v /var/log/vipr/emcvipr-object:/var/log:z -v /data:/data:z -v {{host_cache_dir}}/ecs_python:/host/ecs_python:z -v {{entropy_source}}:/dev/random:z --net=host {{product_common_name}} && touch {{host_cache_dir}}/ecs-storageos.created creates={{host_cache_dir}}/ecs-storageos.created # Don't add a restart policy because we're using init scripts for that. -- name: Common | Create the ECS StorageOS container - shell: docker create --name ecs-storageos -e SS_GENCONFIG=1 --volumes-from ecs-config -v /ecs:/dae:z -v /ecs:/disks:z -v /host:/host:z -v /var/log/vipr/emcvipr-object:/var/log:z -v /data:/data:z -v {{host_cache_dir}}/ecs_python:/host/ecs_python:z -v {{entropy_source}}:/dev/random:z --net=host {{product_common_name}} && touch {{host_cache_dir}}/ecs-storageos.created creates="{{host_cache_dir}}/ecs-storageos.created" -### And run the ECS container -# ... bbuuuuut the docker module is currently broken, so we rolled it oldschool #- name: Common | Create the ECS StorageOS container -# docker: -# image: "{{product_common_name}}" -# name: ecs-storageos -# detach: true -# net: host -# env: -# SS_GENCONFIG: 1 -# volumes_from: -# - ecs-config -# volumes: -# - /ecs:/dae:z -# - /ecs:/disks:z -# - /host:/host:z -# - /var/log/vipr/emcvipr-object:/var/log:z -# - /data:/data:z -## - "{{host_cache_dir}}/ecs_python:/host/ecs_python:z" -# - "{{entropy_source}}:/dev/random:ro" -# restart_policy: no -# stop_timeout: 60 -# state: present -# +# shell: docker create --name ecs-storageos -e SS_GENCONFIG=1 --volumes-from ecs-config -v /ecs:/dae:z -v /ecs:/disks:z -v /host:/host:z -v /var/log/vipr/emcvipr-object:/var/log:z -v /data:/data:z -v {{host_cache_dir}}/ecs_python:/host/ecs_python:z -v {{entropy_source}}:/dev/random:z --net=host {{product_common_name}} && touch {{host_cache_dir}}/ecs-storageos.created creates="{{host_cache_dir}}/ecs-storageos.created" + +### And run the ECS container +- name: Common | Create the ECS StorageOS container + docker: + image: "{{product_common_name}}" + name: ecs-storageos + detach: true + net: host + env: + SS_GENCONFIG: 1 + volumes_from: + - ecs-config + volumes: + - /ecs:/dae:z + - /ecs:/disks:z + - /host:/host:z + - /var/log/vipr/emcvipr-object:/var/log:z + - /data:/data:z + - "{{entropy_source}}:/dev/random:z" + restart_policy: no + stop_timeout: 300 + state: present + diff --git a/ui/ansible/roles/common_deploy/templates/application.conf.j2 b/ui/ansible/roles/common_deploy/templates/application.conf.j2 deleted file mode 100644 index 3636d65e..00000000 --- a/ui/ansible/roles/common_deploy/templates/application.conf.j2 +++ /dev/null @@ -1,252 +0,0 @@ -# This is the main configuration file for the application. -# ~~~~~ -application.name=ui - -# Application mode -# ~~~~~ -# Set to dev to enable instant reloading and other development help. -# Otherwise set to prod. -application.mode=dev -%prod.application.mode=prod - -# Secret key -# ~~~~~ -# The secret key is used to secure cryptographics functions -# If you deploy your application to several instances be sure to use the same key ! -application.secret=qhzt3bjBeGmOMEKqgjWK11W52dVHpQ04ZGXTl5LbCcsdwGih47ZbPwFamhAarGYd - -# i18n -# ~~~~~ -# Define locales used by your application. -# You can then place localized messages in conf/messages.{locale} files -application.langs=en - -# Date format -# ~~~~~ -date.format=yyyy-MM-dd -# date.format.fr=dd/MM/yyyy - -# Server configuration -# ~~~~~ -# If you need to change the HTTP port, uncomment this (default is set to 9000) -#http.port=9000 -https.port=64443 - -# By default the server listen for HTTP on the wilcard address. -# You can restrict this. -# http.address=127.0.0.1 -# -# Use this if you don't host your Play application at the root of the domain -# you're serving it from. This parameter has no effect when deployed as a -# war, because the path will be handled by the application server. -# http.path=/ - -keystore.file=conf/keystore -%prod.keystore.file=../../storageos/conf/keystore -%prod.certificate.password=changeit -keystore.password=changeit -trustmanager.algorithm=JKS -ssl.KeyManagerFactory.algorithm=SunX509 - -# Session configuration -# ~~~~~~~~~~~~~~~~~~~~~~ -# By default, session will be written to the transient PLAY_SESSION cookie. -# The cookies are not secured by default, only set it to true -# if you're serving your pages through https. -# application.session.maxAge=1h -# application.session.secure=false -application.session.cookie=ECSUI -application.session.secure=true -application.session.httpOnly=true - - -# Session/Cookie sharing between subdomain -# ~~~~~~~~~~~~~~~~~~~~~~ -# By default a cookie is only valid for a specific domain. By setting -# application.defaultCookieDomain to '.example.com', the cookies -# will be valid for all domains ending with '.example.com', ie: -# foo.example.com and bar.example.com -# application.defaultCookieDomain=.example.com - -# JVM configuration -# ~~~~~ -# Define which port is used by JPDA when application is in debug mode (default is set to 8000) -# jpda.port=8000 -# -# Java source level => 1.6, 1.7 or 1.8 (experimental) -#java.source=1.7 - -# Log level -# ~~~~~ -# Specify log level for your application. -# If you want a very customized log, create a log4j.properties file in the conf directory -application.log=DEBUG -%prod.application.log=INFO - -# More logging configuration -application.log.path=/log4j.properties -%prod.application.log.path=/log4j-prod.properties -%prod.application.log.system.out=off - -# Database configuration -# ~~~~~ -# Enable a database engine if needed. -# -# To quickly set up a development database, use either: -# - mem : for a transient in memory database (H2 in memory) -# - fs : for a simple file written database (H2 file stored) -# db.default=mem -# -# To connect to a local MySQL5 database, use: -# db.default=mysql://user:pwd@host/database -# -# To connect to a local PostgreSQL9 database, use: -# db=postgres://user:pwd@host/database -# -# If you need a full JDBC configuration use the following : -# db.default.url=jdbc:postgresql:database_name -# db.default.driver=org.postgresql.Driver -# db.default.user=root -# db.default.pass=secret -# -# Connections pool configuration : -# db.default.pool.timeout=1000 -# db.default.pool.maxSize=30 -# db.default.pool.minSize=10 -# -# If you want to reuse an existing Datasource from your application server, use: -# db.default=java:/comp/env/jdbc/myDatasource -# -# When using an existing Datasource, it's sometimes needed to destroy it when -# the application is stopped. Depending on the datasource, you can define a -# generic "destroy" method : -# db.default.destroyMethod=close - -# JPA Configuration (Hibernate) -# ~~~~~ -# -# Specify the custom JPA dialect to use here (default to guess): -# jpa.default.dialect=org.hibernate.dialect.PostgreSQLDialect -# -# Specify the ddl generation pattern to use. Set to none to disable it -# (default to update in DEV mode, and none in PROD mode): -# jpa.default.ddl=update -# -# Debug SQL statements (logged using DEBUG level): -# jpa.default.debugSQL=true -# -# You can even specify additional hibernate properties here: -# default.hibernate.use_sql_comments=true -# ... -# -# Store path for Blob content -attachments.path=data/attachments - -# Memcached configuration -# ~~~~~ -# Enable memcached if needed. Otherwise a local cache is used. -# memcached=enabled -# -# Specify memcached host (default to 127.0.0.1:11211) -# memcached.host=127.0.0.1:11211 -# -# Or you can specify multiple host to build a distributed cache -# memcached.1.host=127.0.0.1:11211 -# memcached.2.host=127.0.0.1:11212 -# -# Use plain SASL to authenticate for memcached -# memcached.user= -# memcached.password= - -# HTTP Response headers control for static files -# ~~~~~ -# Set the default max-age, telling the user's browser how long it should cache the page. -# Default is 3600 (one hour). Set it to 0 to send no-cache. -# This is only read in prod mode, in dev mode the cache is disabled. -# http.cacheControl=3600 - -# If enabled, Play will generate entity tags automatically and send a 304 when needed. -# Default is true, set it to false to deactivate use of entity tags. -# http.useETag=true - -# Custom mime types -# mimetype.xpi=application/x-xpinstall - -# WS configuration -# ~~~~~ -# Default engine is Async Http Client, uncomment to use -# the JDK's internal implementation -# webservice = urlfetch -# If you need to set proxy params for WS requests -# http.proxyHost = localhost -# http.proxyPort = 3128 -# http.proxyUser = jojo -# http.proxyPassword = jojo - -# Mail configuration -# ~~~~~ -# Default is to use a mock Mailer -mail.smtp=mock - -# Or, specify mail host configuration -# mail.smtp.host=127.0.0.1 -# mail.smtp.user=admin -# mail.smtp.pass= -# mail.smtp.channel=ssl - -# Url-resolving in Jobs -# ~~~~~~ -# When rendering templates with reverse-url-resoling (@@{..}) in Jobs (which do not have an inbound Http.Request), -# ie if sending a HtmlMail, Play need to know which url your users use when accessing your app. -# %test.application.baseUrl=http://localhost:9000/ -# %prod.application.baseUrl=http://www.yourdomain.com/ - -# Jobs executor -# ~~~~~~ -# Size of the Jobs pool -# play.jobs.pool=10 - -# Execution pool -# ~~~~~ -# Default to 1 thread in DEV mode or (nb processors + 1) threads in PROD mode. -# Try to keep a low as possible. 1 thread will serialize all requests (very useful for debugging purpose) -# play.pool=3 - -# Netty pipeline configuration (advanced settings) -# You can default netty settings by overriding the following line. Each handler must be comma separated. -# The last value must be the PlayHandler class (or your own that extends PlayHandler) -# Default values are -# play.netty.pipeline = play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler -# For example, to enable Netty response compression -# play.netty.pipeline = play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler -# For SSL, use the play.ssl.netty.pipeline property -# play.ssl.netty.pipeline = play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.ssl.SslPlayHandler - - -# Open file from errors pages -# ~~~~~ -# If your text editor supports opening files by URL, Play! will -# dynamically link error pages to files -# -# Example, for textmate: -# play.editor=txmt://open?url=file://%s&line=%s - -# Testing. Set up a custom configuration for test mode -# ~~~~~ -#%test.module.cobertura=${play.path}/modules/cobertura -%test.application.mode=dev -%test.db.url=jdbc:h2:mem:play;MODE=MYSQL;LOCK_MODE=0 -%test.jpa.ddl=create -%test.mail.smtp=mock - -# ecs Settings -storageos.api.debugging=true - -# NOTE: This is only to be set for testing. The backend server ip address for dev testing, set the ip to your backend server. -ecs.ipaddr= -# ecs.keystone.enabled=false -ecs.port= -ecs.protocol= -ecs.disableAuth= - -ecs.minimum.node.requirement=1 diff --git a/ui/ansible/roles/common_deploy/templates/cm.object.properties.j2 b/ui/ansible/roles/common_deploy/templates/cm.object.properties.j2 deleted file mode 100644 index 03c9264f..00000000 --- a/ui/ansible/roles/common_deploy/templates/cm.object.properties.j2 +++ /dev/null @@ -1,138 +0,0 @@ -# cc properties -object.isCcEnabled=true -object.DefaultConcurrentCcJobCount=1 -object.CcBatchPauseMills=180000 -object.CcJobPauseMills=10000 -object.CcReadPauseMills=10000 - - -# cmcc properties -object.isCmccEnabled=true -object.CmccBatchPauseMills=180000 - -# ss selector refresh interval when only get partial result -object.SsSelectorRefreshIntervalPartialMillis=60000 -# ss selector refresh interval when get full result -object.SsSelectorRefreshIntervalFullMillis=180000 - -# enforce number of required resources -object.MustHaveEnoughResources=false -object.SuicidePreventionEnabled=true -object.UserNoWriteThreshold=90 -object.ReplicationNoWriteThreshold=90 -object.RecoveryNoWriteThreshold=95 - -# enable/disable xor encoding -object.XorEncodeEnabled=true - -object.XorEncodeConcurrentJobCount=2 -object.XorDecodeConcurrentJobCount=2 -# read buffer count: 2 per encode job, 2 per decode job -object.XorEcReadBufferCount=4 -# write buffer count: 1 per encode job, 1 per decode job -object.XorEcWriteBufferCount=2 -# xor encode task expiration period -object.XorEncodeTaskExpirationSeconds=300 -# xor decode task expiration period -object.XorDecodeTaskExpirationSeconds=1200 - - -# enable/disable ec encoding -object.EcEncodeEnabled=true -object.EcJobPauseMills=1000 -object.EcWorkerConcurrentJobCount=8 -object.CopyChunkEcTaskPostponeMins=2880 - -# enable/disable ec retiring -object.EcRetiringEnabled=true - -# ec encode delay safe guard time window (15 mins) -object.EcTaskDelaySeconds=900 - -# if remove type II chunk in ec scanner -object.RemoveTypeIIChunkInEcScanner=true - -# memory pool size of fragment buffers for each EC scheme when do decode -object.EcDecodeBufferAsyncPoolSize=36 -object.EcDecodeBufferSyncPoolSize=16 - -# enable repair task scanner -object.RepairEnabled=true -object.EcRecoverParallelReadTasks=3 - -# Values for remote chunk caching -object.LruGeoChunkCacheSyncIntervalSeconds=300 -object.LruGeoChunkCacheSyncDelaySeconds=60 -object.GeoChunkCacheWorkerIntervalSeconds=60 -object.NumberOfParallelTasksForGeoChunkCaching=5 -object.PrimeGeoChunkCacheTaskDelaySeconds=30 -object.GeoChunkCachePrimeRetryCount=20 -object.GeoChunkCacheSleepBetweenRemoteBufferReadsMs=100 -# half of the expected 32 CT DTs in 4 node VDC -object.GeoChunkCacheExpectedDTs=16 - -# RPO stats reporting -object.RpoStatReportingIntervalSeconds=60 - -# -# DT memory table properties -# -# Max total table capacity: 768MB -object.DTMaxTotalTableCapacityBytes=402653184 -# Reserved table capacity: 16MB -object.DTReservedTableCapacityBytes=8388608 -# Initial table capacity : 512KB -object.DTInitTableCapacityBytes=262144 -# DT max table capacity : 4M -object.DTTableCapacityBytes=2097152 - -# this limitation after btree flush could handle buffer writer queue full. -object.BPlusTreeWriterCacheSize=100 -# The maximum reader cache size for off-heap size. unit: MB. -object.BPlusTreeReaderOffHeapCacheSizeMB=128 -# The maximum reader cache size for on-heap size. unit: MB. -object.BPlusTreeReaderCacheSizeMB=64 -# The sizes of shared cache pools for writer and prefetch, unit MB. -object.BPlusTreeSharedWriterCachePoolSizeMB=64 -object.BPlusTreeSharedPrefetchCachePoolSizeMB=32 -# whether enable the page prefetch for next keys -object.BPlusTreePrefetchEnabled=false - - -# Values for cm jobs -object.JobSchedulerDefaultExecutors=10 -object.JobSchedulerEcEncodeExecutors=8 -object.JobSchedulerEcRecoverExecutors=8 -object.JobSchedulerGeoExecutors=15 -object.JobSchedulerCcExecutors=1 - -object.JobSchedulerMaxPendingJobs=300 -object.JobSchedulerLowVacancyThreshold=30 - -object.JobSenderQueueSize=50 - -object.ForegroundJobTimeoutMills=60000 -object.EcEncodeJobMaxExecSeconds=3600 -object.EcEncodeJobSafeguardMills=300000 -object.LocalCopyJobMaxExecSeconds=1200 -object.LocalCopyJobSafeguardMills=300000 -object.EcRecoverJobMaxExecSeconds=1200 -object.EcRecoverJobSafeguardMills=300000 -object.ecTaskExpireSeconds = 300 -object.maxECRetryCount = 5 - -# Time window for sweep schunk task -object.SweepChunkTaskTimeoutMillis=300000 -object.SweepChunkTaskExtendedTimeoutMillis=172800000 - -# list gc task -object.ListGcScanTasksMaxSize=5120 - -# memory allocate weight -object.MemoryAllocateTimeoutMilli=60000 -object.SyncRecoveryAllocWeight=8 -object.AsyncRecoveryAllocWeight=2 -object.EcEncodeAllocWeight=1 -object.XORAllocWeight=1 -object.totalDataBufferNumber=8 -object.totalCodeBufferNumber=16 diff --git a/ui/ecsdeploy.py b/ui/ecsdeploy.py index a231e465..c1e5dc1e 100755 --- a/ui/ecsdeploy.py +++ b/ui/ecsdeploy.py @@ -257,7 +257,7 @@ def check(conf): @ecsdeploy.command('bootstrap', short_help='Install required packages on nodes') @pass_conf -def deploy(conf): +def bootstrap(conf): """ Deploys ECS to all data nodes """ diff --git a/ui/etc/config.yml b/ui/etc/config.yml index c1f1c4e8..6d713eee 100644 --- a/ui/etc/config.yml +++ b/ui/etc/config.yml @@ -13,7 +13,7 @@ --- ui: name: ECS Community Edition Install Node - version: 2.2.2 + version: 2.3.0 host_root_dir: /opt/emc/ecs-install state_file: /opt/state.yml deploy_file: /opt/deploy.yml @@ -31,7 +31,7 @@ ui: ffx_sem: /opt/ffx.sem product: name: ECS - version: 3.0.0.1 + version: 3.0.0.2 vendor: Dell EMC flavor: Community Edition slogan: Free and Frictionless diff --git a/ui/etc/release.conf b/ui/etc/release.conf index c3a69f1d..2e4d0956 100644 --- a/ui/etc/release.conf +++ b/ui/etc/release.conf @@ -8,7 +8,7 @@ # it is provided by or on behalf of EMC. release_name="ECS Community Edition" -release_version="3.0.0.1" +release_version="3.0.0.2" release_product="ECS Software" release_artifact="emccorp/ecs-software-3.0.0" release_tag="latest" @@ -31,8 +31,8 @@ repo_name='emccorp' image_name='ecs-install' tag='latest' ver_maj='2' -ver_min='2' -ver_rev='2' +ver_min='3' +ver_rev='0' ver_tag='r' serial=0 diff --git a/ui/resources/docker/ansible.cfg b/ui/resources/docker/ansible.cfg index 0203572f..adebac3a 100644 --- a/ui/resources/docker/ansible.cfg +++ b/ui/resources/docker/ansible.cfg @@ -97,7 +97,7 @@ http_user_agent = ansible-agent # fact_caching = memory gathering = smart fact_caching = jsonfile -fact_caching_connection = /opt/cache/facts +fact_caching_connection = /var/cache/emc/ecs-install/facts fact_caching_timeout = 86400 # retry files diff --git a/ui/setup.py b/ui/setup.py index 27f035c7..3d482774 100755 --- a/ui/setup.py +++ b/ui/setup.py @@ -3,7 +3,7 @@ setup( name='ecsdeploy', - version='2.0.3', + version='2.3.0', packages=find_packages(), scripts=['ui.py', 'ecsdeploy.py', @@ -14,7 +14,7 @@ package_data={'': ['*.yml']}, author="Travis Wichert @EMC", author_email="padthaitofuhot@users.noreply.github.com", - license="Multiple, https://raw.githubusercontent.com/EMCECS/ECS-CommunityEdition/master/license.txt", + license="Proprietary, https://raw.githubusercontent.com/EMCECS/ECS-CommunityEdition/master/license.txt", url='https://github.com/EMCECS/ECS-CommunityEdition', install_requires=[ 'Click',