Update unified mirror spec to support AFS

Change-Id: I9c82008675424d06b6cb19369338a626e693326b
This commit is contained in:
James E. Blair 2016-01-28 09:15:57 -08:00
parent 7e191d1889
commit 0315314956
1 changed files with 30 additions and 15 deletions

View File

@ -41,6 +41,15 @@ paths similar to the following:
* http://mirror.<region>.<provider>.openstack.org/npm
* http://mirror.<region>.<provider>.openstack.org/gem
In order to reduce the complexity and storage requirements of the
mirror hosts, the mirror content will be written into AFS. When
mirror updates are performed, the AFS volume hosting the mirror will
be "released" (that is, replicated into fault-toleranet read-only
volumes). Each of the mirror hosts will serve the same content from
those read-only volumes, but will be configured with a substantial
local cache so that ultimately most content will be served directly
from local disk.
Alternative 1: Per-language mirror hosts
----------------------------------------
@ -94,17 +103,18 @@ rename. Goal: http://mirror.<region>.<cloud>.openstack.org/pypi
1. New hosts will be provisioned for each region, and DNS records created,
named mirror.<region>.<cloud>.openstack.org. These should all run ubuntu
trusty.
2. Existing bandersnatch storage directories should be rsync'ed to the new
host. This should be done while the bandersnatch services have been
temporarily disabled.
3. The bandersnatch cache directory on the new mirrors should be moved from
/srv/static/mirror to /srv/static/pypi.
2. A new host, mirror-update.openstack.org will be provisioned to run
the bandersnatch process. It will write into AFS, and upon the
completion of each successful run, it will release the volume to
read-only replicas.
3. Each mirror server will be configured to serve files out of AFS
via the read-only replica path.
4. The existing pypi_mirror.pp manifest should defer its vhost creation,
and data directory location, to its including manifest.
5. A new mirror.pp manifest should be created that provides the new data
directory to pypi_mirror.pp, hosted at /pypi. This should be used by an
entry in site.pp used by mirror.<region>.<cloud>.openstack.org.
6. Once our new mirrors have had a successful puppet run, they should be
6. Once our new mirror have had a successful puppet run, they should be
manually tested to ensure they function correctly.
7. Nodepool slaves should be instructed to use the new mirror urls.
8. Builds should be manually checked to ensure that they are using the new
@ -120,17 +130,18 @@ mirror. Goal: http://mirror.<region>.<cloud>.openstack.org/wheel
1. A new wheel_mirror.pp manifest should be added to mirror.pp to provide room
for our built wheels, hosted at /wheel.
2. A wheel build job should be created, to build our wheels from the
global upper-constraint requirements.
3. A wheel distribution job should be created to rsync those wheels to our
wheel mirror directories.
global upper-constraint requirements and write the output into AFS.
3. A volume release job should be created to release the data to
read-write AFS volumes if the wheel update is successful.
4. Our nodepool slaves should be instructed to use the new wheel mirror in
addition to our pypi mirror.
The following work will need to be completed in order to create an npm mirror.
Goal: http://mirror.<region>.<cloud>.openstack.org/npm
1. A new npm_mirror.pp manifest should be added to mirror.pp, to provide an
npm mirror replication service (using registry-static) hosted at /npm.
1. A new npm_mirror.pp manifest should be added to mirror_update.pp,
to provide an npm mirror replication service (using
registry-static) hosted in AFS.
2. NodeJS and NPM will be added to our nodepool slaves. This is to simplify the
next step.
3. The nodepool slaves should be instructed to use the new npm mirror, where
@ -139,8 +150,9 @@ Goal: http://mirror.<region>.<cloud>.openstack.org/npm
The following work will need to be completed in order to create a gem mirror.
Goal: http://mirror.<region>.<cloud>.openstack.org/gem
1. A new rubygems_mirror.pp manifest should be added to mirror.pp, to provide
a rubygems replication service (using rubygems-mirror) hosted at /gem.
1. A new rubygems_mirror.pp manifest should be added to
mirror_update.pp, to provide a rubygems replication service (using
rubygems-mirror) hosted in AFS.
2. The nodepool slaves should be instructed to use the new gem mirror, where
necessary.
@ -154,8 +166,11 @@ Servers
* New hosts will be provisioned for each region, named
mirror.<region>.<cloud>.openstack.org. These should all run trusty.
* 500GB of disk space will need to be provided for each mirror type
(Estimates for existing mirrors range from 200GB to 300GB).
* 100-200GB of disk space will need to be provided for an AFS cache.
The AFS cache size will be set at 50GB. For mirrors where Cinder is
available, a 100GB volume should be provisioned to start with.
Where Cinder is not available, a flavor with 200GB of local storage
should be used.
DNS Entries
-----------