> For the complete documentation index, see [llms.txt](https://kompendium.cloudlets.zone/kompendium/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kompendium.cloudlets.zone/kompendium/aplikacje/magento-2-automatycznie-skalowalny-klaster-z-cdn.md).

# Magento 2 - automatycznie skalowalny klaster z CDN

Magento 2 to bardzo popularny system e-commerce wybierany zwykle dla wymagających projektów. Magento jest projektem open-source, za którym stoi spory ekosystem twórców i dostawców. Dzięki temu, użytkując platformę możemy korzystać z szerokiej gamy wbudowanych funkcji, takich jak zarządzanie katalogiem danych, narzędzia marketingowe, analityka, optymalizacja SEO, raportowanie i wiele innych.&#x20;

Magento w wersji 2 wymaga odpowiednio przygotowanej architektury, aby obsłużyć wielu jednoczesnych użytkowników i zapewnić wysoką dostępność sklepu. Bardzo ważne jest również automatyczne skalowanie [pionowe](/kompendium/konfiguracja/skalowanie-poziome-i-pionowe.md#automatyczne-skalowanie-pionowe) i [poziome](/kompendium/konfiguracja/skalowanie-poziome-i-pionowe.md#automatyczne-skalowanie-poziome), co przygotowuje e-commerce na obsłużenie pików ruchu. Ciągłość działania Magento 2 realizowana jest poprzez architekturę klastrową, gdzie kluczowe warstwy są zdublowane.

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2Fax1ByAV92BWQ2uA6ItUV%2Fmagento-topology-v2.png?alt=media\&token=7f5997ae-0198-49bb-bb7b-438e9313f20a)

Poniżej znajduje się opis głównych składowych oraz warstw klastra Magento 2.

* **Premium CDN** - integracja z siecią Edgecast CDN zapewnia błyskawiczne ładowanie sklepu bez względu na lokalizację geograficzną dzięki zaawansowanym mechanizmom buforowania i akceleracji, ogromnej przepustowości, obsłudze protokołu HTTP/3.
* **Let's Encrypt SSL** dodatek zapewnia automatyzację operacji zarządzania certyfikatami SSL - wydawanie zaufanych certyfikatów, weryfikację niestandardowej domeny, automatyczne odnawianie certyfikatów.
* **LiteSpeed ​​Web ADC** równoważy obciążenia dzięki elastycznym algorytmom dystrybucji ruchu (w celu optymalizacji wydajności), obsłudze nowoczesnego protokołu HTTP/3 i dynamicznej pamięci podręcznej ESI (do obsługi żądań dynamicznych bezpośrednio redukujących liczbę żądań do serwerów).
* **LiteSpeed ​​Web Server** - wysokowydajny serwer WWW z szerokim zestawem funkcji, takich jak obsługa HTTP/3, pamięć podręczna ESI, optymalizacja CSS i JavaScript, optymalizacja obrazu, obsługa pamięci podręcznej przeglądarki i obiektów, obsługa CDN, wbudowany WAF, Geo-DNS, CAPTCHA, dławienie IP, ochrona anty-DDoS, itp.
* **Web Application Firewall** (WAF) funkcja bezpieczeństwa dla stosu LiteSpeed ​​Web Server, która zawiera filtrowanie anty-DDoS w warstwie 7, przepustowość na poziomie IP i ograniczanie szybkości żądań.
* **LiteMage Cache** to ulepszone rozwiązanie buforowania[ ](https://translate.google.com/website?sl=auto\&tl=pl\&u=https://www.litespeedtech.com/products/cache-plugins/magento-acceleration) dla zasobów dynamicznych, które umożliwia przechowywanie ich jako statycznych, co znacznie przyspiesza obsługę żądań.
* **Klaster MariaDB** - topologia replikacji podstawowa-podstawowa zapewnia lepszą wydajność przechowywania zawartości dynamicznej i prostszą procedurę przełączania awaryjnego.
* **Redis** to wysokowydajne rozwiązanie buforujące działające w pamięci RAM, które działa w kontenerze LiteSpeed ​​Web Server, aby przechowywać już załadowane wyniki zapytań do bazy danych i wyświetlać je szybciej na żądanie.
* **OpenSearch** - napędzana przez społeczność wyszukiwarka typu open-source, która zapewnia rozproszone wyszukiwanie pełnotekstowe z obsługą wielu użytkowników.
* **Shared storage** - węzeł przechowywania danych dla plików multimedialnych.

## Instalacja klastra Magento 2

Zaloguj się do [Panelu Usług Cloudlets.Zone](https://app.controller.cloudlets.zone) i wykonaj kolejne kroki.

1\. Wybierz z menu **Marketplace**, wyszukaj pakiet *Auto-Scalable Magento Cluster* i naciśnij **Instaluj**. Pamiętaj, że rozwiązanie klastrowe jest dostępne tylko dla kont pełnych, a więc nie zainstaluje się na koncie próbnym.

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FvWqBCspp0aG62LvDD5VD%2Fimage.png?alt=media\&token=5d6369ac-d7a7-43de-b141-ea2e375cac44)

2\. Na podstawie oczekiwanego poziomu obciążenia klastra, wybierz strategię skalowania (Scaling Strategy), aby określić opcje automatycznego skalowania poziomego (można to później modyfikować z poziomu: **Ustawienia** / [**Automatyczne Skalowanie Poziome**](/kompendium/konfiguracja/skalowanie-poziome-i-pionowe.md#automatyczne-skalowanie-poziome)).

**Low Load** (Niskie obciążenie)

* dodaje 1 węzeł serwera aplikacji, jeśli obciążenie jest wyższe niż 70%&#x20;
* usuwa 1 węzeł serwera aplikacji, jeżeli obciążenie spadnie poniżej 20%

**Medium Load** (Średnie obciążenie)

* dodaje 1 węzeł serwera aplikacji, jeśli obciążenie jest większe niż 50%&#x20;
* usuwa 1 węzeł serwera aplikacji, jeżeli obciążenie spadnie poniżej 20%

**High Load** (Wysokie obciążenie)

* dodaje 2 węzły serwera aplikacji, jeśli obciążenie jest wyższe niż 30%
* usuwa 1 węzeł serwera aplikacji, jeżeli obciążenie spadnie poniżej 10%

3\. Instalacja środowiska i konfiguracja klastra potrwają kilka minut, zanim zobaczysz okienko wyświetlające Twój bezpośredni link do panelu administracyjnego Magento z danymi uwierzytelniającymi, aby uzyskać do niego dostęp za pośrednictwem przeglądarki internetowej.

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FhFODbUeVZUkB6MnTjiED%2Fimage.png?alt=media\&token=784ff331-84d3-46cf-8e46-fddc78764f3b)

4\. Naciśnij **Otwórz w przeglądarce,** aby przejść do strony docelowej wstępnie skonfigurowanego motywu Magento **LUMA**, który umożliwia korzystanie z systemu Magento e-commerce zaraz po instalacji.

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FQOvi354u6BReKHcsMMVP%2Fimage.png?alt=media\&token=efac8123-8edf-4761-87e7-c4e84634e63a)

Z tego samego okienka możesz uzyskać dostęp do panelu administracyjnego Magento 2.&#x20;

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2F87XWfF3Zt0EJsqzhrHBW%2Fimage.png?alt=media\&token=7f79a94d-bfae-4bb1-829f-f7e45ab972df)

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FEfCfP2paZXrF4rTlpuS7%2Fimage.png?alt=media\&token=7f626c01-d011-48a1-9b69-2f22058071ef)

5\. Zweryfikuj przydzielone domyślnie limity skalowania pionowego ([cloudlety](/kompendium/faq/czym-jest-cloudlet.md#co-to-jest-cloudlet)) dla warstw z pojedynczym kontenerem (np.: Load, Balancer, NFS), tak aby upewnić się, że  stworzona dla Magento 2 topologia, odpowiada prognozowanym obciążeniom.

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FVFRpPkfmFDqIjAwqKcfR%2Fimage.png?alt=media\&token=cc8f96cf-4d5e-4f89-978b-6cd168d6ea04)

### Instalacja CDN Edgeport

Obecnie tylko LiteSpeed ​​Web Server obsługuje protokół HTTP/3. W przypadku serwera WWW NGINX ten nowoczesny protokół jest wciąż w [fazie rozwoju](https://trac.nginx.org/nginx/milestone/nginx-1.17) . Aby więc zapewnić najwyższą możliwą wydajność dla CDN zintegrowanego ze środowiskiem, w tej instrukcji omówimy konfigurację Magento 2 opartego na LiteSpeed ​​Web Server.

Jeżeli w podczas instalacji klastra Magento 2 nie została zaznaczona opcja: *Install Lightning-Fast Premium CDN* należy zainstalować specjalny dodatek. Jeżeli opcja była zaznaczona, a więc masz już zainstalowany CDN, wówczas przejdź od razu do konfiguracji, a więc kroku 3.

1. Po zalogowaniu do [Panelu Usług ](https://app.controller.cloudlets.zone)Cloudlets.Zone, otwórz Marketplace, znajdź dodatek **HTTP/3 Premium CDN** i kliknij **Zainstaluj** .

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FKuGBnPEs20oDNOxbf8KU%2Fimage.png?alt=media\&token=a24ce6eb-4887-40f3-ad40-ee2f0b36f427)

2\. W otwartym oknie wybierz środowisko (w naszym przypadku: *Auto-Scalable Magento Cluster v2*), w którym ma być włączony CDN, preferowaną warstwę węzłów (*Load Balancer*) i naciśnij **Zainstaluj**.

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2Fu6sY4V9ElfbA343hSy3U%2Fimage.png?alt=media\&token=6d5b5976-6eca-45ad-96e6-993bb805994b)

Po zakończeniu instalacji pojawi się wyskakujące okienko z adresem URL CDN w następującym formacie:

<mark style="color:yellow;">**nazwaśrodowiska**</mark><mark style="color:orange;">**-chmur.cdn.edgeport.net**</mark>

w naszym przypadku: https\://*Magento2-chmur.cdn.jelastic.net* **CDN Endpoint URL** zostanie także przesłany na skrzynkę e-mail konta.&#x20;

{% hint style="info" %}
W ciągu pierwszej godziny może wystąpić błąd 404, ponieważ rozpropagowanie nowego środowiska w sieci CDN zajmuje trochę czasu.
{% endhint %}

3\. Jeżeli chcesz skonfigurować własną domenę dodaj odpowiedni rekord A. W naszym przykładzie będzie to:

```
A | magento2 | 212.127.94.81 | 1800
```

Następnie sprawdź, czy nastąpiło rozpropagowanie nowego wpisu używając na przykład [DNS Checker](https://dnschecker.org/).

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FGbnUSId2E533Wo9MjvDf%2Fimage.png?alt=media\&token=870a3f64-db19-4bae-9cb4-57752372807a)

4\. Jeśli rozwiązywanie nazw dla Twojej domeny jest prawidłowe możesz zmienić konfigurację dodatku Let's Encrypt, a więc nadpisać domenę domyślną i wygenerować certyfikat SSL dla domeny docelowej. Z poziomu warstwy *Load Balancer* wybierz ikonę **Dodatki**, a następnie **Configure** przy dodatku *Let's Encrypt Free SSL*.

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FUzZXbD3KM21E7vkBN9qq%2Fimage.png?alt=media\&token=fcf074a9-8547-4e6a-8817-703687f02811)

Wpisz właściwą domenę i kliknij przycisk **Zastosuj**.

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2F6bW0Vnt6vpVCZn9heziC%2Fimage.png?alt=media\&token=d21087c7-5927-45ee-8863-18d73dc32e2f)

5\. Pozostaje jeszcze zmiana bazowego adresu URL dla Magento. Robimy to z menu kontekstowego dla warstwy aplikacji klikając ikonę **Dodatki**.

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FbYLNcS8u6crhBlCthZKl%2Fimage.png?alt=media\&token=5603d97a-16dc-4710-af92-38bbc9fba31b)

A następnie wpisujemy naszą domenę wcześniej zdefiniowaną w DNS. W naszym przypadku będzie to:  <https://magento2.produkcjachmur.pl>&#x20;

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FWl6iYXWctB8O4dE5kE7k%2Fimage.png?alt=media\&token=6b7cbc30-c3f1-41a0-8b58-feb82acb5c7a)

Od teraz sklep będzie już pod naszą własną nazwą domeny. Uwzględnij to przy logowaniu do panelu administracyjnego.

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FfbvAHtXA9g15jjtE30qC%2Fimage.png?alt=media\&token=c4eaa257-0474-4fba-bbf9-f98ce1bd9d88)

6\. Na koniec sprawimy, że statyczna zawartość strony będzie dostępna do pobrania z sieci CDN. W tym celu logujemy się do Magento 2 jako administrator. Wchodzimy do **STORES / Configuration / Web / Base URLs (Secure).** W pol&#x61;**:**

* Secure Base URL for Static View Files
* Secure Base URL for User Media Files

**w**klejamy **CDN Endpoint URL,** w naszym przykładzie to: <https://Magento2-chmur.cdn.jelastic.net/>&#x20;

Ustawiamy też protokół SSL jako obowiązujący dla sklepu i panelu administracyjnego modyfikując (wizualizacja na grafice):

\--- Secure Base Link URL&#x20;

\--- Use Secure URLs on Storefront&#x20;

\--- Use Secure URLs in Admin&#x20;

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FmUSUKCAynf11t5CNaMdZ%2Fimage.png?alt=media\&token=18e6761d-e1bf-4792-98e1-1d415decabf4)

7\. Robimy to też dla zakładki **Base URLs** i zapisujemy zmiany - **Save Config.**

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FKt5Vf6bnjShD3wEfX3Bz%2Fimage.png?alt=media\&token=f2cfd8bb-129b-4053-9ccc-52bcc0317d02)

Zrobione. Od tego momentu cała statyczna zawartość sklepu udostępniana będzie z sieci CDN Edgeport, z punktów geograficznie najbliższych dla odwiedzającego Twoją witrynę.&#x20;

### Zmiana ustawień CDN

#### **Jak zastąpić "CDN Endpoint URL" własną domeną?**

1. Możesz zamienić wygenerowany domyślnie URL dla CDN. W tym celu do DNS domeny należy najpierw dodać CNAME do serwera DNS domeny głównej. W naszym przykładzie wygląda to tak: &#x20;

```
CNAME | cdn.magento2 | cdn.magento2.produkcjachmur.pl | 1800
```

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2Flc4IODOGYOWvyJX1zxRJ%2Fimage.png?alt=media\&token=52dd5798-0007-4309-8377-af4026d21331)

2\. Wybierz rodzaj metodę równoważenia obciążenia, aby zapewnić tryb wysokiej dostępności.&#x20;

* **Round Robin** - równomierne rozłożenie żądań pomiędzy dostępne węzły.
* **Primary Failover** - wszystkie żądania są wysyłane do pierwszego węzła, jeśli stanie się niedostępny, żądania są przekierowywane do następnego i tak dalej.

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2F4nmN0pupVY4AT7kDkWkh%2Fimage.png?alt=media\&token=680fa9a6-a4b9-4975-90d2-d6592c1d580d)

Zatwierdź przyciskiem **Apply** i poczekaj około godziny, aż zmiana zostanie wprowadzona do sieci CDN.

{% hint style="info" %}
Podczas skalowania poziomego węzłów w warstwie serwera aplikacji, platforma automatycznie aktualizuje rekordy dostępnych węzłów wewnątrz usługi CDN. Eliminuje to konieczność wykonywania ręcznych modyfikacji podczas skalowania.
{% endhint %}

#### **Czyszczenie pamięci podręcznej CDN**

Do czyszczenia pamięci podręcznej zasobów statycznych w sieci CDN możemy użyć akcji **Purge** lub **Purge All**. Po usunięciu zasobów CDN zaczyna pobierać ich nowe kopie z serwera źródłowego. Obsługa funkcji odbywa się na poziomie dodatku **HTTP/3 Premium CDN** w warstwie **Load Balancera.**

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FvWtpCff4JN9G2UP7OYiC%2Fimage.png?alt=media\&token=13587879-3a3b-4cc8-a4cc-da7a81c35cac)

A. **Purge** (Przeczyść) usuwa określone zasoby w określonej ścieżce.

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FiaVzjwcSbCSz76nDxkyz%2Fimage.png?alt=media\&token=dc72bf56-3658-47eb-a632-43bb25973f8c)

B. Tymczasem ***Purge All*** (Przeczyść wszystko) usuwa wszelkie statyczne zasoby w sieci CDN, prosząc uprzednio użytkownika o potwierdzenie operacji. Proces odnawiania pamięci podręcznej jest znacznie szybszy w porównaniu z inicjalną (pierwszą) dystrybucją zasobów statycznych po instalacji dodatku.

## Testy wydajności Magento 2 - JMeter

Dobrą praktyką przed dokonaniem wyboru hostingu pod Magento 2 jest sprawdzenie jak środowisko reaguje na określony ruch. Poniższa instrukcja przedstawia jak przygotować sklep oraz narzędzie testowe. JMeter możesz uruchomić na [Cloudlets.Zone](https://cloudlets.zone/) by przetestować hosting Magento 2 innego dostawcy. Zaczynamy!

{% hint style="info" %}
Benchmark Magento 2 za pomocą JMeter realizowany może być wyłącznie na środowisku developerskim lub testowym, gdyż związany jest z generowaniem i nadpisaniem kategorii produktowych.
{% endhint %}

### Przygotowanie Magento 2

1. Skorzystamy z tego, że Magento zapewnia wewnętrzną funkcjonalność do generowania danych testowych za pośrednictwem profili ładowania. Każdy profil generuje następujące kategorie:

<table><thead><tr><th width="263">Element</th><th align="center">SMALL</th><th align="center">MEDIUM</th><th width="200" align="center">LARGE</th><th align="center">EXTRA LARGE</th></tr></thead><tbody><tr><td>websites</td><td align="center">1</td><td align="center">3</td><td align="center">5</td><td align="center">5</td></tr><tr><td>store_groups</td><td align="center">1</td><td align="center">3</td><td align="center">5</td><td align="center">5</td></tr><tr><td>store_views</td><td align="center">1</td><td align="center">3</td><td align="center">5</td><td align="center">5</td></tr><tr><td>simple_products</td><td align="center">800</td><td align="center">24 000</td><td align="center">300 000</td><td align="center">600 000</td></tr><tr><td>configurable_products</td><td align="center">16 z 24 opcjami</td><td align="center">640 z 24 opcjami</td><td align="center">8 000 z 24 opcjami</td><td align="center">16 000 z 24 opcjami</td></tr><tr><td>product_images</td><td align="center">100 obrazów/3 na produkt</td><td align="center">1 000 obrazów/3 na produkt</td><td align="center">2 000 obrazów/3 na produkt</td><td align="center">2 000 obrazów/3 na produkt</td></tr><tr><td>categories</td><td align="center">300</td><td align="center">3 000</td><td align="center">3 000</td><td align="center">6 000</td></tr><tr><td>categories_nesting_level</td><td align="center">3</td><td align="center">3</td><td align="center">5</td><td align="center">5</td></tr><tr><td>catalog_price_rules</td><td align="center">20</td><td align="center">20</td><td align="center">20</td><td align="center">20</td></tr><tr><td>catalog_target_rules</td><td align="center">5</td><td align="center">5</td><td align="center">5</td><td align="center">5</td></tr><tr><td>cart_price_rules</td><td align="center">20</td><td align="center">20</td><td align="center">20</td><td align="center">20</td></tr><tr><td>cart_price_rules_floor</td><td align="center">2</td><td align="center">2</td><td align="center">2</td><td align="center">2</td></tr><tr><td>customers</td><td align="center">200</td><td align="center">2 000</td><td align="center">5 000</td><td align="center">10 000</td></tr><tr><td>tax rates</td><td align="center">130</td><td align="center">40 000</td><td align="center">40 000</td><td align="center">40 000</td></tr><tr><td>orders</td><td align="center">80</td><td align="center">50 000</td><td align="center">100 000</td><td align="center">150 000</td></tr></tbody></table>

2\. Jako, że pracujemy na świeżej instalacji Magento 2, dlatego trzeba wygenerować dane testowe. Zrobimy to z poziomu linii komend. Zaczynamy od ustawienia parametru globalnego w bazie danych. UWAGA, w tym celu otwórz dostęp Web SSH na warstwie BAZY DANYCH.

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FemXCkTAsHzfdXbIR3WBc%2Fimage.png?alt=media\&token=ccf0a169-46d9-4cd8-aec2-c4f26226ded4)

3\. Wpisz poniższą komendę uzupełniając właściwe dane w miejscach <mark style="color:yellow;">{db\_user}</mark> i <mark style="color:yellow;">{db\_pass}</mark>. Zwróć uwagę na brak spacji między parametrem "**-u"** i "**-p",** a ciągiem znaków definiujących użytkownika i hasło.&#x20;

```
mysql -u{db_user} -p{db_pass} -e "SET GLOBAL log_bin_trust_function_creators = 1;"
```

4\. Aby upewnić się, że wszystkie cytaty są puste, uruchom następujące zapytanie MySQL **przed każdym uruchomieniem scenariusza,** wstawiając w miejsce **magento\_dbnamen** właściwą nazwę bazy danych Magento 2, którą znajdziesz w phpMyAdmin.

```
mysql -u{db_user} -p{db_pass} -e "USE magento_dbname; UPDATE quote SET is_active = 0 WHERE is_active = 1;"
```

5\. Teraz wygenerujemy dane produktów za pomocą poniższego polecenia, uwzględniając parametr "**-s"**, aby pominąć początkowe indeksowanie. Polecenie wydajemy z linii komend otwierając Web SSH na poziomie WARSTWY APLIKACJI!

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2Fj38Zfc4q1ftSNEt5Gfic%2FZrzut%20ekranu%202022-01-12%2017.00.41.png?alt=media\&token=97bc3d86-a7a5-4106-b8a9-827e16e68e37)

```
php /var/www/webroot/ROOT/bin/magento setup:performance:generate-fixtures -s /var/www/webroot/ROOT/setup/performance-toolkit/profiles/ce/small.xml
```

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FYEEe6XzrrqxqRCsVUtX6%2FSnip%20-%20Cloudlets.Zone%20Panel%20Mozilla%20Firefo%20\(59\).png?alt=media\&token=95de9b68-7134-4925-a522-4ad1b9692f9d)

6\. Po wygenerowaniu danych należy ręcznie uruchomić indeksowanie.

```
php /var/www/webroot/ROOT/bin/magento indexer:reindex
```

7\. Na zakończenie, czyścimy pamięć podręczną następującą komendą:

```
php /var/www/webroot/ROOT/bin/magento cache:flush
```

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FecQaWZA6eAcJVpWuFNnL%2FSnip%20-%20Cloudlets.Zone%20Panel%20Mozilla%20Firefo%20\(60\).png?alt=media\&token=3f047092-ee31-448a-b637-14aa18f54c7e)

i sprawdzamy, czy są teraz ogólne kategorie z prostymi produktami zastępczymi na witrynie testowej, jak na obrazku poniżej.

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FUam50pFnJpW1Gy4rf6Sg%2Fimage.png?alt=media\&token=39fefe84-bc44-4d88-9bc3-41d419d1f8c7)

8\. Logujemy się do Magento 2 jako administrator, w tym naszym przykładzie będzie to adres: <http://magento2.produkcjachmur.pl><mark style="color:yellow;">/admin/</mark> i zmieniamy hasło dla konta **admin,** na: <mark style="color:yellow;">123123q</mark>

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FWTvXUhnClJ6lRg4kZd6I%2Fimage.png?alt=media\&token=69c4bc22-af35-4ca6-91fa-5aa1b6d52c58)

9\. Włącz przepisywanie serwera [WWW](http://WWW). Otwórz stronę administratora swojej witryny i zaloguj się, a następnie przejdź do menu: **Stores / Configuration / General / Web / Search Engine Optimization**. Odznaczamy "**Use system value**" i wybieramy z menu "**Use Web Server Rewrites** - **YES"** i zapisujemy.

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FzJIk1jlDwX9OM11KGv44%2Fimage.png?alt=media\&token=d5c69eb5-ba80-4866-b342-02501e5d2c4b)

10\. Wejdź do menu **System / Index Management** i ustaw wszystko w trybie „**Update by Schedule**”, zaznaczając z użyciem funkcji *Mass Action* i klikając przycisk **Submit.**

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FhsyI1pDkaCfuwhyQUTIC%2Fimage.png?alt=media\&token=c598b400-26ad-462f-b71e-e1bda69aa728)

11\. Sprawdź stronę zarządzania pamięcią podręczną witryny i zaktualizuj wszelkie nieprawidłowe dane  -->  **System / Cache Management.** Wybierz wszystkie typy skrzynek i odśwież je, klikając przycisk **Submit**.

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FpgNORZMb5HzDMj4Rey69%2Fimage.png?alt=media\&token=cdf68bb3-53d9-4b62-8d47-8ceaa1f65527)

Uff, faza przygotowania danych sklepu zakończona.

### Instalacja i uruchomienie JMeter&#x20;

Do wygenerowania obciążenia wykorzystamy pakiet JMeter-cluster. Topologia obejmuje następujące komponenty:

* **Web** - do wizualizacji procesu generowania obciążeń i dostarczania wyników przez przeglądarkę,&#x20;
* **Workers** - rozproszone serwery JMeter do generowania obciążeni&#x61;*,*
* **Master** - używany do konfiguracji planu testów i zarządzania warstwą *Workers.*

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FxJBzkbRQ7sbCrlaWqgkp%2Fimage.png?alt=media\&token=6e58ec78-9c6c-46bd-92dc-a782c34920b5)

1. Instalację JMeter cluster zrealizować można za pomocą manifestu JPS, który wklejamy w oknie importu w zakładce *URL:* <https://raw.githubusercontent.com/sych74/jmeter/master/manifest.jps>

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2F7CRb6e7rdllHSlWjCzP6%2Fimage.png?alt=media\&token=07eb193d-d309-40bc-bdc9-9fdf4c877c2a)

2\. Następnie, parametryzujemy test domyślnego scenariusza przeznaczonego dla Magento. Kluczowe parametry planu testów dostępne w oknie instalacji to:&#x20;

* **Protocol and Domain**. Lista obsługiwanych protokołów znajduje się w dokumentacji JMeter.&#x20;
* **Virtual Users (VU)**. Jest to liczba współbieżnych wątków, których JMeter będzie używał do testowania.&#x20;
* **Test Duration, min**. Czas trwania testu obciążeniowego w minutach.&#x20;
* **Ramp-up Period, min**. Przedział czasu, w którym wszyscy użytkownicy wirtualni (VU) stają się aktywni. Na przykład, dla 120 VU i czasu aktywacji 1 minuta - co sekundę będą dodawane 2 nowe VU. Zakres wartości od 0 do 60 minut. Aby natychmiast uruchomić wszystkich wirtualnych użytkowników, ustaw okres rozruchu na 0.

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2Fn9swrHR7eSaNlunBKcvk%2Fimage.png?alt=media\&token=1fffda3d-1df7-49a9-8d3e-0d4f2edfa235)

Po zakończeniu instalacji okno dialogowe z linkami do panelu testów i Grafany.&#x20;

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FSw9waaiBdsXrykDta8E5%2Fimage.png?alt=media\&token=e127e083-c7b3-4fb9-b410-6eddfc34f1ec)

3\. Przed uruchomieniem testu sprawdź, czy konfiguracja testu odpowiada wcześniejszym ustawieniom. Z poziomu warstwy **Master**, należy uruchomić dodatek *JMeter Cluster Settings* - **Configure**.

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2Fn1TvzrTOjzZ0KmtDRP7q%2Fimage.png?alt=media\&token=919b551a-f282-48d2-974c-3c7a793ee4cc)

Dla naszego przykładu, konfiguracja powinna wyglądać tak jak poniżej:

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FcfdQJNUqXcpJM2JZmNpO%2Fimage.png?alt=media\&token=e118c487-7d0b-4e8d-a04d-d54d0bbf1ef2)

4\. Aby uruchomić test wejdź wybierz dodatek *JMeter Cluster Settings* z warstwy **Master** i wciśnij przycisk **Run test**.&#x20;

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2Fv7bBLLyIU45fB9UqI4yh%2Fimage.png?alt=media\&token=baaad395-4ead-4ed3-84b6-6807d4e6d397)

Test obciążeniowy się rozpoczął, co system potwierdzi oknem dialogowym zawierającym URL do panelu testu:

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FL9yWYky5QZmeEB0vmjJS%2Fimage.png?alt=media\&token=f2730ccb-3bdf-47b4-a9c7-524a1998e8a9)

5\.  W panelu testu obserwować można postępy, wejść do statystyk testu zwizualizowanych w Grafanie oraz na koniec pobrać rezultaty - RESULTS DIR.

![Panel testów obciążeniowych - JMeter](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FUgDhg3C1djsU0NLkwkRl%2Fimage.png?alt=media\&token=d4b37476-823c-4581-be2a-3a0d96b1cf88)

![Podgląd testu obciążeniowego Magento 2 z Grafany](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2Fp7v5JNvxFnc89LP9xHI9%2Fimage.png?alt=media\&token=ea0ef895-6daf-4b00-84cc-175858cd4fba)

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FTYa8YutI3SrH8shisVBM%2Fimage.png?alt=media\&token=081730e3-1aa1-44b7-a301-d66ac7e6cd63)

### Scenariusz testowy

Magento udostępnia scenariusz do testowania wydajności, który imituje aktywność użytkowników. Magento udostępnia scenariusz testowy dla JMeter do sprawdzania wydajności, który imituje aktywność użytkowników. W rezultacie, otrzymujesz zestaw wskaźników, których możesz użyć do oceny, w jaki sposób zmiany parametrów i ustawień oraz przydzielonych zasobów dla Magento wpływają na wydajność, a więc szybkość ładowania sklepu.

Gotowy skrypt emuluje typowe scenariusze użycia witryny e-commerce, takie jak:

* Przeglądanie katalogu, w tym odwiedzanie strony głównej, strony katalogu, strony produktu, konfigurowalną stronę produktu oraz prostą stronę produktu;
* Dodanie do koszyka zarówno prostego, jak i konfigurowalnego produktu;
* Dokończenie pełnego procesu płatności (wszystkie kroki) jako gość i zarejestrowany klient;
* Czynności administracyjne.

Scenariusz wykorzystuje następujące wzorce ruchu w witrynie dla działań użytkowników:

90% użytkowników puli frontendu, gdzie:

\--- 80% - czynności związane z przeglądaniem katalogu przez gości.

\--- 20% - obsługa koszyka przez klienta.

10% użytkowników do puli administracyjnej, gdzie:

\--- 10% - działania związane z przeglądaniem siatki produktów administratora.

\--- 90% - administracja działań związanych z tworzeniem produktów.

Do testów obciążeniowych wykorzystano nasze rozwiązania Magento o profilu MEDIUM:

500, 1000, 1500 użytkowników dla Klastra Magento 2.

<figure><img src="https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FI7Dg7BaG8ZelTeayovPJ%2FChmura%20(4).png?alt=media&amp;token=f8fe7719-9dcc-409a-9749-80824302dc5e" alt=""><figcaption></figcaption></figure>

{% embed url="<https://cloudlets.zone/rejestracja/?utm_campaign=jitsi&utm_medium=kompendium&utm_source=kompendium>" %}
