Blogs

[PowerHA] Wprowadzenie do ROHA

By Michal Wiktorek posted Mon August 05, 2024 04:42 PM

  

English version of this article: https://community.ibm.com/community/user/power/blogs/michal-wiktorek/2024/07/04/powerha-roha?CommunityKey=32520692-50a7-4829-91c5-038ab4df00b1

Tekst został utworzony dla społeczności Poland Power User Group

Wstęp

Zapewnienie HA (High Availability) dla działania aplikacji, wymaga stworzenia warunków do tego, by w razie awarii lub planowanej niedostępności, było możliwe jej uruchomienie na innych zasobach wirtualnych/sprzętowych (mówiąc oczywiście w dużym uproszczeniu).
Klastry IBM PowerHA SystemMirror (odnoszę się do PowerHA for AIX), pozwalają przede wszystkim przełączać/współdzielić zasoby pomiędzy węzłami klastra, jednak różne zasoby wymagają różnego podejścia. Niektóre z nich są czysto programowe, a inne są ściśle powiązane ze sprzętem.
Rodzajów aplikacji, konfiguracji, jak i możliwych scenariuszy dla minimalizowania ich downtime'u jest wiele, jednak w tym tekście chciałbym się odnieść do klasycznego przypadku, gdzie aplikacja potrzebuje do działania:
  • komunikacji sieciowej (przenaszalny adres IP)
  • zasobów dyskowych 
  • systemu operacyjnego (każdy węzeł klastra to osobny system AIX)
  • skrypty do uruchomienia/zatrzymania aplikacji
  • RAM
  • CPU
 
Zasoby takie jak adres IP, dostęp do Volume Group/Filesystemów są konfigurowalne na poziomie systemu operacyjnego, ale ilość CPU oraz RAM wymaga ingerencji w konfigurację LPAR-a, zazwyczaj za pośrednictwem konsoli HMC.
 
W idealnym świecie, wszystkie węzły klastra mają przypisaną taką samą ilość rdzeni CPU i pamięci RAM, a o licencje na oprogramowanie nie trzeba się martwić.
W realnym świecie, zdarza się że węzły klastrowe z różnych powodów nie dysponują takimi samymi zasobami, a licencje na oprogramowanie są zależne od ilości przypisanych CPU na każdym węźle klastra, na którym znajdą się np. pliki binarne oprogramowania. Koszty licencji potrafią być ogromne, dlatego też zdarza się w różnych firmach i środowiskach, że węzły zapasowe dysponują znacznie ograniczonymi zasobami CPU i RAM, w stosunku do węzła podstawowego.
Jakie są tego konsekwencje?
Klient zapłacił za licencję na produkt PowerHA SystemMirror, po to żeby mieć wysoką dostępność i automatyzację przełączenia aplikacji, więc teoretycznie w razie awarii podstawowego węzła, aplikacja powinna automatycznie uruchomić się na jednym z węzłów zapasowych -  w końcu po to się płaci za PowerHA.
W praktyce klaster przełączy zasoby na węzeł zapasowy, uruchomi aplikację... i w najlepszym przypadku uruchomi się na minimalnych zasobach z możliwą degradacją wydajności, a w najgorszym może nie uruchomić się wcale. Niestety w różnych przypadkach uruchomienie aplikacji może czekać na administratora, który doposaży w zasoby węzeł zapasowy, (może dodatkowo też aktywuje kody CoD) i w zależności od aplikacji/konfiguracji może być wymagany jej restart by działała z nową ilością zasobów. W efekcie mamy do czynienia z rozwiązaniem, które nie spełnia głównych założeń, ale nie jest to wina samego produktu tylko oszczędności, decyzji biznesowych, lub po prostu niedopatrzenia.
 
Rozwiązaniem dla takiej sytuacji jest automatycznie ustawienie wymaganych zasobów dla węzła zapasowego w razie przełączenia klastra. 
Można byłoby do tego celu napisać dedykowane skrypty/playbooki, ale PowerHA ma już do tego celu gotową funkcjonalność, czyli właśnie ROHA.

Czym jest ROHA?

ROHA (Resource Optimized High Availability) jest funkcjonalnością klastrów PowerHA, która pozwala na dynamiczną alokację i dealokację zasobów takich jak CPU i RAM, przypisanych do Application Controllera dla Resource Groupy.
Dokumentacja do ROHA jest oczywiście dostępna na stronach IBM: https://www.ibm.com/docs/en/powerha-aix/7.2?topic=cluster-resources-optimized-high-availability


Klaster PowerHA w momencie przełączenia lub uruchomienia/zatrzymania Resource Groupy łączy się do konsoli HMC obsługującej dane LPAR-y (węzły klastra) za pomocą ssh lub REST API i dokonuje dynamicznej alokacji zasobów LPAR-a.

Zasoby CPU/RAM aplikacji działającej w ramach PowerHA są w tym przypadku przydzielone w ramach ustawień Application Controllera, a z kolei Application Controller jest przypisany do Resource Group.

Zalety ROHA

  • Automatyzuje zarządzanie zasobami przypisanymi do LPARów będącymi węzłami klastra PowerHA i tym samym zmniejsza konieczność interwencji administratora w ramach przełączenia klastra

  • Pozwala na redukcję wymaganych zasobów CPU i RAM platformy Power

  • Może znacząco zmniejszyć ilość wymaganych licencji dla aplikacji/bazy

  • Umożliwia aktywację/deaktywację zasobów CPU/RAM ramach CoD oraz Power Enterprise Pool

Minusy ROHA

  • konieczność pilnowania przypisania LPARów do odpowiednich konsoli HMC w konfiguracji ROHA

  • utrzymywanie dedykowanych kont i uprawnień dla ROHA na konsolach HMC może być problematyczne, zwłaszcza w przypadku migracji LPM
Osobiście uważam że ta funkcjonalność jest niezwykle użyteczna, jednak by dobrze zrozumieć działanie ROHA, dostępna dokumentacja nie była dla mnie wystarczająca.
Zrozumienie niektórych założeń działania ROHA wymagało ode mnie prowadzenia testów oraz śledzenia logów systemowych. Pewnych informacji nie doszukałem się w dokumentacji, dlatego postanowiłem się podzielić nimi w ramach tego tekstu.

Sposób kalkulacji zasobów

Sądzę dla wielu administratorów lekkim zaskoczeniem podczas testowania, może być to, że po przełączeniu Resource Group, docelowy LPAR nie otrzymał dokładnie takich zasobów jakie zostały ustawione w konfiguracji ROHA. Z czego to wynika?

Co prawda nie znalazłem jednoznacznego wyjaśnienia tej kwestii na stronach IBM, ale sposób kalkulacji można wywnioskować śledząc log klastrowy hacmp.out, lub zaglądając bezpośrednio do skryptu /usr/es/sbin/cluster/events/utils/clcomputeroha, który jest wykorzystywany przez PowerHA.

Warto tutaj zwrócić uwagę że sposób kalkulacji może różnić się w zależności od wersji klastra PowerHA. W tym tekście odnoszę się do wersji 7.2.8. 

W konfiguracji Application Controllera, można zauważyć ustawienie "Use desired level from the LPAR profile", które pozwala na to by klaster odnosił się do ustawienia Desired z profilu LPAR-a (może to się wiązać z późniejszymi zawiłościami w kontroli ilości zasobów, w przypadku ręcznej modyfikacji ustawień CPU w ramach DLPAR i nadpisania profilu LPAR-a ustawieniami Current).

Jeśli ta opcja jest ustawiona na No (ustawienie domyślne), brana jest wartość Minimum z profilu LPAR-a.

                                                      [Entry Fields]
Application Controller Name                         cl_app1_script

Use desired level from the LPAR profile             No                
Optimal amount of gigabytes of memory              [30.0]

Optimal number of dedicated processors             [0]                

Optimal number of processing units                 [0.20]
Optimal number of virtual processors               [2]  

Osoby które mają do czynienia z systemami AIX lub platformą wirtualizacyjną PowerVM, raczej wiedzą o tym, że profil LPAR-a oprócz aktualnie przypisanych zasobów CPU oraz RAM, ma także właśnie takie właściwości jak Minimum, czyli:

  • Minimum Processing Units (Entitled Capacity, używane w przypadku procesorów Shared)
  • Minimum Processors (Dedicated lub Shared)
  • Minimum Memory

Są to minimalne zasoby które są wymagane do tego, by LPAR mógł zostać uruchomiony. W praktyce, dość rzadko się je modyfikuje, a administratorzy nie muszą przywiązywać do nich większej uwagi. Parametry MINIMUM LPAR-a są uwzględniane w kalkulacji zasobów w ROHA, co na pierwszy rzut oka może się wydawać dziwne, jednak w mojej ocenie ma to sens.

W mojej interpretacji, Minimum, to wartość która powinna wystarczyć dla działania systemu operacyjnego (warto tu też uwzględnić również obciążenie generowane przez działanie agentów monitoringu, skanowania bezpieczeństwa, automatyzacji, backupu itp). 

Do ilości zasobów potrzebnych przez system operacyjny, w momencie uruchomienia Resource Group i Application Server, następuje dodanie zasobów wymaganych przez aplikację działającą w ramach klastra.

Przykładowo, jeżeli aplikacja "XYZ" wymaga 10 GB RAM, to zasoby LPAR-a na którym zostanie uruchomiona, nie będą równe 10 GB, ale 10 GB + RAM dla systemu operacyjnego AIX (czyli wartość MINIMUM z profilu LPAR-a).

Co jeśli aktualnie przypisane zasoby węzła klastrowego na którym ma zostać podniesiona Resource Group, wynoszą dokładnie tyle, lub więcej niż wynika z konfiguracji ROHA?

Na to pytanie chciałbym odpowiedzieć poprzez prezentację poniższych przykładów.

Przykłady kalkulacji dla różnych scenariuszy

  • Przypadek gdy suma wartości dla aplikacji oraz minimalnych wartości profilu LPARa (APP + MINIMUM_PROFILE) są większe niż aktualnie przypisane zasoby do LPARa.
    Zasoby zostaną dynamicznie przydzielone

Typ

Wartości MINIMUM w profilu LPARa

Wartości ALLOCATED (aktualnie przypisane)

Wartości w konfiguracji ROHA dla Application Controllera (APP)

Wynik - Compute ROHA RAM/CPU

Entitled Capacity

0.1

1

1.6

1.7 EC

Virtual Processor

1

2

4

5 vCPU

Memory

6 GB

8

30 GB

36 GB

  • Przypadek gdy suma wartości dla aplikacji oraz minimalnych wartości profilu LPAR-a (APP + MINIMUM_PROFILE) są większe niż aktualnie przypisane zasoby do LPARa. 
    Zasoby zostaną dynamicznie przydzielone

Typ

Wartości MINIMUM w profilu LPARa

Wartości ALLOCATED (aktualnie przypisane)

Wartości w konfiguracji ROHA dla Application Controllera (APP)

Wynik - Compute ROHA RAM/CPU

Entitled Capacity

1.0

1.0

0.1

1.1 EC

Virtual Processor

4

4

1

5 vCPU

Memory

20 GB

21 GB

3 GB

23 GB

  • Przypadek gdy do LPARa aktualnie przypisane są zasoby większe niż MINIMUM_PROFILE + APP.
    Aktualnie przypisane zasoby są większe, więc do LPARa nie są dodawane zasoby 

Typ

Wartości MINIMUM w profilu LPARa

Wartości ALLOCATED (aktualnie przypisane)

Wartości w konfiguracji ROHA dla Application Controllera (APP)

Wynik - Compute ROHA RAM/CPU

Entitled Capacity

0.1

0.3

0.1

0.3 EC

Virtual Processor

1

3

1

3 vCPU

Memory

6 GB

45 GB

10 GB

45 GB

Warto zwrócić uwagę na to, że po przełączeniu Resource Group na zapasowy węzeł klastra, zasoby są odbierane (jeśli technicznie istnieje taka możliwość). 

Klaster może mieć wiele Resource Group, dlatego zasoby są liczone osobno, indywidualnie dla każdej, tak by spełnić wymagania dla każdej z aplikacji.

Istotną kwestią, w konfiguracji ROHA jest to, czy aplikacja ma mieć możliwość uruchomienia, w przypadku gdy zasoby na serwerze fizycznym nie są wystarczające. 

Myślę że tę decyzję należy podjąć indywidualnie, we własnym zakresie, uwzględniając specyfikę danego systemu.

Od siebie zasugeruję jedynie że sytuacja w której aplikacja uruchomi się automatycznie na węźle zapasowym klastra wskutek awarii węzła podstawowego, przy jednoczesnym braku przydzielenia zasobów np. wskutek błędu połączenia do konsoli HMC, w wielu przypadkach może być korzystniejsza - jeżeli aplikacja jest w stanie poprawnie działać na minimalnych zasobach, może zminimalizować czas niedostępności dla biznesu, a administrator w dalszym etapie może wykonać ręczą korektę przypisania odpowiednich zasobów.

Ogólne założenia:

  • Wartości Minimum z profilu LPAR-a dla uproszczenia mogą być uznawane jako zasoby dla działania systemu operacyjnego, więc dlatego są traktowane niezależnie od Application Controllera

  • LPAR po uruchomieniu RG lub jej przełączeniu będzie miał przypisane zasoby w wielkości zasobów Application Controllera, dodanych do minimalnych wartości z profilu, chyba że aktualnie przypisane zasoby LPARa są wyższe

  • Po przełączeniu RG na innego node'a lub jej zatrzymaniu, zasoby zostaną zwolnione

  • W przypadku wielu Resource Group zasoby są traktowane niezależnie, tzn nawet gdy do LPAR-a zostały już dodane zasoby w ramach pierwszej RG, to zasoby zostaną dodane wraz z kolejną, ale bez dublowania zasobów MINIMUM profilu LPAR-a

Podane założenia wynikają z moich obserwacji i testów, dlatego mogą nie być opisane w dokumentacji IBM.

Oczywiście wszystkie informacje w dokumentacji IBM, należy traktować nadrzędnie w stosunku do informacji w tym tekście.

Raportowanie i analiza działania ROHA

Poniżej umieściłem przykładowe outputy użytecznych poleceń, aby ułatwić zrozumienie ich wykorzystania oraz logiki ROHA.

Wszelkie podane nazwy zostały zmyślone na potrzeby artykułu i nie odnoszą się do żadnego rzeczywistego systemu informatycznego.

Całkowity raport dla ROHA oraz zasobów LPARów i serwerów fizycznych

# clmgr view report ROHA

# clmgr view report ROHA
Cluster: 'CLUSTER_NAME' of Stretched Cluster type
        Cluster tunables
                Dynamic LPAR
                  Always Start Resource Groups: '1'
                  Adjust Shared Processor Pool size if required: '0'
                  Force synchronous release of DLPAR resources: '0'
                On/Off CoD
                  I agree to use On/Off CoD and be billed for extra costs: '0'
                  Number of activating days for On/Off CoD requests: '30'
                Enterprise Pool
                  Resource Allocation order: '0'
        Node: nodename1
                Site: DC1
                HMC(s): hmc_name_1
                Managed system: Power10_Machine_XXX
                LPAR: nodename1_lpar
                NovaLink(s):
                        Current profile: 'default_profile'
                        Memory (GB):        minimum '6'  desired '6'  current '76'  maximum '120'
                        Processing mode: Shared
                        Shared processor pool: 'SSP_TEST'
                        Processing units:   minimum '0.1'  desired '0.1'  current '0.5'  maximum '10.0'
                        Virtual processors: minimum '1'  desired '1'  current '5'  maximum '10'
                ROHA provisioning for 'ONLINE' resource groups
                        Resource group: 'rg_database'  Application controller: 'db_start_stop_script'
                                Memory='70.0' Processors='0' Processing units='0.40' Virtual Processors='4'
                        Total: Use desired number='0' Memory='70' Processors='0' Processing units='0.4' Virtual Processors='4'
                ROHA provisioning for 'OFFLINE' resource groups
                        Resource group: 'rg_app3'  Application controller: 'app3_test_app'
                                Memory='10.0' Processors='0' Processing units='1.00' Virtual Processors='7'
                        Resource group: 'rg_app1'  Application controller: 'cl_app1_script'
                                Memory='10.0' Processors='0' Processing units='0.10' Virtual Processors='1'
                        Total: Use desired number='0' Memory='20' Processors='0' Processing units='1.1' Virtual Processors='8'
        Node: nodename2
                Site: DC2
                HMC(s): hmc_name_2
                Managed system: Power10_Machine_XXX
                LPAR: node_name_2_lpar
                NovaLink(s):
                        Current profile: 'default_profile'
                        Memory (GB):        minimum '6'  desired '30'  current '30'  maximum '120'
                        Processing mode: Shared
                        Shared processor pool: 'SSP_TEST'
                        Processing units:   minimum '0.1'  desired '0.1'  current '0.1'  maximum '10.0'
                        Virtual processors: minimum '1'  desired '1'  current '1'  maximum '10'
                ROHA provisioning for 'ONLINE' resource groups
                        Resource group: 'rg_db2'  Application controller: 'db2_start_stop_script'
                                Memory='24.0' Processors='0' Processing units='0.00' Virtual Processors='0'
                        Total: Use desired number='0' Memory='24' Processors='0' Processing units='0' Virtual Processors='0'
                ROHA provisioning for 'OFFLINE' resource groups
                        Resource group: 'rg_app2'  Application controller: 'cl_app2_script'
                                Memory='10.0' Processors='0' Processing units='0.10' Virtual Processors='1'
                        Total: Use desired number='0' Memory='10' Processors='0' Processing units='0.1' Virtual Processors='1'

Managed System 'Power10_Machine_XXX'
        Hardware resources of managed system
                Installed:       memory '1280' GB         processing units '20.0000'
                Configurable:    memory '1280' GB         processing units '20.0000'
                Inactive:        memory '0' GB    processing units '0.0000'
                Deconfigured:    memory '0' GB   processing units '0.0000'
                Available:       memory '945.25' GB       processing units '10.5000'
                Free:            memory '945.25' GB       processing units '10.5000'
        On/Off CoD
                No
        Enterprise pool
                No
        Hardware Management Console
                hmc_name_1
        Shared processor pool 'SSP_TEST'
                Available: '4.1'
                Reserved: '0.0'
                Maximum: '5.0'
        Logical partition 'node_name_1_lpar'
                This 'node_name_1_lpar' partition hosts 'node_name_1' node of the Stretched Cluster 'CLUSTER_NAME'
        Logical partition 'node_name_2_lpar'
                This 'node_name_2_lpar' partition hosts 'node_name_2' node of the Stretched Cluster 'CLUSTER_NAME'
No enterprise pool defined.

Aktualnie przypisane zasoby na danym nodzie w ramach ROHA

# clodmget HACMPdynresop

#  clodmget HACMPdynresop
:key="nodename1_LPAR_NAME":value="nodename1_lpar":
:key="nodename1_MANAGED_SYSTEM":value="XXX":
:key="nodename1_LPAR_NAME":value="nodename1_lpar":
:key="nodename1_MANAGED_SYSTEM":value="XXX":
:key="TIMESTAMP":value="Thu Jun  1 14:09:42 CEST 2023":
:key="MANAGED_SYSTEM":value="":
:key="ENTERPRISE_POOL":value="":
:key="PREFERRED_HMC_LIST":value="":
:key="PREFERRED_NOVA_LIST":value="":
:key="DLPAR_MEM":value="70":
:key="DLPAR_PROCS":value="4":
:key="DLPAR_PROC_UNITS":value="0.4000":
:key="MAX_SPP_DIFF":value="0":
:key="ONOFF_MEM":value="":
:key="ONOFF_CPU":value="":
:key="CODPOOL_MEM":value="":
:key="CODPOOL_CPU":value="":

Podgląd ustawionych konsol HMC

# clmgr query hmc -v

# clmgr query hmc -v
NAME="HMCNAME_1"
TIMEOUT="-1"
RETRY_COUNT="-1"
RETRY_DELAY="-1"
NODES="nodename_1"
SITES="DC1"
STATUS="UP"
VERSION="VXXRX.XXXX.X"
USER_NAME="username"
PASSWORD=""

NAME="HMCNAME_2"
TIMEOUT="-1"
RETRY_COUNT="-1"
RETRY_DELAY="-1"
NODES="nodename_1 nodename_2"
SITES="DC2"
STATUS="UP"
VERSION="VXXRX.XXXX.X"
USER_NAME="username"
PASSWORD=""

Podgląd lub zmiana aktualnych ustawień dla danego Application Controllera

# smitty cm_cfg_get_hrp → potwierdzenie ustawień CoD (No) → wybór Application Controller

Application Controller Name                         cl_app1_script

Use desired level from the LPAR profile             No              
Optimal amount of gigabytes of memory              [10.0]

Optimal number of dedicated processors             [0]              

Optimal number of processing units                 [0.10]
Optimal number of virtual processors               [1]              

Listowanie minimalnych wartości profilu LPAR-a:

# lparstat -i | grep Min
Minimum Virtual CPUs                       : 1
Minimum Memory                             : 6144 MB
Minimum Capacity                           : 0.10

Analiza logów ROHA

Bardzo użyteczne jest przeglądanie logu hacmp.out, zwłaszcza w trakcie przełączenia klastra, oraz w przypadku wątpliwości, dlaczego zasoby zostały przeliczone w taki, a nie inny sposób.

# grep ROHALOG /var/hacmp/log/hacmp.out

# grep ROHALOG /var/hacmp/log/hacmp.out
[ROHALOG:6357464:(0.073)] Open session 6357464 at Thu Jun  1 14:03:18 CEST 2023
[ROHALOG:6357464:(6.230)] ==== HACMProhaparam ODM ====
[ROHALOG:6357464:(6.241)] ALWAYS_START_RG    = 1
[ROHALOG:6357464:(6.252)] FORCE_SYNC_RELEASE = 0
[ROHALOG:6357464:(6.262)] ADJUST_SPP_SIZE    = 0
[ROHALOG:6357464:(6.272)] AGREE_TO_COD_COSTS = 0
[ROHALOG:6357464:(6.281)] ONOFF_DAYS         = 30
[ROHALOG:6357464:(6.292)] RESOURCE_ALLOCATION_ORDER = 0
[ROHALOG:6357464:(6.297)] ============================
[ROHALOG:6357464:(6.301)] ===== HACMPdynresop ODM ====
[ROHALOG:6357464:(6.312)] TIMESTAMP             = Thu Jun 1 14:03:24 CEST 2023
[ROHALOG:6357464:(6.322)] MANAGED_SYSTEM        = MACHINE_01_NAME
[ROHALOG:6357464:(6.331)] ENTERPRISE_POOL       = unknown
[ROHALOG:6357464:(6.342)] PREFERRED_HMC_LIST    = hmc_test_01
[ROHALOG:6357464:(6.352)] PREFERRED_NOVA_LIST   = 0
[ROHALOG:6357464:(6.383)] DLPAR_MEM (GB)        = 70
[ROHALOG:6357464:(6.403)] DLPAR_PROC_UNITS      = 0.4000
[ROHALOG:6357464:(6.414)] DLPAR_PROCS           = 4
[ROHALOG:6357464:(6.424)] CODPOOL_MEM           = 0
[ROHALOG:6357464:(6.434)] CODPOOL_CPU           = 0
[ROHALOG:6357464:(6.443)] ONOFF_MEM             = 0
[ROHALOG:6357464:(6.463)] ONOFF_CPU             = 0
[ROHALOG:6357464:(6.473)] EFFECTIVE_HMC_VERSION = 0
[ROHALOG:6357464:(6.483)] MAX_SPP_DIFF          = 0
[ROHALOG:6357464:(6.488)] ============================
[ROHALOG:6357464:(6.492)] +------------------+---------------------------------+
[ROHALOG:6357464:(6.496)] | Session info     |   Value                         |
[ROHALOG:6357464:(6.501)] +------------------+---------------------------------+
[ROHALOG:6357464:(6.505)] | Operation        |                       acquire   |
[ROHALOG:6357464:(6.510)] | Compute only     |                             0   |
[ROHALOG:6357464:(6.514)] | SystemMirror mode|                             1   |
[ROHALOG:6357464:(6.518)] | Synchronous      |                             1   |
[ROHALOG:6357464:(6.523)] | Handled Apps     | cl_app1_script
[ROHALOG:6357464:(6.527)] | Running Apps     | db_start_stop_script
[ROHALOG:6357464:(6.532)] +------------------+---------------------------------+
[ROHALOG:6357464:(8.167)] +------------------+----------------+
[ROHALOG:6357464:(8.171)] | HMC              |     Version    |
[ROHALOG:6357464:(8.177)] +------------------+----------------+
[ROHALOG:6357464:(8.182)] | HMC1_A |   VXXRX.XXXX.X |
[ROHALOG:6357464:(8.186)] +------------------+----------------+
[ROHALOG:6357464:(13.623)] +------------------+----------------+----------------+
[ROHALOG:6357464:(13.630)] | LPAR (shared)    |   Memory (GB)  |   PU(s)/VP(s)  |
[ROHALOG:6357464:(13.633)] +------------------+----------------+----------------+
[ROHALOG:6357464:(13.639)] | Name             |        lpar_node01   |
[ROHALOG:6357464:(13.644)] | State            |                       Running   |
[ROHALOG:6357464:(13.650)] | Id               |                            13   |
[ROHALOG:6357464:(13.653)] | Uuid             |   XXXXXXXXXXXXXXXXXXXXXXXXXXX   |
[ROHALOG:6357464:(13.659)] | VP/PU Ratio      |                       0.0500    |
[ROHALOG:6357464:(13.663)] | Minimum          |       6.0000   |    0.1000/  1   |
[ROHALOG:6357464:(13.669)] | Desired          |       6.0000   |    0.1000/  1   |
[ROHALOG:6357464:(13.673)] | Assigned         |      76.0000   |    0.5000/  5   |
[ROHALOG:6357464:(13.679)] | Maximum          |     120.0000   |    10.0000/ 10   |
[ROHALOG:6357464:(13.683)] +------------------+----------------+----------------+
[ROHALOG:6357464:(13.688)] +------------------+----------------+----------------+
[ROHALOG:6357464:(13.693)] | SHARED PROC POOL |                |      PU(s)     |
[ROHALOG:6357464:(13.697)] +------------------+----------------+----------------+
[ROHALOG:6357464:(13.702)] | Name             |                |        TEST |
[ROHALOG:6357464:(13.706)] | Maximum          |                |        5       |
[ROHALOG:6357464:(13.711)] | Free             |                |      4.1000     |
[ROHALOG:6357464:(13.716)] | Reserved         |                |      0.0000     |
[ROHALOG:6357464:(13.721)] +------------------+----------------+----------------+
[ROHALOG:6357464:(13.736)] +------------------+----------------+----------------+----------------+----------------+
[ROHALOG:6357464:(13.741)] | OPTIMAL APPS     |  Use Desired   |   Memory (GB)  |     CPU(s)     |   PU(s)/VP(s)  |
[ROHALOG:6357464:(13.746)] +------------------+----------------+----------------+----------------+----------------+
[ROHALOG:6357464:(13.751)] | cl_app1_script   |        0       |      10.0000   |        0       |    0.1000/  1   |
[ROHALOG:6357464:(13.756)] +------------------+----------------+----------------+----------------+----------------+
[ROHALOG:6357464:(13.761)] | Total            |        0       |      10.0000   |        0       |    0.1000/  1   |
[ROHALOG:6357464:(13.763)] +------------------+----------------+----------------+----------------+----------------+
[ROHALOG:6357464:(13.794)] +------------------+----------------+----------------+----------------+----------------+
[ROHALOG:6357464:(13.802)] | RUNNING APPS     |  Use Desired   |   Memory (GB)  |     CPU(s)     |   PU(s)/VP(s)  |
[ROHALOG:6357464:(13.807)] +------------------+----------------+----------------+----------------+----------------+
[ROHALOG:6357464:(13.812)] | db_start_stop_sc |        0       |      70.0000   |        0       |    0.4000/  4   |
[ROHALOG:6357464:(13.818)] +------------------+----------------+----------------+----------------+----------------+
[ROHALOG:6357464:(13.823)] | Total            |        0       |      70.0000   |        0       |    0.4000/  4   |
[ROHALOG:6357464:(13.828)] +------------------+----------------+----------------+----------------+----------------+
[ROHALOG:6357464:(13.834)] ============ Compute ROHA Memory ============
[ROHALOG:6357464:(13.838)] == Status Reminder ==
[ROHALOG:6357464:(13.843)] Current resources       :  76.0000 GB
[ROHALOG:6357464:(13.847)] == Raw computation from AC settings ==
[ROHALOG:6357464:(13.852)] LPAR profile minimum    :  6.0000 GB
[ROHALOG:6357464:(13.856)] APPs running            :  70.0000 GB
[ROHALOG:6357464:(13.861)] APPs to start (optimal) :  10.0000 GB
[ROHALOG:6357464:(13.865)] Total raw               :  86.0000 GB
[ROHALOG:6357464:(13.870)] Delta acquisition raw   :  10.0000 GB
[ROHALOG:6357464:(13.874)] == Maximum limits (fit into if exceeding and always_start_rg=1, otherwise fail).
[ROHALOG:6357464:(13.878)] LPAR profile maximum    :  120.0000 GB
[ROHALOG:6357464:(13.883)] == Minimum limits (adjust if under) ==
[ROHALOG:6357464:(13.887)] Delta minimum           :    0.00 GB
[ROHALOG:6357464:(13.892)] == Final computation, limits considered ==
[ROHALOG:6357464:(13.896)] Total                   :  86.0000 GB
[ROHALOG:6357464:(13.901)] Delta acquisition       :  10.0000 GB
[ROHALOG:6357464:(13.905)] =================== End =====================
[ROHALOG:6357464:(13.935)] ========== Compute ROHA PU(s)/VP(s) =========
[ROHALOG:6357464:(13.940)] == Status Reminder ==
[ROHALOG:6357464:(13.944)] Current resources       :  0.5000 /   5
[ROHALOG:6357464:(13.954)] == Raw computation from AC settings ==
[ROHALOG:6357464:(13.959)] LPAR profile minimum    :  0.1000 /   1
[ROHALOG:6357464:(13.963)] APPs running            :  0.4000 /   4
[ROHALOG:6357464:(13.968)] APPs to start (optimal) :  0.1000 /   1
[ROHALOG:6357464:(13.972)] Total raw               :  0.6000 /   6
[ROHALOG:6357464:(13.977)] Delta acquisition raw   :  0.1000 /   1
[ROHALOG:6357464:(13.981)] PU/VP ratio raw         :  0.1000
[ROHALOG:6357464:(13.986)] Minimal SPP size raw    :       1
[ROHALOG:6357464:(13.990)] == Maximum limits (fit into if exceeding and always_start_rg=1, otherwise fail).
[ROHALOG:6357464:(13.995)] LPAR profile maximum    :  10.0000 /  10
[ROHALOG:6357464:(13.999)] PU/VP ratio             :  0.0500 (Cannot have a lower ratio).
[ROHALOG:6357464:(14.009)] SPP free (for delta)    :       4
[ROHALOG:6357464:(14.014)] == Minimum limits (adjust if under) ==
[ROHALOG:6357464:(14.018)] Delta minimum           :    0.00 /   0
[ROHALOG:6357464:(14.023)] == Final computation, limits considered ==
[ROHALOG:6357464:(14.027)] Total                   :  0.6000 /   6
[ROHALOG:6357464:(14.032)] Delta acquisition       :  0.1000 /   1
[ROHALOG:6357464:(14.036)] PU/VP ratio             :  0.1000
[ROHALOG:6357464:(14.078)] =================== End =====================
[ROHALOG:6357464:(16.274)] Waiting on async release to complete
[ROHALOG:6357464:(16.275)]
[ROHALOG:6357464:(16.285)] Coming out of wait loop as there is no async release in progress
[ROHALOG:6357464:(16.285)]
[ROHALOG:6357464:(22.603)] +------------------+----------------+----------------+
[ROHALOG:6357464:(22.609)] | MANAGED SYSTEM   |   Memory (GB)  |  Proc Unit(s)  |
[ROHALOG:6357464:(22.613)] +------------------+----------------+----------------+
[ROHALOG:6357464:(22.619)] | Name             |      MACHINE_01_NAME   |
[ROHALOG:6357464:(22.623)] | State            |                     Operating   |
[ROHALOG:6357464:(22.629)] | Region Size      |       0.2500   |        /       |
[ROHALOG:6357464:(22.633)] | VP/PU Ratio      |        /       |     0.0500     |
[ROHALOG:6357464:(22.639)] | Installed        |    1280.0000   |     20.0000     |
[ROHALOG:6357464:(22.643)] | Configurable     |    1280.0000   |     20.0000     |
[ROHALOG:6357464:(22.648)] | Deconfigured     |       0.0000   |     0.0000     |
[ROHALOG:6357464:(22.652)] | Reserved         |      18.7500   |         /      |
[ROHALOG:6357464:(22.657)] | Available        |     945.2500   |     10.5000     |
[ROHALOG:6357464:(22.661)] | Free (computed)  |     945.2500   |     10.5000     |
[ROHALOG:6357464:(22.666)] +------------------+----------------+----------------+
[ROHALOG:6357464:(24.408)] +------------------+----------------+----------------+
[ROHALOG:6357464:(24.412)] | ENTERPRISE POOL  |   Memory (GB)  |     CPU(s)     |
[ROHALOG:6357464:(24.417)] +------------------+----------------+----------------+
[ROHALOG:6357464:(24.421)] | Name             |                       unknown   |
[ROHALOG:6357464:(24.425)] | State            |                       unknown   |
[ROHALOG:6357464:(24.430)] | Master HMC       |                       unknown   |
[ROHALOG:6357464:(24.433)] | Capacity (total) |       0.0000   |        0       |
[ROHALOG:6357464:(24.440)] | Available        |       0.0000   |        0       |
[ROHALOG:6357464:(24.443)] | Unreturned       |       0.0000   |        0       |
[ROHALOG:6357464:(24.449)] | Unreturned (MS)  |       0.0000   |        0       |
[ROHALOG:6357464:(24.453)] | Mobile (MS)      |       0.0000   |        0       |
[ROHALOG:6357464:(24.460)] +------------------+----------------+----------------+
[ROHALOG:6357464:(24.463)] +------------------+-----------------+----------------+----------------+
[ROHALOG:6357464:(24.470)] | ENTERPRISE POOL  | MANAGED_SYSTEM  |   Memory (GB)  |     CPU(s)     |
[ROHALOG:6357464:(24.473)] +------------------+-----------------+----------------+----------------+
[ROHALOG:6357464:(24.480)] | Name             |                                         unknown   |
[ROHALOG:6357464:(25.991)] +------------------+----------------+----------------+
[ROHALOG:6357464:(25.995)] | TRIAL COD        |   Memory (GB)  |     CPU(s)     |
[ROHALOG:6357464:(26.000)] +------------------+----------------+----------------+
[ROHALOG:6357464:(26.002)] | State            |    Not Running |    Not Running |
[ROHALOG:6357464:(26.010)] | Activated        |       0.0000   |        0       |
[ROHALOG:6357464:(26.012)] | Days left        |         0      |        0       |
[ROHALOG:6357464:(26.019)] | Hours left       |         0      |        0       |
[ROHALOG:6357464:(26.022)] +------------------+----------------+----------------+
[ROHALOG:6357464:(27.626)] +------------------+----------------+----------------+
[ROHALOG:6357464:(27.632)] | ONOFF COD        |   Memory (GB)  |     CPU(s)     |
[ROHALOG:6357464:(27.637)] +------------------+----------------+----------------+
[ROHALOG:6357464:(27.641)] | State            |        unknown |        unknown |
[ROHALOG:6357464:(27.646)] | Activated        |       0.0000   |        0       |
[ROHALOG:6357464:(27.650)] | Unreturned       |       0.0000   |        0       |
[ROHALOG:6357464:(27.652)] | Available        |       0.0000   |        0       |
[ROHALOG:6357464:(27.660)] | Days available   |         0      |        0       |
[ROHALOG:6357464:(27.662)] | Days left        |         0      |        0       |
[ROHALOG:6357464:(27.670)] | Hours left       |         0      |        0       |
[ROHALOG:6357464:(27.672)] +------------------+----------------+----------------+
[ROHALOG:6357464:(34.972)] +------------------+----------------+----------------+
[ROHALOG:6357464:(34.978)] | OTHER            |   Memory (GB)  |   PU(s)/VP(s)  |
[ROHALOG:6357464:(34.982)] +------------------+----------------+----------------+
[ROHALOG:6357464:(34.987)] | LPAR (shared)    |        lpar_node_02   |
[ROHALOG:6357464:(34.991)] | State            |                       Running   |
[ROHALOG:6357464:(34.996)] | Id               |                            12   |
[ROHALOG:6357464:(35.000)] | Uuid             |   XXXXXXXXXXXXXXXXXXXXXXXXXXX   |
[ROHALOG:6357464:(35.006)] | Minimum          |       6.0000   |    0.1000/  1   |
[ROHALOG:6357464:(35.010)] | Assigned         |      30.0000   |    0.1000/  1   |
[ROHALOG:6357464:(35.015)] +------------------+----------------+----------------+
[ROHALOG:6357464:(35.020)] | MANAGED SYSTEM   |      MACHINE_01_NAME   |
[ROHALOG:6357464:(35.025)] | State            |                     Operating   |
[ROHALOG:6357464:(35.030)] +------------------+----------------+----------------+
[ROHALOG:6357464:(35.032)] | ENTERPRISE POOL  |                       unknown   |
[ROHALOG:6357464:(35.040)] | Mobile (MS)      |       0.0000   |        0       |
[ROHALOG:6357464:(35.042)] +------------------+----------------+----------------+
[ROHALOG:6357464:(35.063)] =========== Identify ROHA Memory ===========
[ROHALOG:6357464:(35.068)] Remaining available memory for partition:            945.2500 GB
[ROHALOG:6357464:(35.072)] Total Enterprise Pool memory to yank normal from
[ROHALOG:6357464:(35.077)] XXX_PHYSICAL_MACHINE:    0.0000 GB
[ROHALOG:6357464:(35.082)] Total Enterprise Pool memory to acquire including all yanked amounts:        0.0000 GB
[ROHALOG:6357464:(35.086)] Total On/Off CoD memory to activate:                 0.0000 GB for 0 days
[ROHALOG:6357464:(35.091)] Total DLPAR memory to allocate:                      10.0000 GB
[ROHALOG:6357464:(35.095)] =================== End ====================
[ROHALOG:6357464:(35.112)] ========== Identify ROHA Processor ===========
[ROHALOG:6357464:(35.117)] Remaining available PU(s) for partition:             10.5000 Processing Unit(s)
[ROHALOG:6357464:(35.121)] Total Enterprise Pool CPU(s) to yank normal from
[ROHALOG:6357464:(35.126)] MACHINE_01_NAME:    0.0000 CPU(s)
[ROHALOG:6357464:(35.131)] Total Enterprise Pool CPU(s) to acquire including all yanked amounts:        0.0000 CPU(s)
[ROHALOG:6357464:(35.135)] Total On/Off CoD CPU(s) to activate:                 0.0000 CPU(s) for 0 days
[ROHALOG:6357464:(35.140)] Total DLPAR PU(s)/VP(s) to allocate:                 0.1000 Processing Unit(s) and 1.0000 Virtual Processor(s)
[ROHALOG:6357464:(35.144)] =================== End =====================
[ROHALOG:6357464:(44.963)] clhmccmd: 10.0000 GB of DLPAR resources have been allocated.
[ROHALOG:6357464:(44.963)] clhmccmd: 1 VP(s) or CPU(s) and 0.1000 PU(s) of DLPAR resources have been allocated.
[ROHALOG:6357464:(45.134)] The following resources were acquired for application controllers cl_app1_script.
[ROHALOG:6357464:(45.134)] DLPAR memory: 10.0000 GB             On/Off CoD memory: 0.0000 GB            Enterprise Pool memory: 0.0000 GB.
[ROHALOG:6357464:(45.134)] DLPAR processor: 0.1000 PU/1.0000 VP On/Off CoD processor: 0.0000 CPU(s)     Enterprise Pool processor: 0.0000 CPU(s)
[ROHALOG:6357464:(45.139)] INFO: received rc=0.
[ROHALOG:6357464:(45.144)] Success on 1 attempt(s).
[ROHALOG:6357464:(45.271)] ===== HACMPdynresop ODM ====
[ROHALOG:6357464:(45.281)] TIMESTAMP             = Thu Jun 1 14:04:03 CEST 2023
[ROHALOG:6357464:(45.298)] MANAGED_SYSTEM        = 0
[ROHALOG:6357464:(45.308)] ENTERPRISE_POOL       = 0
[ROHALOG:6357464:(45.321)] PREFERRED_HMC_LIST    = 0
[ROHALOG:6357464:(45.337)] PREFERRED_NOVA_LIST   = 0
[ROHALOG:6357464:(45.352)] DLPAR_MEM (GB)        = 80
[ROHALOG:6357464:(45.364)] DLPAR_PROC_UNITS      = 0.5
[ROHALOG:6357464:(45.375)] DLPAR_PROCS           = 5
[ROHALOG:6357464:(45.390)] CODPOOL_MEM           = 0
[ROHALOG:6357464:(45.401)] CODPOOL_CPU           = 0
[ROHALOG:6357464:(45.411)] ONOFF_MEM             = 0
[ROHALOG:6357464:(45.422)] ONOFF_CPU             = 0
[ROHALOG:6357464:(45.459)] EFFECTIVE_HMC_VERSION = 0
[ROHALOG:6357464:(45.470)] MAX_SPP_DIFF          = 0
[ROHALOG:6357464:(45.481)] ============================
[ROHALOG:6357464:(45.491)] Close session 6357464 at Thu Jun  1 14:04:04 CEST 2023

Konfiguracja

W pierwszej kolejności należy kierować się dokumentacją IBM: https://www.ibm.com/docs/en/powerha-aix/7.2?topic=availability-configuring-resource-optimized-high

Konsole HMC

Ponieważ ROHA łączy się z konsolą HMC, konieczne jest wykorzystanie użytkownika z odpowiednimi uprawnieniami na konsoli. W starych wersjach PowerHA wymagane było użycie konta hscroot, jednak nowe wersje umożliwiają zdefiniowanie innego konta. Ze względu na bezpieczeństwo uprawnień z pewnością warto z tego korzystać.

Możliwe jest użycie połączenia REST API lub ssh. Aby dodać konsolę HMC do klastra należy wykonać poniższe polecenie lub zrobić to z poziomu SMIT-a

UWAGA: konfiguracja z poziomu SMIT nie pozwala na podanie konta użytkownika. Domyślnie jest wykorzystywane konto hscroot

# clmgr add hmc <HMC> USER_NAME=<hmcuser>

W przypadku użycia połączenia ssh, warto najpierw potwierdzić fingerprint, np. w poniższy sposób, na wszystkich węzłach klastra.

# ssh hmc1
The authenticity of host 'hmc1 (XX.XX.XX.XX)' can't be established.
ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXX.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

# ssh hmc2
The authenticity of host 'hmc2 (XX.XX.XX.XX)' can't be established.
ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXX.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

W ustawieniach ROHA należy przypisać/zweryfikować listę konsol przypisanych do obsługi danego węzła oraz Site'u

smitty sysmirror - Cluster Applications and Resources → Resources → Configure User Applications (Scripts and Monitors) →  Resource Optimized High Availability →  HMC Configuration

  • Change/Show HMC List for a Node
  • Change/Show HMC List for a Site
  • Change/Show Default HMC List

Ustawienia Application Controllera

Resource Group musi mieć atrybut Application Controller Name wskazany na odpowiedni Application Controller. Jeśli żaden nie istnieje, należy go utworzyć.

smitty sysmirror - Cluster Applications and Resources → Resources → Configure User Applications (Scripts and Monitors) →  Resource Optimized High Availability → Hardware Resource Provisioning for Application Controller → Add Hardware Resource Provisioning to an Application Controller

                                                      [Entry Fields]
Application Controller Name                         cl_app1_script

Use desired level from the LPAR profile             No                
Optimal amount of gigabytes of memory              [10.0]

Optimal number of dedicated processors             [0]                

Optimal number of processing units                 [0.10]
Optimal number of virtual processors               [1]         


Uwaga: jeżeli nie chcemy nic przypisać do jednej z wartości, nie wolno jej zostawiać pustej tylko wpisać "0" (zero). W przypadku gdy pole zostanie puste, ustawienia nie zostaną nadpisane i aktywna pozostanie poprzednia wartość. 

Podsumowanie

Poprzez zrozumienie specyficznych cech ROHA, administratorzy mogą lepiej zarządzać wysoką dostępnością dla środowisk, zredukować czas niedostępności i optymalizować wykorzystanie zasobów, co ostatecznie przekłada się na większą efektywność i niezawodność systemów.

Mam nadzieję że ten artykuł był dla Ciebie przydatny i dostarczył Ci cennych informacji na temat ROHA oraz pewnych cech charakterystycznych specyfiki działania tej funkcjonalności.

Jeśli znalazłeś błąd lub masz jakieś uwagi, skontaktuj się ze mną poprzez LinkedIn --> https://www.linkedin.com/in/michal-wiktorek-83b2b47b/

0 comments
42 views

Permalink