You are browsing a read-only backup copy of Wikitech. The live site can be found at wikitech.wikimedia.org

Difference between revisions of "Portal:Toolforge/Admin/Services"

From Wikitech-static
Jump to navigation Jump to search
imported>Arturo Borrero Gonzalez
(→‎Puppet: remove references to updatetools)
imported>Arturo Borrero Gonzalez
(→‎Addressing, DNS and proxy: refresh statementon deb-tools.wmcloud.org)
 
(2 intermediate revisions by 2 users not shown)
Line 7: Line 7:
== Servers ==
== Servers ==


Usually a couple of VM instances:
Usually a VM with a cinder volume to store repository data.
 
* [https://tools.wmflabs.org/openstack-browser/server/tools-sge-services-03.tools.eqiad.wmflabs tools-sge-services-03]
* [https://tools.wmflabs.org/openstack-browser/server/tools-sge-services-04.tools.eqiad.wmflabs tools-sge-services-04]
 
They are setup following the 'cold-standby' approach. There is only one server active, while the other is just waiking to manually take over in case of disaster or maintenance.


== Addressing, DNS and proxy ==
== Addressing, DNS and proxy ==


There is a proxy called '''deb-tools.wmflabs.org''' that should point to the active server. '''TODO:''' elaborate a bit more about the purpose of this proxy.
There is an horizon web proxy called '''deb-tools.wmcloud.org''' that should point to TCP/80 on the server. This allows to build docker images using toolforge internal packages.


Other than that, servers don't have any special DNS or adressing. The don't have floating IPs.
Other than that, servers don't have any special DNS or adressing. The don't have floating IPs.


Worth noting that these servers in the '''tools''' cloudvps project use to offer services for the '''toolsbeta''' project as well.
Worth noting that these servers in the '''tools''' cloudvps project may offer services for the '''toolsbeta''' project as well.


== Puppet ==
== Puppet ==


The main role in use is '''role::wmcs::toolforge::services''', which in turn uses several important puppet profiles related to the service role itself:
The main role in use is '''role::wmcs::toolforge::services'''.
<pre>
profile::toolforge::services::basic
profile::toolforge::services::aptly
</pre>
(some additional profiles are included in the role, but aren't specific for services nodes).
 
The active/standby assignations are controlled by 2 main hiera keys:
 
<pre>
profile::toolforge::services::active_node: tools-sge-services-03.tools.eqiad.wmflabs
profile::toolforge::services::standby_node: tools-sge-services-04.tools.eqiad.wmflabs
</pre>
 
Also, clients of the aptly repo know about the active server by means of this hiera key:
<pre>
role::aptly::client::servername: tools-sge-services-03.eqiad.wmflabs
</pre>
 
'''NOTE:''' in new toolforge-stretch, the puppet role is ''role::wmcs::toolforge::services'' and the relevant hiera key is ''profile::toolforge::services::active_node''.


== updatetools ==
== updatetools ==
Line 55: Line 31:
This script runs, as a service, from the active <code>tools-services-*</code> server, and wakes up every 120 seconds to populate the tables with new data.
This script runs, as a service, from the active <code>tools-services-*</code> server, and wakes up every 120 seconds to populate the tables with new data.


The database in use is <code>tools.labsdb</code> which is <code>tools.db.svc.eqiad.wmflabs</code>.
The database in use is <code>tools.labsdb</code> which is <code>tools.db.svc.eqiad1.wikimedia.cloud</code>.


== apt repository ==
== apt repository ==
Line 64: Line 40:
We usually have one repository per operating system and project, i.e:
We usually have one repository per operating system and project, i.e:
* stretch-tools
* stretch-tools
* jessie-tools
* buster-tools
* trusty-tools
* stretch-toolsbeta
* stretch-toolsbeta
* buster-toolsbeta


Quick example of packages being stored here are:
Quick example of packages being stored here are:
Line 76: Line 52:
(among others)
(among others)


The repository data, located at '''/srv/packages''' is synced by means of '''rsync''' from the active node to the standby node '''every 10 minutes'''.
The repository data, located at '''/srv/packages''' is stored in a mounted cinder volume.


= Admin operations =
= Admin operations =
Line 92: Line 68:
* aptly repos are present, and they contain packages, i.e: <code>sudo aptly repo list</code> and <code>sudo aptly repo show --with-packages=true stretch-tools</code>
* aptly repos are present, and they contain packages, i.e: <code>sudo aptly repo list</code> and <code>sudo aptly repo show --with-packages=true stretch-tools</code>
* disk is not filled, i.e: <code>df -h /</code>
* disk is not filled, i.e: <code>df -h /</code>
* rsync is syncing repo data: <code>sudo systemctl status rsync.service</code>


== failover ==
== failover ==


We don't have a specific failover mechanism rather than updating hiera keys, pointing the DNS name to the standby server and running puppet everywhere.
We don't have a specific failover mechanism rather than building a new VM and re-attach the cinder volume.


Care should be taken to don't loss aptly repo data, since generating it from scratch can take some time. That's why there is a rsync job to sync data between them.
Care should be taken to don't loss aptly repo data, since generating it from scratch can take some time.


= History =
= History =


This was heavily remodeled when migrating the grid to SGE and to Stretch. Previous to the migration, the services nodes used to store [[Help:Toolforge/Grid#Bigbrother_(Deprecated)|Bigbrother (deprecated)]], and [[Portal:Toolforge/Admin/Webservicemonitor|webservicemonitor (moved to cron servers)]].
This was heavily remodeled when migrating the grid to SGE and to Stretch. Previous to the migration, the services nodes used to store [[Help:Toolforge/Grid#Bigbrother_(Deprecated)|Bigbrother (deprecated)]], and [[Portal:Toolforge/Admin/Webservicemonitor|webservicemonitor (moved to cron servers)]].
Again, when migrating from Stretch to Buster, the 2 VM approach was dropped in favor of storing the data in a cinder volume, see https://phabricator.wikimedia.org/T278354.


= See also =
= See also =
* [[Portal:Toolforge/Admin]]
* [[Portal:Toolforge/Admin]]
* [[Portal:Toolforge/Admin/Webservice]]
* [[Portal:Toolforge/Admin/Webservice]]

Latest revision as of 15:16, 30 March 2021

This page contains information regarding the services that are provided internally to Toolforge nodes.

Deployment components and architecture

Information on how the setup is deployed, and the different components.

Servers

Usually a VM with a cinder volume to store repository data.

Addressing, DNS and proxy

There is an horizon web proxy called deb-tools.wmcloud.org that should point to TCP/80 on the server. This allows to build docker images using toolforge internal packages.

Other than that, servers don't have any special DNS or adressing. The don't have floating IPs.

Worth noting that these servers in the tools cloudvps project may offer services for the toolsbeta project as well.

Puppet

The main role in use is role::wmcs::toolforge::services.

updatetools

updatetools is a Python script that updates tools and maintainers information to be used by tools.wmflabs.org (source code available at tool-admin-web).

It gets a list of tools (accounts starting with "tools."), reads their .description and toolinfo.json files and adds it to the tools table in the toollabs_p database. Maintainer information is retrieved by getting all users that belong to the tool's group and using getpwnam() to retrieve user information, which then gets added to the users table.

This script runs, as a service, from the active tools-services-* server, and wakes up every 120 seconds to populate the tables with new data.

The database in use is tools.labsdb which is tools.db.svc.eqiad1.wikimedia.cloud.

apt repository

One of the main purposes of this service is to host Debian packages for other servers by means of aptly.

Repositories are declared in puppet, but packages should be added to the aptly repository by hand.
We usually have one repository per operating system and project, i.e:

  • stretch-tools
  • buster-tools
  • stretch-toolsbeta
  • buster-toolsbeta

Quick example of packages being stored here are:

(among others)

The repository data, located at /srv/packages is stored in a mounted cinder volume.

Admin operations

Information on maintenance and administration of this setup.

managing aptly repo

Is managed as a standard aptly repo.

health

Some interesting bits to check if you want to know the status/health of the server.

  • aptly repos are present, and they contain packages, i.e: sudo aptly repo list and sudo aptly repo show --with-packages=true stretch-tools
  • disk is not filled, i.e: df -h /

failover

We don't have a specific failover mechanism rather than building a new VM and re-attach the cinder volume.

Care should be taken to don't loss aptly repo data, since generating it from scratch can take some time.

History

This was heavily remodeled when migrating the grid to SGE and to Stretch. Previous to the migration, the services nodes used to store Bigbrother (deprecated), and webservicemonitor (moved to cron servers).

Again, when migrating from Stretch to Buster, the 2 VM approach was dropped in favor of storing the data in a cinder volume, see https://phabricator.wikimedia.org/T278354.

See also