Ogólną, a jednocześnie bardzo trafną odpowiedzią na to pytanie jest następująca definicja:
Klaster to rodzaj równoległego lub rozproszonego systemu, który:
- składa się ze zbioru połączonych pełnych komputerów oraz
- używany jest jako pojedynczy system (komputer) [7].
Istotne jest tu użycie terminu pełny komputer -- chodzi o komputer składający się z jednej lub więcej jednostek obliczeniowych, odpowiedniej ilości pamięci, podsystemu wejścia-wyjścia oraz systemu operacyjnego. Istnieje wiele systemów mogących przypominać klaster, które w myśl powyższej definicji nim nie są. Na przykład niektóre systemy typu NUMA (ang. Non-Uniform Memory Access) składają się z niezależnych komputerów, ale pracujących pod kontrolą jednej instancji systemu operacyjnego.
Zazwyczaj w innych definicjach można się spotkać z określeniem klastra jako systemu sprawiającego wrażenie pojedynczego systemu (ang. single system image). Autor pierwszej przytoczonej definicji celowo posłużył się określeniem ,,używany''. Nie na wszystkich poziomach funkcjonalności system rzeczywiście musi sprawiać wrażenie pojedynczego systemu. Przykładowo z punktu widzenia końcowego użytkownika system może wydawać się pojedynczym systemem: aplikacja użytkownika wysyła żądania do klastra i z klastra otrzymuje odpowiedzi, nie interesując się, który z węzłów obsłużył żądanie. Z punktu widzenia administratora systemu wygląda to inaczej -- może on mieć (i z reguły ma) do czynienia z niezależnymi systemami.
W powyższej definicji klaster określa się jako rodzaj systemu rozproszonego bądź równoległego, nie precyzuje jednak na czym te różnice polegają. Różnice w stosunku do systemów równoległych typu SMP (ang. Symmetric Multi-Processor) są dość oczywiste. Po pierwsze jest to skalowalność, bo łatwiej rozbudować klaster niż system typu SMP. Dodając nowy węzeł dodaje się pełny komputer, a więc podsystem wejścia-wyjścia, pamięć itp. W przypadku SMP trudno dodawać kolejne procesory w nieskończoność bez zmian w innych częściach systemu. Po drugie jest to dostępność -- awaria jednego procesora w SMP lub podsystemu oznacza zazwyczaj unieruchomienie całego systemu. W klastrze awaria węzła nie powinna przerywać jego pracy. Po trzecie -- łatwość zarządzania. Na poziomie systemu operacyjnego SMP jest pojedynczym komputerem, zarządzanie nim jest prostsze niż systemem rozproszonym, jakim jest system klastrowy. Inną może mniej oczywistą różnicą jest kwestia licencji na oprogramowanie. W przypadku klastra z reguły oznacza to konieczność wykupienia tylu licencji na oprogramowanie (choćby na system operacyjny), z ilu węzłów składa się klaster.
Różnice w stosunku do typowych systemów rozproszonych są mniej oczywiste. Pierwszą z nich jest anonimowość węzłów. W ogólnie rozumianym systemie rozproszonym, każdy jego element jest rozróżnialny. W klastrach natomiast dąży się do rozwiązań polegających na jak największej anonimowości węzłów. Nie znaczy to, że każdy z węzłów musi być identyczny i pełnić dokładnie takie same funkcje, chodzi bowiem o wspomniane używanie klastra jako pojedynczego systemu.
Drugą różnicą są wzajemne relacje pomiędzy węzłami systemu z uwzględnieniem dostępu do danych. W systemach rozproszonych najczęściej stosuje się paradygmat klient-serwer. Innymi słowy, istnieje zróżnicowanie funkcjonalne i hierarchiczna zależność pomiędzy węzłami, nawet jeśli fizycznie węzły połączone są jak równy-z-równym (ang. peer-to-peer). Przykładowo klienci rozproszonego systemu plików nie wymieniają danych bezpośrednio, komunikują się za pośrednictwem serwera (bądź serwerów). W systemach klastrowych hierarchiczna struktura z uwagi na dostęp do danych nie występuje, nawet jeśli istnieją różnice funkcjonalne pomiędzy węzłami. Każdy z węzłów klastra ma dostęp do wszystkich (lub prawie wszystkich) danych w systemie. Niespełnienie tego warunku może przeczyć takim cechom klastrów, jak dystrybucja zadań czy skalowalność.
Warto zwrócić uwagę, że równouprawniony dostęp do danych w klastrach ma miejsce zarówno w przypadku klastrów dzielących dane (ang. shared data), których wszystkie węzły fizycznie są podłączone do pamięci stałej, jak i takich, które nie dzielą pamięci stałej (ang. shared-nothing). W drugim przypadku węzeł, chcący uzyskać dostęp do danych, które nie są osiągalne lokalnie, przekazuje żądanie do węzła, które je posiada.