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

Cara Memantau PostgreSQL Berjalan Di Dalam Wadah Docker:Bagian Satu

Pemantauan adalah tindakan mengamati dan memeriksa selama periode waktu tertentu untuk melihat bagaimana perkembangan dan kinerja apa yang Anda pantau. Anda melakukannya sehingga Anda dapat membuat perubahan yang diperlukan untuk memastikan semuanya bekerja dengan benar. Sangat penting bahwa proses dipantau untuk menghasilkan wawasan yang baik tentang aktivitas yang sedang dilakukan untuk merencanakan, mengatur, dan menjalankan solusi yang efisien.

Docker adalah program yang dibuat untuk beroperasi sebagai pembangun yang siap menjawab pertanyaan "Apakah perangkat lunak akan berjalan di mesin saya?" Ini pada dasarnya merakit bagian-bagian yang berbeda bersama-sama menciptakan model yang mudah disimpan dan diangkut. Model, juga dikenal sebagai container, dapat dikirimkan ke komputer mana pun yang telah menginstal Docker.

Pada artikel ini kita akan diperkenalkan dengan Docker, menjelaskan beberapa cara konfigurasi dan membandingkannya. Selanjutnya PostgreSQL ikut bermain, dan kami akan menerapkannya di dalam wadah Docker dengan cara yang cerdas, dan terakhir, kami akan melihat manfaat yang dapat diberikan ClusterControl, untuk memantau metrik utama tentang PostgreSQL dan OS di luarnya.

Ikhtisar Docker

Saat Docker dimulai, ia membuat koneksi jaringan baru untuk memungkinkan transmisi data antara dua titik akhir, yang disebut bridge, dan di sinilah container baru disimpan secara default.

Berikut ini, kita akan melihat detail tentang jembatan ini, dan mendiskusikan mengapa penggunaan dalam produksi bukanlah ide yang baik.

$ docker network inspect bridge
Memeriksa jembatan docker default Docker0.

Harap perhatikan opsi yang disematkan, karena jika Anda menjalankan wadah tanpa menentukan jaringan yang diinginkan, Anda akan menyetujuinya.

Pada koneksi jaringan default ini, kami kehilangan beberapa keuntungan bagus dari jaringan, seperti DNS. Bayangkan Anda ingin mengakses Google, alamat mana yang Anda pilih, www.google.com, atau 172.217.165.4?

Saya tidak tahu tentang Anda tetapi saya lebih suka pilihan sebelumnya, dan sejujurnya, saya tidak mengetik 'www.'.

Jaringan Jembatan Buatan Pengguna

Jadi, kami menginginkan DNS dalam koneksi jaringan kami, dan manfaat isolasi, karena bayangkan skenario di mana Anda menyebarkan wadah yang berbeda di dalam jaringan yang sama.

Saat kita membuat wadah Docker, kita bisa memberi nama ke dalamnya, atau Docker membuatnya untuk kita mengacak dua kata yang dihubungkan dengan garis bawah, atau ‘_’.

Jika kita tidak menggunakan Jaringan Jembatan Buatan Pengguna, di masa depan bisa menjadi masalah di tengah-tengah alamat IP, karena kita jelas bukan mesin, dan ingat nilai-nilai ini bisa keras dan rawan kesalahan.

Membuat jembatan khusus, atau Jaringan Jembatan Buatan Pengguna, sangat mudah.

Sebelum membuat yang pertama, untuk lebih memahami prosesnya, mari buka terminal baru, ketik perintah Linux dari paket iproute2, dan lupakan sekarang.

$ ip monitor all
Menginisialisasi terminal untuk memantau lalu lintas jaringan di Host Docker.

Terminal ini sekarang akan mendengarkan aktivitas jaringan dan ditampilkan di sana.

Anda mungkin pernah melihat perintah seperti “ifconfig”, atau “netstat” sebelumnya, dan saya katakan bahwa perintah tersebut tidak digunakan lagi sejak tahun 2001. Paket net-tools masih banyak digunakan, tetapi tidak diperbarui lagi.

Sekarang saatnya untuk membuat jaringan kustom pertama kami, jadi buka terminal lain dan masukkan:

$ docker network create --driver bridge br-db
Membuat Jaringan Jembatan Buatan Pengguna "br-db".

Campuran huruf dan angka yang sangat panjang ini disebut UUID, atau Pengenal Unik Universal. Ini pada dasarnya mengatakan bahwa jaringan telah berhasil dibuat.

Nama yang diberikan untuk jaringan pertama kami yang dibuat secara manual adalah "br-db", dan itu harus di akhir perintah, tetapi sebelum itu, kami memiliki argumen '"-driver", dan kemudian nilai "jembatan" , kenapa?

Di Edisi Komunitas, Docker menyediakan tiga driver berbeda yang tersedia:bridge, host, dan none. Pada waktu pembuatan, seperti ini, defaultnya adalah bridge dan tidak perlu ditentukan, tetapi kami sedang mempelajarinya.

Jika Anda sudah melakukan semuanya dengan saya, lihat terminal lain karena saya akan menjelaskan apa yang terjadi pada Anda.

Docker telah membuat jaringan, yang disebut "br-db", tetapi ini hanya disebut seperti ini olehnya.

Di sisi lain jembatan kustom yang dibuat ini, ada lapisan lain, OS. Nama yang diberikan untuk jaringan jembatan yang sama telah berubah, dan menjadi representasi dari nomenklatur untuk jembatan, “br”, diikuti oleh 12 karakter pertama dari nilai UUID di atas, dengan warna merah.

Memantau perubahan alamat IP Docker.

Dengan koneksi jaringan baru kami, kami memiliki subnet, gateway, dan broadcast.

Gateway, seperti namanya, adalah tempat semua lalu lintas paket terjadi di antara titik akhir jembatan, dan ini disebut "inet" untuk OS seperti yang Anda lihat.

Broadcast berdiri di alamat IP terakhir, dan bertanggung jawab untuk mengirimkan lalu lintas data yang sama untuk semua alamat IP di subnet bila diperlukan.

Mereka selalu hadir dalam koneksi jaringan, dan inilah mengapa kami memiliki di awal output, nilai "[ADDR]". Nilai ini mewakili perubahan alamat IP, dan ini seperti peristiwa yang dipicu untuk pemantauan aktivitas jaringan, karena kami telah membuat koneksi jaringan baru!

Kontainer Docker

Kunjungi Docker Hub, dan lihat apa yang ada di sana dikenal sebagai Docker Image, dan itu pada dasarnya adalah kerangka wadah (model).

Gambar Docker dihasilkan oleh Dockerfiles, dan berisi semua informasi yang diperlukan untuk membuat wadah, untuk memudahkan pemeliharaan dan penyesuaian.

Jika Anda memperhatikan Docker Hub, mudah untuk melihat bahwa gambar PostgreSQL, yang disebut postgres, memiliki tag dan versi yang berbeda, dan jika Anda tidak menentukan salah satunya, defaultnya akan digunakan, yang terbaru, tetapi mungkin dalam di masa mendatang jika Anda memerlukan wadah PostgreSQL yang berbeda untuk bekerja bersama, Anda mungkin menginginkannya dalam versi yang sama.

Mari buat container kanan pertama kita sekarang, ingat perlunya argumen '--network', atau akan di-deploy di bridge default.

$ docker container run --name postgres-1 --network br-db -e POSTGRES_PASSWORD=5af45Q4ae3Xa3Ff4 -p 6551:5432 -d postgres
Menjalankan wadah PostgreSQL ke dalam jaringan "br-db".

Sekali lagi UUID, sukses, dan di terminal lain, apa yang terjadi?

Perubahan antarmuka jaringan adalah peristiwa yang terjadi sekarang, atau cukup “[LINK]”. Apa pun setelah "veth" yang bisa Anda lupakan, percayalah, nilainya selalu berubah saat penampung dimulai ulang atau hal serupa terjadi.

Memantau perubahan antarmuka jaringan Docker.

Pilihan lain “-e POSTGRES_PASSWORD=?” singkatan dari Environment, dan hanya tersedia saat menjalankan container PostgreSQL, ini mengonfigurasi kata sandi untuk akun pengguna super dalam database, yang disebut postgres.

Publish adalah nama panjang untuk parameter “-p 6551:5432”, dan pada dasarnya membuat port OS 6551 terikat dua arah ke port 5432 container.

Terakhir namun tidak kalah pentingnya, adalah opsi Lepas, “-d”, dan yang dilakukannya adalah membuat peti kemas berjalan secara independen dari terminal ini.

Nama Gambar Docker harus di akhir, mengikuti pola yang sama dari pembuatan jaringan, memiliki semua argumen dan opsi di sebelah kiri, dan di akhir hal yang paling penting, dalam hal ini, nama gambar.

Ingatlah bahwa wadah disimpan di subnet jaringan, berdiri di atas alamat IP yang diizinkan untuk masing-masing wadah, dan wadah tersebut tidak akan pernah berada di alamat pertama atau terakhir, karena Gateway dan Broadcast akan selalu ada.

Kami telah menunjukkan detail jembatan yang dibuat, dan sekarang akan ditampilkan oleh masing-masing titik akhir, detail ini disimpan oleh mereka.

$ docker network inspect br-db
Memeriksa Antarmuka Jaringan Buatan Pengguna Docker "br-db".
$ brctl show
Menampilkan informasi tentang Jaringan Jembatan Buatan Pengguna oleh Host Docker.

Seperti yang Anda lihat, nama jaringan dan wadah berbeda, yang kedua dikenali sebagai antarmuka oleh OS, yang disebut "veth768ff71", dan nama asli yang diberikan oleh kami "postgres-1" untuk Docker.

Dalam perintah Docker dimungkinkan untuk mencatat alamat IP untuk wadah yang dibuat sebelumnya, subnet yang cocok dengan apa yang muncul di terminal lain dibuka beberapa saat yang lalu, dan terakhir opsi kosong untuk jaringan khusus ini.

Perintah Linux “brctl show” adalah bagian dari paket bridge-utils, dan seperti namanya, tujuannya adalah untuk menyediakan seperangkat alat untuk mengonfigurasi dan mengelola jembatan Ethernet Linux.

Jaringan Jembatan Khusus Lainnya

Kami akan membahas tentang DNS segera, tetapi sudah sangat baik membuat segalanya menjadi sederhana bagi kami di masa depan. Konfigurasi yang bagus cenderung membuat masa pakai DBA lebih mudah di masa mendatang.

Dengan jaringan yang sama, sehingga kita dapat mengubah cara OS mengenali subnet alamat dan nama jaringan menambahkan lebih banyak argumen pada waktu pembuatan.

$ docker network create --driver bridge --subnet 172.23.0.0/16 -o “com.docker.network.bridge.name”=”bridge-host” bridge-docker
Membuat Antarmuka Jaringan Jembatan Buatan Pengguna dengan opsi khusus.
$ ip route show
Menampilkan tabel perutean Docker.

Dengan perintah Linux ini, kita dapat melihat hal yang hampir sama dengan perintah sebelumnya, tetapi sekarang alih-alih membuat daftar antarmuka "veth" untuk setiap jaringan, kita hanya memiliki "linkdown" yang menampilkan antarmuka yang kosong.

Alamat subnet yang diinginkan telah ditentukan sebagai argumen, dan mirip dengan opsi Lingkungan untuk pembuatan wadah, untuk jaringan kami memiliki "-o" diikuti oleh pasangan kunci dan nilai. Dalam hal ini, kami memberi tahu Docker, untuk memberi tahu OS, bahwa ia harus memanggil jaringan sebagai “bridge-host”.

Keberadaan ketiga jaringan tersebut dapat diverifikasi di Docker juga, cukup masukkan:

$ docker network ls
Menampilkan antarmuka jaringan di Mesin Docker.

Sekarang kita telah membahas sebelumnya bahwa nilai "veth" untuk wadah ini tidak penting, dan saya akan menunjukkannya kepada Anda dalam praktik.

Latihan ini terdiri dari memverifikasi nilai saat ini, kemudian memulai ulang penampung, lalu memverifikasi lagi. Untuk melakukannya, kita memerlukan campuran perintah Linux yang digunakan sebelumnya, dan perintah Docker, yang baru di sini tetapi sangat sederhana:

$ brctl show
$ docker container stop postgres-1
$ docker container start postgres-1
$ brctl show
Memeriksa bagaimana "iptables" membuat nama wadah tidak stabil untuk Host Docker.

Saat penampung dihentikan, alamat IP harus dibebaskan untuk menerima yang baru jika perlu, dan itu adalah pengingat betapa pentingnya DNS.

OS memberikan nama-nama ini untuk antarmuka setiap kali wadah berdiri di alamat IP, dan mereka dihasilkan menggunakan paket iptables, yang akan segera digantikan oleh kerangka kerja baru yang disebut nftables.

Tidak disarankan untuk mengubah aturan ini, tetapi ada alat yang tersedia untuk membantu visualisasinya, jika perlu, seperti dockerveth.

Kebijakan Restart Penampung

Ketika kita me-restart program Docker, atau bahkan komputer, jaringan yang dibuat olehnya disimpan di OS, tetapi kosong.

Kontainer memiliki apa yang disebut Kebijakan Restart Kontainer, dan ini adalah argumen lain yang sangat penting yang ditentukan pada waktu pembuatan. PostgreSQL, sebagai database produksi, ketersediaannya sangat penting, dan inilah cara Docker dapat membantunya.

$ docker container run --name postgres-2 --network bridge-docker --restart always -e POSTGRES_PASSWORD=5af45Q4ae3Xa3Ff4 -p 6552:5432 -d postgres
Menentukan Kebijakan Mulai Ulang Penampung pada waktu pembuatan.

Kecuali Anda menghentikannya secara manual, wadah “postgres-2” ini akan selalu tersedia.

Untuk memahaminya lebih baik, container yang sedang berjalan akan ditampilkan dan program Docker di-restart, kemudian langkah pertama lagi:

$ docker container ls
$ systemctl restart docker
$ docker container ls
Memeriksa Kebijakan Restart Penampung di "postgres-2".

Hanya wadah "postgres-2" yang berjalan, wadah "postgres-1" lainnya tidak dimulai sendiri. Informasi lebih lanjut tentangnya dapat dilihat di Dokumentasi Docker.

Sistem Nama Domain (DNS)

Salah satu manfaat dari Jaringan Jembatan yang Ditentukan Pengguna adalah organisasi, tentu saja, karena kita dapat membuat sebanyak yang kita inginkan untuk menjalankan wadah baru dan bahkan menghubungkan yang lama, tetapi manfaat lain yang tidak kita miliki menggunakan jembatan default Docker, adalah DNS.

Saat container perlu berkomunikasi satu sama lain dapat menyulitkan DBA untuk mengingat alamat IP, dan kami telah membahasnya sebelumnya dengan menunjukkan contoh www.google.com dan 172.217.165.4. DNS memecahkan masalah ini dengan mulus, memungkinkan untuk berinteraksi dengan container menggunakan nama yang diberikan pada waktu pembuatan oleh kami, seperti "postgres-2", alih-alih alamat IP "172.23.0.2".

Mari kita lihat cara kerjanya. Kami akan membuat wadah lain hanya untuk tujuan demonstrasi di jaringan yang sama yang disebut "postgres-3", kemudian, kami akan menginstal paket iputils-ping untuk mengirimkan paket data ke wadah "postgres-2", menggunakan namanya tentu saja .

$ docker container run --name postgres-3 --network bridge-docker --restart always -e POSTGRES_PASSWORD=5af45Q4ae3Xa3Ff4 -p 6553:5432 -d postgres
$ docker container exec -it postgres-3 bash

Untuk pemahaman yang lebih baik mari kita pisahkan menjadi beberapa bagian, pada output berikut, panah biru akan menunjukkan kapan perintah dilakukan di dalam wadah, dan merah, di OS.

Menjalankan penampung sementara untuk menguji DNS yang disediakan oleh Antarmuka Jaringan Jembatan Buatan Pengguna.
$ apt-get update && apt-get install -y iputils-ping
Menginstal paket "iputils-ping" untuk menguji DNS.
$ ping postgres-2
Menampilkan DNS berfungsi dengan baik.

Ringkasan

PostgreSQL berjalan di dalam Docker, dan ketersediaannya dijamin sekarang. Saat digunakan di dalam Jaringan Jembatan Buatan Pengguna, wadah dapat dikelola lebih mudah dengan banyak manfaat seperti DNS, alamat subnet khusus, dan nama OS untuk jaringan tersebut.

Kami telah melihat detail tentang Docker, dan pentingnya mengetahui paket dan kerangka kerja yang diperbarui pada OS.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya bisa memulai server PostgreSQL di Mac OS X?

  2. Apakah mungkin untuk mendefinisikan variabel global di postgresql

  3. Tips untuk Memantau PostgreSQL untuk Moodle

  4. Bagaimana cara membuat indeks pada bidang JSON di Postgres?

  5. Fungsi GREATEST() di PostgreSQL