LHC native Einrichtung

Aus Planet 3DNow! Distributed Computing Wiki
Zur Navigation springen Zur Suche springen

Einrichtung von nativen LHC Anwendungen

Diese Anleitung beschreibt die Installation von Squid und Cerns CVMFS auf Ubuntu Systemen. Analog funktioniert dies dann natürlich auch auf Debian, Mint und anderen verwandten Distributionen. Bei SuSE oder RedHat sind die entsprechenden Paketverwaltungstools (zypper/yast & yum/dnf) zu verwenden, auch kann der Squid Nutzer und dessen Gruppe eine andere sein, zB. "squid" anstelle von "proxy".

Im Rahmen dieser Anleitung nutzen wir beispielhaft das in der Tabelle gelistete Subnetz und eine IP daraus für den Squid Rechner. Dieses ist das LAN-seitige Defaultsubnetz der meisten Fritzboxen. Andere Router nutzen aber zB. das Subnetz 192.168.0.0/24.

LAN Subnetz 192.168.178.0/24
IP des Squid Rechners 192.168.178.4

Wurde die IP des Rechners per DHCP vergeben, sollte diese im Router dem Rechner fest zugewiesen werden, bzw. eine feste IP händisch konfiguriert werden. Sollte das eigene Subnetz vom Beispiel abweichen, ist dieses in der squid.conf, der CVMFS default.local sowie dem BOINC Client anzupassen.

Squid

Squid ist ein cachender Proxyserver, er wird idR. genutzt um Netzinhalte zu cachen und damit den Zugriff auf diese zu beschleunigen. Damit einher geht eine Reduzierung der beanspruchten Netzwerkbandbreite. Es empfiehlt sich ausdrücklich Squid über die distributionseigene Paketverwaltung zu installieren, da diese den Cache automatisch und unterhalb eines eigenen Benutzers startet. Auch Konfigurationen für die automatische Rotation der Squid Log Dateien sind enthalten, diese wachsen also nicht ins unermessliche an.

Installation

Cacheverzeichnis anlegen:

   mkdir -p /var/cache/squid

Squid installieren:

   apt install squid

Squid stoppen:

   service squid stop

Cacheverzeichnis dem Squid Benutzer "proxy" übergeben:

   chown -R proxy:proxy /var/cache/squid

Cache Basisstruktur im Cacheverzeichnis anlegen:

   squid -z 

Hier zwei mal Enter drücken, dieser Schritt geht schnell, gibt aber keine newline zurück, scheint daher zu hängen.

Konfiguration

Die eigentliche Konfiguration der Squidcaches erfolg anhand der im LHC Forum abgelegten Konfiguration. Es lohnt sich diesen Thread nochmals zu überfliegen, da Änderungen an der Beispielkonfiguration nicht mehr im Startbeitrag eingepflegt werden können. Stand 26.02.2020 sieht die /etc/squid/squid.conf folgendermaßen aus:

# Squid configuration for BOINC
# Based on squid version 3.5
# See also: http://www.squid-cache.org/

# Every line starting with "#" represents a comment.

# Define your local hosts/networks here.
# If neither "crunchers" nor "localnet" is set none of your devices will be permitted to use the proxy.
# The examples show the principle.
# For advanced options read the Squid documentation.
#
# Examples:
#
# Either enter a list of IPs representing your computers that are permitted to use the proxy.
# Each IP on a separate line.
# acl crunchers src 198.51.100.20
# acl crunchers src 198.51.100.31
# acl crunchers src 198.51.100.37
# acl crunchers src 198.51.100.42
#
# Or enter complete network ranges.
# Be aware that this may permit devices like printers or TVs that you may not want to use the proxy.
# acl localnet src 192.0.2.0/24
# acl localnet src 198.51.100.0/24
# acl localnet src 192.168.178.0/24


acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 443
acl Safe_ports port 1025-65535	# unregistered ports

acl CONNECT method CONNECT

follow_x_forwarded_for allow localhost
follow_x_forwarded_for deny all


#
# Start of extra section 1
# Requests that need special handling

# worldcommunitygrid doesn't like it if data is taken from the local cache
acl wcg_nocache dstdomain .worldcommunitygrid.org
cache deny wcg_nocache


# if CVMFS uses geoapi, ensure it's checked directly
acl cvmfs_geoapi urlpath_regex -i ^/+cvmfs/+[0-9a-z._~-]+/+api/+[0-9a-z._~-]+/+geo/+[0-9a-z._~-]+/+[0-9a-z.,_~-]+
cache deny cvmfs_geoapi


# avoids polluting the disk cache with typical onetimers, e.g. ATLAS job data
acl boinc_nocache urlpath_regex -i /download[0-9a-z._~-]*/+[0-9a-z._~-]+/+.+
cache deny boinc_nocache


# seriously: do NOT cache that!
# Based on a frontier cache suggestion
acl PragmaNoCache req_header Pragma no-cache
cache deny PragmaNoCache

# End of extra section 1
#

acl Purge method PURGE

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access deny to_localhost

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
# Depending on the definition of "crunchers" or "localnet" above at least 1 of the following lines must be uncommented.
# Examples:
# http_access allow crunchers
http_access allow localnet

http_access allow localhost
# Last "http_access" line.
# Order matters, hence all "http_access" lines following this one will be ignored.
http_access deny all

# http_port
# don't bind it to an IP that is accessible from outside unless you know what you do.
# Examples:
# http_port localhost:3128
#
# This assumes 198.51.100.99 is the external IP of the Squid box
# http_port 198.51.100.99:3128
#
# default setting that binds Squid to all IPs of the Squid box
http_port 3128


# A MUST on Windows.
# If unsure try the the LAN IP of your internet router.
# Avoid using external DNS here.
# On Linux this option shouldn't be necessary
# dns_nameservers 198.51.100.1

max_filedescriptors 4096

# Required OFF for intercepted traffic from LHCb VMs
client_dst_passthru off

# You don't believe this is enough?
# For sure, it is!
cache_mem 256 MB
maximum_object_size_in_memory 24 KB
memory_replacement_policy heap GDSF


# Keep it large enough to store vdi files in the cache.
# See extra section 1 how to avoid onetimers eating up your disk storage.
# min-size=xxx keeps very small files away from your disk
# 20000 limits the disk cache to 20 GB
cache_replacement_policy heap LFUDA
maximum_object_size 6144 MB
cache_dir aufs /var/cache/squid 20000 16 64 min-size=7937

# default=10
logfile_rotate 10

# logformat has to be changed according to your needs and the capabilities of your logfile analyser
logformat my_awstats %>A %lp %ui %un [%tl] "%rm %>ru HTTP/%rv" %>Hs %st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
access_log stdio:/var/log/squid/access.log logformat=my_awstats
#access_log none
strip_query_terms off

coredump_dir none
ftp_user anonymous@

# max_stale 1 week  #default
# extended to be prepared for a project reset
max_stale 37 days

# 1 line is required to avoid the ancient default settings
# be conservative
# don't violate the HTTP standards
refresh_pattern .	0	0%	0

store_avg_object_size 1800 KB

shutdown_lifetime 0 seconds

# booster 1!
collapsed_forwarding on

# booster 2!
client_persistent_connections on
server_persistent_connections on

log_icp_queries off

dns_defnames on
dns_v4_first on

forwarded_for transparent

##### End of squid.conf

Die gibt es nun 2 Möglichkeiten den Squid Zugriff zu erlauben.

Auf Netzwerkbasis, hier wird erst ein localnet definiert und diesem dann der HTTP Zugriff gewährt:

   acl localnet src 192.168.178.0/24
   http_access allow localnet

Alle Rechner des angegebenen Netzwerkes dürfen daraufhin auf den Cache zugreifen.

Alternativ können auch nur einzelne Rechner erlaubt werden, dies kann über folgende Einträge erfolgen:

   acl crunchers src 192.168.178.20
   acl crunchers src 192.168.178.38
   http_access allow crunchers

Nun wird der Squid seine Services nur den Rechnern 192.168.178.20 & 192.168.178.38 ermöglichen.

Den Squid nun mit der neuen Konfiguration starten:

   service squid start

Ob der Squid genutzt wird, lässt sich einfach über sein Zugriffslog verfolgen:

   tail -f /var/log/squid/access.log

Startet nach abgeschlossener Konfiguration eine neue native WU, kommen hier innerhalb der ersten Minuten jeweils hunderte bis tausende Einträge hinzu.

CVMFS

Das CernVM File System ist ein http basiertes read-only Netzwerkdateisystem. Es wird genutzt um Software innerhalb der High Performance Computing (HPC) Umgebung des CERN zu verteilen. Daten im CVMFS werden erst bei Bedarf geladen und können lokal gecached werden.

Installation

Cern CVMFS Paketinformationen ziehen, installieren und den Download wieder entfernen:

 wget https://ecsft.cern.ch/dist/cvmfs/cvmfs-release/cvmfs-release-latest_all.deb
 sudo dpkg -i cvmfs-release-latest_all.deb
 rm -f cvmfs-release-latest_all.deb

CVMFS installieren:

 sudo apt-get update
 sudo apt-get install cvmfs cvmfs-config-default

CVMFS Basissetup:

 sudo cvmfs_config setup
 sudo wget https://lhcathome.cern.ch/lhcathome/download/default.local -O /etc/cvmfs/default.local
 sudo cvmfs_config reload

Die folgenden Schritte sind notwendig um die nativ laufenden WUs pausieren und wieder aufwecken zu können. Hierzu wird eine control group (cgroup) erstellt, die dieses ermöglicht:

 sudo sed -i '$ a\kernel.unprivileged_userns_clone = 1' /etc/sysctl.conf
 sudo sysctl -p
 sudo wget http://lhcathome.cern.ch/lhcathome/download/create-boinc-cgroup -O /sbin/create-boinc-cgroup
 sudo wget http://lhcathome.cern.ch/lhcathome/download/boinc-client.service -O /etc/systemd/system/boinc-client.service
 sudo echo "MemoryAccounting=true" >> /etc/systemd/system/boinc-client.service
 sudo echo "IOAccounting=true" >> /etc/systemd/system/boinc-client.service
 sudo echo "BlockIOAccounting=true" >> /etc/systemd/system/boinc-client.service
 sudo echo "CPUAccounting=true" >> /etc/systemd/system/boinc-client.service
 
 sudo systemctl daemon-reload
 sudo systemctl restart boinc-client 


Konfiguration

Über die CVMFS Konfigurationsdatei default.local kann der Cache nutzbar gemacht werden. CVMFS_HTTP_PROXY ist auskommentiert und muss noch angepasst werden:

 # CVMFS_HTTP_PROXY="auto;DIRECT"
 =>
 CVMFS_HTTP_PROXY="http://192.168.178.4:3128;DIRECT"

Nach dem Abspeichern einmal die Konfiguration neu einlesen:

 cvmfs_config reload

Das Kommando cvmfs_config stat zeigt jetzt s1cern-cvmfs.openhtc.io anstatt cvmfs-stratum-one.cern.ch als nächstes Cache level, zB. für ATLAS sieht das folgendermaßen aus:

 # /usr/bin/cvmfs_config stat atlas.cern.ch
 VERSION PID UPTIME(M) MEM(K) REVISION EXPIRES(M) NOCATALOGS CACHEUSE(K) CACHEMAX(K) NOFDUSE NOFDMAX NOIOERR NOOPEN HITRATE(%) RX(K) SPEED(K/S) HOST PROXY ONLINE
 2.8.0.0 3963658 1 24568 79806 2 1 3942964 4194305 0 130560 0 0 n/a 530 186 http://s1cern-cvmfs.openhtc.io/cvmfs/atlas.cern.ch http://192.168.178.4:3128 1

BOINC Client

Die Proxyeinstellungen können sowohl über die GUI als auch direkt in der cc_config.xml gesetzt werden. Eine der beiden Methoden ist ausreichend.

BOINC Manager

Im BOINC Manager via Optionen -> Sonstige Einstellungen... den Tab HTTP Proxyserver auswählen.

Haken setzen bei "Über HTTP Proxyserver verbinden", dann Adresse und Port befüllen:

  Adresse:     192.168.178.4
  Port:        3128

cc_config.xml

<cc_config>
 <options>
   <proxy_info>
     <http_server_name>192.168.178.4</http_server_name>
     <http_server_port>3128</http_server_port>
   </proxy_info>
 </options>
</cc_config>

Anschließend die cc_config über boinccmd neu einlesen:

boinccmd --read_cc_config