PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak wdrożyć PostgreSQL w kontenerze Docker za pomocą ClusterControl

Docker stał się najpopularniejszym narzędziem do tworzenia, wdrażania i uruchamiania aplikacji przy użyciu kontenerów. Pozwala nam spakować aplikację ze wszystkimi potrzebnymi jej częściami, takimi jak biblioteki i inne zależności, i wysłać to wszystko jako jeden pakiet. Docker można uznać za maszynę wirtualną, ale zamiast tworzyć cały wirtualny system operacyjny, Docker umożliwia aplikacjom korzystanie z tego samego jądra Linuksa, co system, na którym działają, i wymaga jedynie dostarczenia aplikacji z elementami, na których jeszcze nie działają komputer hosta. Daje to znaczny wzrost wydajności i zmniejsza rozmiar aplikacji.

W tym blogu zobaczymy, jak możemy łatwo wdrożyć konfigurację PostgreSQL za pomocą Dockera i jak zmienić naszą konfigurację w konfigurację replikacji podstawowej/wstrzymanej za pomocą ClusterControl.

Jak wdrożyć PostgreSQL za pomocą Dockera

Najpierw zobaczmy, jak ręcznie wdrożyć PostgreSQL za pomocą Dockera, używając obrazu Docker PostgreSQL.

Obraz jest dostępny w Docker Hub i można go znaleźć w wierszu poleceń:

$ docker search postgres
NAME                                         DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
postgres                                     The PostgreSQL object-relational database sy…   6519                [OK]

Weźmiemy pierwszy wynik. Oficjalny. Musimy więc wyciągnąć obraz:

$ docker pull postgres

I uruchom kontenery węzłów mapujące port lokalny na port bazy danych w kontenerze:

$ docker run -d --name node1 -p 6551:5432 postgres
$ docker run -d --name node2 -p 6552:5432 postgres
$ docker run -d --name node3 -p 6553:5432 postgres

Po uruchomieniu tych poleceń powinieneś mieć utworzone następujące środowisko Docker:

$ docker ps
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS                 PORTS                                                                                     NAMES
51038dbe21f8        postgres                      "docker-entrypoint.s…"   About an hour ago   Up About an hour       0.0.0.0:6553->5432/tcp                                                                    node3
b7a4211744e3        postgres                      "docker-entrypoint.s…"   About an hour ago   Up About an hour       0.0.0.0:6552->5432/tcp                                                                    node2
229c6bd23ff4        postgres                      "docker-entrypoint.s…"   About an hour ago   Up About an hour       0.0.0.0:6551->5432/tcp                                                                    node1

Teraz możesz uzyskać dostęp do każdego węzła za pomocą następującego polecenia:

$ docker exec -ti [db-container] bash
$ su postgres
$ psql
psql (11.2 (Debian 11.2-1.pgdg90+1))
Type "help" for help.
postgres=#

Następnie możesz utworzyć użytkownika bazy danych, zmienić konfigurację zgodnie z własnymi wymaganiami lub ręcznie skonfigurować replikację między węzłami.

Jak zaimportować kontenery PostgreSQL do ClusterControl

Powiązane zasoby ClusterControl for PostgreSQL Wdrażanie PostgreSQL w kontenerze Docker Używanie Kubernetes do wdrażania PostgreSQL

Teraz, gdy masz już skonfigurowany klaster PostgreSQL, nadal musisz go monitorować, ostrzegać w przypadku problemów z wydajnością, zarządzać kopiami zapasowymi, wykrywać awarie i automatycznie przełączać się na sprawny serwer.

Jeśli masz już klaster PostgreSQL działający na platformie Docker i chcesz, aby ClusterControl nim zarządzał, możesz po prostu uruchomić kontener ClusterControl w tej samej sieci Docker, co kontenery bazy danych. Jedynym wymaganiem jest upewnienie się, że kontenery docelowe mają zainstalowane pakiety związane z SSH (openssh-server, openssh-clients). Następnie zezwól na bezhasłowe SSH z ClusterControl do kontenerów bazy danych. Po zakończeniu użyj funkcji „Importuj istniejący serwer/klaster”, a klaster należy zaimportować do ClusterControl.

Najpierw zainstalujmy pakiety związane z OpenSSH w kontenerach bazy danych, zezwólmy na logowanie roota, uruchom go i ustawmy hasło roota:

$ docker exec -ti [db-container] apt-get update
$ docker exec -ti [db-container] apt-get install -y openssh-server openssh-client
$ docker exec -it [db-container] sed -i 's|^PermitRootLogin.*|PermitRootLogin yes|g' /etc/ssh/sshd_config
$ docker exec -it [db-container] sed -i 's|^#PermitRootLogin.*|PermitRootLogin yes|g' /etc/ssh/sshd_config
$ docker exec -ti [db-container] service ssh start
$ docker exec -it [db-container] passwd

Uruchom kontener ClusterControl (jeśli nie jest uruchomiony) i przekieruj port 80 w kontenerze do portu 5000 na hoście:

$ docker run -d --name clustercontrol -p 5000:80 severalnines/clustercontrol

Sprawdź, czy kontener ClusterControl jest uruchomiony:

$ docker ps | grep clustercontrol
7eadb6bb72fb        severalnines/clustercontrol   "/entrypoint.sh"         4 hours ago         Up 4 hours (healthy)   22/tcp, 443/tcp, 3306/tcp, 9500-9501/tcp, 9510-9511/tcp, 9999/tcp, 0.0.0.0:5000->80/tcp   clustercontrol

Otwórz przeglądarkę internetową, przejdź do http://[Docker_Host]:5000/clustercontrol i utwórz domyślnego użytkownika i hasło administratora. Powinieneś teraz zobaczyć główną stronę ClusterControl.

Ostatnim krokiem jest skonfigurowanie bezhasłowego SSH do wszystkich kontenerów bazy danych. W tym celu musimy znać adres IP każdego węzła bazy danych. Aby to wiedzieć, możemy uruchomić następujące polecenie dla każdego węzła:

$ docker inspect [db-container] |grep IPAddress
            "IPAddress": "172.17.0.6",

Następnie podłącz do interaktywnej konsoli kontenera ClusterControl:

$ docker exec -it clustercontrol bash

Skopiuj klucz SSH do wszystkich kontenerów bazy danych:

$ ssh-copy-id 172.17.0.6
$ ssh-copy-id 172.17.0.7
$ ssh-copy-id 172.17.0.8

Teraz możemy zacząć importować klaster do ClusterControl. Otwórz przeglądarkę internetową i przejdź do adresu IP fizycznego hosta platformy Docker z zamapowanym portem, np. http://192.168.100.150:5000/clustercontrol , kliknij „Importuj istniejący serwer/klaster”, a następnie dodaj następujące informacje.

Musimy określić Użytkownika, Klucz lub Hasło i port, aby połączyć się przez SSH z naszymi serwerami. Potrzebujemy również nazwy dla naszego nowego klastra.

Po skonfigurowaniu informacji o dostępie SSH, musimy zdefiniować użytkownika bazy danych, wersję, basedir oraz adres IP lub nazwę hosta dla każdego węzła bazy danych.

Upewnij się, że podczas wprowadzania nazwy hosta lub adresu IP pojawia się zielony haczyk, co oznacza, że ​​ClusterControl może komunikować się z węzłem. Następnie kliknij przycisk Importuj i poczekaj, aż ClusterControl zakończy swoje zadanie. Możesz monitorować proces w sekcji Aktywność ClusterControl.

Klaster bazy danych zostanie wyświetlony w panelu ClusterControl po zaimportowaniu.

Zauważ, że jeśli masz tylko węzeł główny PostgreSQL, możesz dodać go do ClusterControl. Następnie możesz dodać węzły rezerwowe z interfejsu użytkownika ClusterControl, aby umożliwić ClusterControl skonfigurowanie ich za Ciebie.

ClusterControlSingle Console dla całej infrastruktury bazy danychDowiedz się, co jeszcze nowego w ClusterControlZainstaluj ClusterControl ZA DARMO

Jak wdrożyć kontenery PostgreSQL za pomocą ClusterControl

Zobaczmy teraz, jak wdrożyć PostgreSQL za pomocą platformy Docker przy użyciu obrazu dockera CentOS (severalnines/centos-ssh) i obrazu dockera ClusterControl (severalnines/clustercontrol).

Najpierw wdrożymy ClusterControl Docker Container przy użyciu najnowszej wersji, więc musimy pobrać kilka dziewiątek/Clustercontrol Docker Image.

$ docker pull severalnines/clustercontrol

Następnie uruchomimy kontener ClusterControl i opublikujemy port 5000, aby uzyskać do niego dostęp.

$ docker run -d --name clustercontrol -p 5000:80 severalnines/clustercontrol

Teraz możesz otworzyć interfejs użytkownika ClusterControl pod adresem http://[Docker_Host]:5000/clustercontrol i utwórz domyślnego administratora i hasło.

Kilkadziesiąt dziewięć / centos-ssh zawiera, oprócz włączonej usługi SSH, funkcję automatycznego wdrażania, ale jest ona ważna tylko dla klastra Galera. PostgreSQL nie jest jeszcze obsługiwany. Dlatego ustawimy zmienną AUTO_DEPLOYMENT na 0 w poleceniu docker run, aby utworzyć węzły bazy danych.

$ docker run -d --name postgres1 -p 5551:5432 --link clustercontrol:clustercontrol -e AUTO_DEPLOYMENT=0 severalnines/centos-ssh
$ docker run -d --name postgres2 -p 5552:5432 --link clustercontrol:clustercontrol -e AUTO_DEPLOYMENT=0 severalnines/centos-ssh
$ docker run -d --name postgres3 -p 5553:5432 --link clustercontrol:clustercontrol -e AUTO_DEPLOYMENT=0 severalnines/centos-ssh

Po uruchomieniu tych poleceń powinniśmy mieć następujące środowisko Docker:

$ docker ps
CONTAINER ID        IMAGE                         COMMAND             CREATED             STATUS                    PORTS                                                                                     NAMES
0df916b918a9        severalnines/centos-ssh       "/entrypoint.sh"    4 seconds ago       Up 3 seconds              22/tcp, 3306/tcp, 9999/tcp, 27107/tcp, 0.0.0.0:5553->5432/tcp                             postgres3
4c1829371b5e        severalnines/centos-ssh       "/entrypoint.sh"    11 seconds ago      Up 10 seconds             22/tcp, 3306/tcp, 9999/tcp, 27107/tcp, 0.0.0.0:5552->5432/tcp                             postgres2
79d4263dd7a1        severalnines/centos-ssh       "/entrypoint.sh"    32 seconds ago      Up 31 seconds             22/tcp, 3306/tcp, 9999/tcp, 27107/tcp, 0.0.0.0:5551->5432/tcp                             postgres1
7eadb6bb72fb        severalnines/clustercontrol   "/entrypoint.sh"    38 minutes ago      Up 38 minutes (healthy)   22/tcp, 443/tcp, 3306/tcp, 9500-9501/tcp, 9510-9511/tcp, 9999/tcp, 0.0.0.0:5000->80/tcp   clustercontrol

Musimy znać adres IP każdego węzła bazy danych. Aby to wiedzieć, możemy uruchomić następujące polecenie dla każdego węzła:

$ docker inspect [db-container] |grep IPAddress
            "IPAddress": "172.17.0.3",

Teraz, gdy mamy już działające węzły serwerów, musimy wdrożyć nasz klaster baz danych. Aby to ułatwić, użyjemy ClusterControl.

Aby przeprowadzić wdrożenie z ClusterControl, otwórz interfejs użytkownika ClusterControl pod adresem http://[Docker_Host]:5000/clustercontrol , a następnie wybierz opcję „Wdróż” i postępuj zgodnie z wyświetlanymi instrukcjami.

Wybierając PostgreSQL, musimy określić Użytkownika, Klucz lub Hasło i port, aby połączyć się przez SSH z naszymi serwerami. Potrzebujemy również nazwy dla naszego nowego klastra i jeśli chcemy, aby ClusterControl zainstalował dla nas odpowiednie oprogramowanie i konfiguracje.

Po skonfigurowaniu informacji dostępowych SSH musimy zdefiniować użytkownika bazy danych, wersję i datadir (opcjonalnie). Możemy również określić, którego repozytorium użyć.

W następnym kroku musimy dodać nasze serwery do klastra, który zamierzamy utworzyć.

Dodając nasze serwery możemy podać IP lub nazwę hosta. Tutaj musimy użyć adresu IP, który otrzymaliśmy wcześniej z każdego kontenera.

W ostatnim kroku możemy wybrać, czy nasza replikacja będzie synchroniczna czy asynchroniczna.

Możemy monitorować stan tworzenia naszego nowego klastra z monitora aktywności ClusterControl.

Po zakończeniu zadania możemy zobaczyć nasz klaster na głównym ekranie ClusterControl.

Wniosek

Jak widzieliśmy, wdrożenie PostgreSQL z Dockerem może być na początku łatwe, ale wymaga nieco więcej pracy, aby skonfigurować replikację. Na koniec powinieneś monitorować swój klaster, aby zobaczyć, co się dzieje. Dzięki ClusterControl możesz importować lub wdrażać swój klaster PostgreSQL za pomocą Dockera, a także zautomatyzować zadania monitorowania i zarządzania, takie jak tworzenie kopii zapasowych i automatyczne przełączanie awaryjne/odzyskiwanie. Wypróbuj.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. org.postgresql.util.PSQLException:FATAL:przepraszam, już za dużo klientów

  2. Jak zmienić kolumnę PG na NULLABLE TRUE?

  3. Najlepsze praktyki replikacji PostgreSQL — część 1

  4. Eksportuj dane tabeli Postgresql za pomocą pgAdmin

  5. Klauzula ORDER BY ... USING w PostgreSQL