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 PostgreSQLSekarang 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 GRATISCara 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.