Upgrading Triton - Das registrar Problem

Wie viele vermutlich nicht wissen, liefert MNX Solutions alle acht Wochen ein neues Release für Triton aus - alle zwei Wochen kommt ein neues Release für SmartOS. Die Schritte, die für ein Update durchgeführt werden müssen, hatte ich schonmal unter triton-update-all dokumentiert. Ich führe diese Updates jeweils kurz nach erscheinen in den vorhandenen Triton-Setups durch.

Ein kritischer Punkt bei diesen Upgrades ist das automatische Aktualisieren des Manatee-Clusters, der quasi die "source of truth" für die gesamte Umgebung darstellt. Wenn dieser Cluster nicht verfügbar ist, ist es für Benutzer nicht mehr möglich, Instanzen zu starten und die Verwaltung der Triton-Umgebung ist auch schwieriger, weil verschiedene Tools sich darauf verlassen. Gleichzeitig kann man sich vorstellen, dass es keine triviale Aufgabe ist, so einen Dienst, der sich wiederum auf auf andere Dienste abstützt, verlässlich automatisch zu aktualisieren.

Es ist deshalb erforderlich, möglichst schnell zu erkennen was das Problem ist, wenn das Upgrade von Manatee scheitert. Zu den Situationen, die ich schon kannte, hat sich jetzt das "registrar Problem" hinzugesellt. In meinen Augen wird es durch "langsame" Plattenkonfigurationen hervorgerufen.

Um das Problem zu identifizieren, würde ich zunächst den Status des Manatee-Dienstes prüfen. Das macht man am Besten, in dem man sich in die manatee-Zone auf dem Headnode einloggt und dort den Status des Clusters abfragt. So sollte ein "gesunder" Manatee-Cluster aussehen:

[root@headnode (de-gt-2) ~]# sdc-login manatee0
[Connected to zone '6589d30f-5fe7-4e79-899e-c6b0f540b9c0' pts/11]
Last login: Tue Dec 17 21:08:42 on pts/11
 =  J O Y E N T  =
 
    sdc-postgres (release-20191205-20191205T011218Z-g339b449)
    https://github.com/joyent/sdc-manatee.git
    triton-origin-multiarch-15.4.1@1.0.1
 
[root@6589d30f-5fe7-4e79-899e-c6b0f540b9c0 (de-gt-2:manatee0) ~]# manatee-adm show -v
zookeeper:   10.65.68.9
cluster:     sdc
generation:  39 (83/AE56B318)
mode:        normal
freeze:      not frozen
 
ROLE     PEERNAME                             IP             
primary  5e0a09bb-6f04-4ffe-aeb7-ac1cb23b93ed 10.65.68.51    
sync     a0ea1808-e141-4d40-9c43-a145e1e7aab6 10.65.68.52    
async    6589d30f-5fe7-4e79-899e-c6b0f540b9c0 10.65.68.14    
 
ROLE     PEER     PG   REPL  SENT          FLUSH         REPLAY        LAG 
primary  5e0a09bb ok   sync  83/AF299168   83/AF299168   83/AF299168   -    
sync     a0ea1808 ok   async 83/AF299168   83/AF299168   83/AF299168   0m13s
async    6589d30f ok   -     -             -             -             0m13s
[root@6589d30f-5fe7-4e79-899e-c6b0f540b9c0 (de-gt-2:manatee0) ~]#

Wenn wir das "registrar Problem" haben, ist die Wahrscheinlichkeit hoch, dass das Cluster "frozen" ist - was dann bei "freeze" abzulesen wäre (ansonsten sieht der Output aber aus wie oben - deswegen genau lesen!).

Eine Methode, um abgebrochene Upgrades wieder aufzunehmen ist: Einfach nochmal anstossen. Das klappt aber nicht, wenn wir das "registrar Problem haben":

[root@headnode (de-gt-2) ~]# sdcadm update --all -y --force-data-path
sdcadm update: error (InternalError): Precondition failed: no connection moray
[root@headnode (de-gt-2) ~]#

Der nächste logische Schritt ist also das Manatee-Cluster mit manatee-adm unfreeze aus dem Winterschlaf zu holen und die moray-Instanzen zu überprüfen. Zunächst mal sollten alle Zonen im Status running sein:

[root@headnode (de-gt-2) ~]# sdc-role list |grep -i moray
moray0       headnode         6b64bee0-7c14-4339-9131-3d53a1950894  8192       running            moray     10.65.68.15
moray1       hh24-gts2-de28   81dcfe12-788f-4c97-bfae-1959e7e77e9e  8192       running            moray     10.65.68.54
moray2       hh24-gts2-de27   0d8632c3-204e-4cd0-a03a-40918fbf1fc4  8192       running            moray     10.65.68.55

Ausserdem sollten alle Dienste in diesen Zonen laufen:

[root@headnode (de-gt-2) ~]# sdc-login moray2
Password:
[Connected to zone '0d8632c3-204e-4cd0-a03a-40918fbf1fc4' pts/2]
Last login: Tue Dec 17 19:54:27 on pts/2
 =  J O Y E N T  =

    mantav2-moray (release-20191205-20191205T010104Z-gb691026)
    https://github.com/joyent/moray.git
    triton-origin-multiarch-15.4.1@1.0.1
 
[root@0d8632c3-204e-4cd0-a03a-40918fbf1fc4 (de-gt-2:moray2) ~]# svcs -x
[root@0d8632c3-204e-4cd0-a03a-40918fbf1fc4 (de-gt-2:moray2) ~]# svcs registrar
STATE          STIME    FMRI  
online         19:46:08 svc:/manta/application/registrar:default
[root@0d8632c3-204e-4cd0-a03a-40918fbf1fc4 (de-gt-2:moray2) ~]#

Wichtig dabei: svcs -x sollte nichts ausgeben (demnach sollte kein Dienst enabled sein aber nicht laufen oder andere enabled Dienste davon abhalten zu laufen). Der nächste Schritt wäre, sicherzustellen, dass der registrar Dienst läuft (so wie oben zu sehen). Ist es nicht der Fall, muß der Dienst mit svcadm enable registrar wieder "eingeschaltet" werden. Ist dies auf allen moray-Instanzen geschehen, ist das "registrar Problem" behoben und man kann das Upgrade nochmal starten. Dies wird dann dort aufgenommen, wo es abgebrochen war.