PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara Menyebarkan PostgreSQL ke Wadah Docker Menggunakan ClusterControl

Docker telah menjadi alat paling umum untuk membuat, menyebarkan, dan menjalankan aplikasi dengan menggunakan wadah. Ini memungkinkan kita untuk mengemas aplikasi dengan semua bagian yang dibutuhkannya, seperti perpustakaan dan dependensi lainnya, dan mengirimkan semuanya sebagai satu paket. Docker dapat dianggap sebagai mesin virtual, tetapi alih-alih membuat keseluruhan sistem operasi virtual, Docker mengizinkan aplikasi untuk menggunakan kernel Linux yang sama dengan sistem yang mereka jalankan dan hanya memerlukan aplikasi untuk dikirimkan dengan hal-hal yang belum berjalan. komputer tuan rumah. Ini memberikan peningkatan kinerja yang signifikan dan mengurangi ukuran aplikasi.

Di blog ini, kita akan melihat bagaimana kita dapat dengan mudah menerapkan pengaturan PostgreSQL melalui Docker, dan cara mengubah pengaturan kita menjadi pengaturan replikasi primer/siaga dengan menggunakan ClusterControl.

Cara Menyebarkan PostgreSQL dengan Docker

Pertama, mari kita lihat cara men-deploy PostgreSQL dengan Docker secara manual menggunakan PostgreSQL Docker Image.

Gambar tersedia di Docker Hub dan Anda dapat menemukannya dari baris perintah:

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

Kami akan mengambil hasil pertama. Yang Resmi. Jadi, kita perlu menarik gambarnya:

$ docker pull postgres

Dan jalankan wadah node yang memetakan port lokal ke port database ke dalam wadah:

$ 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

Setelah menjalankan perintah ini, Anda harus membuat lingkungan Docker ini:

$ 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

Sekarang, Anda dapat mengakses setiap node dengan perintah berikut:

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

Kemudian, Anda dapat membuat pengguna database, mengubah konfigurasi sesuai kebutuhan Anda, atau mengonfigurasi replikasi antar node secara manual.

Cara Mengimpor Kontainer PostgreSQL Anda ke ClusterControl

Resource terkait ClusterControl untuk PostgreSQL Men-deploy PostgreSQL pada Container Docker Menggunakan Kubernetes untuk Men-deploy PostgreSQL

Sekarang setelah Anda menyiapkan klaster PostgreSQL, Anda masih perlu memantaunya, memperingatkan jika terjadi masalah kinerja, mengelola pencadangan, mendeteksi kegagalan, dan secara otomatis melakukan failover ke server yang sehat.

Jika Anda sudah memiliki cluster PostgreSQL yang berjalan di Docker dan Anda ingin ClusterControl mengelolanya, Anda cukup menjalankan container ClusterControl di jaringan Docker yang sama dengan container database. Satu-satunya persyaratan adalah memastikan wadah target memiliki paket terkait SSH yang diinstal (openssh-server, openssh-clients). Kemudian izinkan SSH tanpa kata sandi dari ClusterControl ke wadah basis data. Setelah selesai, gunakan fitur “Import Existing Server/Cluster” dan cluster harus diimpor ke ClusterControl.

Pertama, mari Instal paket terkait OpenSSH pada wadah basis data, izinkan login root, mulai dan atur kata sandi root:

$ 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

Mulai wadah ClusterControl (jika belum dimulai) dan teruskan port 80 pada wadah ke port 5000 di host:

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

Pastikan wadah ClusterControl aktif:

$ 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

Buka browser web, buka http://[Docker_Host]:5000/clustercontrol dan buat pengguna dan kata sandi admin default. Anda sekarang akan melihat halaman utama ClusterControl.

Langkah terakhir adalah menyiapkan SSH tanpa kata sandi ke semua wadah basis data. Untuk ini, kita perlu mengetahui Alamat IP untuk setiap node database. Untuk mengetahuinya, kita dapat menjalankan perintah berikut untuk setiap node:

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

Kemudian, lampirkan ke konsol interaktif wadah ClusterControl:

$ docker exec -it clustercontrol bash

Salin kunci SSH ke semua wadah basis data:

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

Sekarang, kita dapat mulai mengimpor cluster ke ClusterControl. Buka browser web dan buka alamat IP host fisik Docker dengan port yang dipetakan, mis. http://192.168.100.150:5000/clustercontrol , klik “Impor Server/Cluster yang Ada”, lalu tambahkan informasi berikut.

Kami harus menentukan Pengguna, Kunci atau Kata Sandi dan port untuk terhubung dengan SSH ke server kami. Kami juga membutuhkan nama untuk cluster baru kami.

Setelah mengatur informasi akses SSH, kita harus menentukan pengguna database, versi, basis dan Alamat IP atau Nama Host untuk setiap node database.

Pastikan Anda mendapatkan centang hijau saat memasukkan nama host atau alamat IP, yang menunjukkan bahwa ClusterControl dapat berkomunikasi dengan node. Kemudian, klik tombol Import dan tunggu hingga ClusterControl menyelesaikan tugasnya. Anda dapat memantau prosesnya di Bagian Aktivitas ClusterControl.

Cluster database akan terdaftar di bawah dashboard ClusterControl setelah diimpor.

Perhatikan bahwa, jika Anda hanya memiliki node master PostgreSQL, Anda dapat menambahkannya ke ClusterControl. Kemudian Anda dapat menambahkan node siaga dari UI ClusterControl agar ClusterControl dapat mengonfigurasinya untuk Anda.

ClusterControlSingle Console untuk Seluruh Infrastruktur Basis Data AndaCari tahu apa lagi yang baru di ClusterControlInstall ClusterControl GRATIS

Cara Menyebarkan Wadah PostgreSQL Anda dengan ClusterControl

Sekarang, mari kita lihat cara men-deploy PostgreSQL dengan Docker dengan menggunakan CentOS Docker Image (severalnines/centos-ssh) dan ClusterControl Docker Image (severalnines/clustercontrol).

Pertama, kita akan men-deploy ClusterControl Docker Container menggunakan versi terbaru, jadi kita perlu menarik Multiplenine/clustercontrol Docker Image.

$ docker pull severalnines/clustercontrol

Kemudian, kita akan menjalankan container ClusterControl dan memublikasikan port 5000 untuk mengaksesnya.

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

Sekarang Anda dapat membuka UI ClusterControl di http://[Docker_Host]:5000/clustercontrol dan buat pengguna dan kata sandi admin default.

Multiplenines/centos-ssh hadir dengan, selain layanan SSH yang diaktifkan, fitur Penerapan Otomatis, tetapi itu hanya berlaku untuk Galera Cluster. PostgreSQL belum didukung. Jadi, kita akan menyetel variabel AUTO_DEPLOYMENT di 0 dalam perintah docker run untuk membuat node database.

$ 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

Setelah menjalankan perintah ini, kita harus memiliki lingkungan Docker berikut:

$ 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

Kita perlu mengetahui Alamat IP untuk setiap node database. Untuk mengetahuinya, kita dapat menjalankan perintah berikut untuk setiap node:

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

Sekarang kita memiliki node server dan berjalan, kita perlu menggunakan cluster database kita. Untuk membuatnya dengan cara yang mudah, kita akan menggunakan ClusterControl.

Untuk melakukan penerapan dari ClusterControl, buka UI ClusterControl di http://[Docker_Host]:5000/clustercontrol , lalu pilih opsi “Deploy” dan ikuti petunjuk yang muncul.

Saat memilih PostgreSQL, kita harus menentukan User, Key atau Password dan port untuk terhubung dengan SSH ke server kita. Kami juga memerlukan nama untuk cluster baru kami dan jika kami ingin ClusterControl menginstal perangkat lunak dan konfigurasi yang sesuai untuk kami.

Setelah mengatur informasi akses SSH, kita harus menentukan pengguna database, versi dan datadir (opsional). Kami juga dapat menentukan repositori mana yang akan digunakan.

Pada langkah selanjutnya, kita perlu menambahkan server kita ke cluster yang akan kita buat.

Saat menambahkan server kami, kami dapat memasukkan IP atau nama host. Disini kita harus menggunakan IP Address yang kita dapatkan dari masing-masing container sebelumnya.

Pada langkah terakhir, kita dapat memilih apakah replikasi kita akan menjadi Sinkron atau Asinkron.

Kami dapat memantau status pembuatan cluster baru kami dari monitor aktivitas ClusterControl.

Setelah tugas selesai, kita dapat melihat cluster kita di layar ClusterControl utama.

Kesimpulan

Seperti yang bisa kita lihat, penerapan PostgreSQL dengan Docker bisa jadi mudah di awal, tetapi akan membutuhkan sedikit lebih banyak pekerjaan untuk mengonfigurasi replikasi. Terakhir, Anda harus memantau cluster Anda untuk melihat apa yang terjadi. Dengan ClusterControl, Anda dapat mengimpor atau menerapkan cluster PostgreSQL Anda dengan Docker, serta mengotomatiskan tugas pemantauan dan manajemen seperti pencadangan dan failover/pemulihan otomatis. Cobalah.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa yang Baru di PostgreSQL 12

  2. Tren PostgreSQL:Penyedia Cloud Paling Populer, Bahasa, VAKUM, Strategi Manajemen Kueri &Jenis Penerapan di Perusahaan

  3. Bagaimana Pi() Bekerja di PostgreSQL

  4. Menyebarkan Django ke Heroku (Kesalahan Psycopg2)

  5. Panggilan untuk makalah untuk PGDay.IT 2011 telah diperpanjang