Saat ini, Docker adalah 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. Itu dapat dianggap sebagai mesin virtual, tetapi alih-alih membuat keseluruhan sistem operasi virtual, Docker memungkinkan aplikasi untuk menggunakan kernel Linux yang sama dengan sistem yang mereka jalankan dan hanya membutuhkan aplikasi untuk dikirimkan dengan hal-hal yang belum berjalan. komputer tuan rumah. Ini memberikan peningkatan kinerja yang signifikan dan mengurangi ukuran aplikasi.
Dalam hal Gambar Docker, mereka datang dengan versi OS yang telah ditentukan dan paket diinstal dengan cara yang diputuskan oleh orang yang membuat gambar. Mungkin Anda ingin menggunakan OS yang berbeda atau mungkin Anda ingin menginstal paket dengan cara yang berbeda. Untuk kasus ini, Anda harus menggunakan OS Docker Image yang bersih dan menginstal perangkat lunak dari awal.
Replikasi adalah fitur umum dalam lingkungan database, jadi setelah TimescaleDB Docker Images diterapkan, jika Anda ingin mengonfigurasi pengaturan replikasi, Anda harus melakukannya secara manual dari wadah, dengan menggunakan file Docker atau bahkan skrip. Tugas ini bisa rumit jika Anda tidak memiliki pengetahuan Docker.
Di blog ini, kita akan melihat bagaimana kita dapat menerapkan TimescaleDB melalui Docker dengan menggunakan Gambar Docker TimescaleDB, dan kemudian, kita akan melihat cara menginstalnya dari awal dengan menggunakan Gambar Docker CentOS dan ClusterControl.
Cara Menyebarkan TimescaleDB dengan Gambar Docker
Pertama, mari kita lihat cara men-deploy TimescaleDB dengan menggunakan Docker Image yang tersedia di Docker Hub.
$ docker search timescaledb
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
timescale/timescaledb An open-source time-series database optimize… 52
Kami akan mengambil hasil pertama. Jadi, kita perlu menarik gambar ini:
$ docker pull timescale/timescaledb
Dan jalankan wadah node yang memetakan port lokal ke port database ke dalam wadah:
$ docker run -d --name timescaledb1 -p 7551:5432 timescale/timescaledb
$ docker run -d --name timescaledb2 -p 7552:5432 timescale/timescaledb
Setelah menjalankan perintah ini, Anda harus membuat lingkungan Docker ini:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6d3bfc75fe39 timescale/timescaledb "docker-entrypoint.s…" 15 minutes ago Up 15 minutes 0.0.0.0:7552->5432/tcp timescaledb2
748d5167041f timescale/timescaledb "docker-entrypoint.s…" 16 minutes ago Up 16 minutes 0.0.0.0:7551->5432/tcp timescaledb1
Sekarang, Anda dapat mengakses setiap node dengan perintah berikut:
$ docker exec -ti [db-container] bash
$ su postgres
$ psql
psql (9.6.13)
Type "help" for help.
postgres=#
Seperti yang Anda lihat, Gambar Docker ini berisi versi TimescaleDB 9.6 secara default, dan diinstal di Alpine Linux v3.9. Anda dapat menggunakan versi TimescaleDB yang berbeda dengan mengubah tag:
$ docker pull timescale/timescaledb:latest-pg11
Kemudian, Anda dapat membuat pengguna database, mengubah konfigurasi sesuai kebutuhan Anda, atau mengonfigurasi replikasi antar node secara manual.
Cara Menyebarkan TimescaleDB dengan ClusterControl
Sekarang, mari kita lihat cara men-deploy TimescaleDB dengan Docker dengan menggunakan CentOS Docker Image (centos) 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, kita dapat membuka UI ClusterControl di http://[Docker_Host]:5000/clustercontrol dan membuat pengguna dan kata sandi admin default.
Gambar Docker Resmi CentOS hadir tanpa layanan SSH, jadi kami akan menginstalnya dan mengizinkan koneksi dari node ClusterControl tanpa kata sandi dengan menggunakan kunci SSH.
$ docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 5378 [OK]
Jadi, kami akan menarik Gambar Docker Resmi CentOS.
$ docker pull centos
Kemudian, kita akan menjalankan dua wadah node, timescale1 dan timescale2, yang ditautkan dengan ClusterControl dan kita akan memetakan port lokal untuk terhubung ke database (opsional).
$ docker run -dt --privileged --name timescale1 -p 8551:5432 --link clustercontrol:clustercontrol centos /usr/sbin/init
$ docker run -dt --privileged --name timescale2 -p 8552:5432 --link clustercontrol:clustercontrol centos /usr/sbin/init
Karena kita perlu menginstal dan mengonfigurasi layanan SSH, kita perlu menjalankan container dengan parameter istimewa dan /usr/sbin/init untuk dapat mengelola layanan di dalam container.
Setelah menjalankan perintah ini, kita harus membuat lingkungan Docker ini:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
230686d8126e centos "/usr/sbin/init" 4 seconds ago Up 3 seconds 0.0.0.0:8552->5432/tcp timescale2
c0e7b245f7fe centos "/usr/sbin/init" 23 seconds ago Up 22 seconds 0.0.0.0:8551->5432/tcp timescale1
7eadb6bb72fb severalnines/clustercontrol "/entrypoint.sh" 2 weeks ago Up About an hour (healthy) 22/tcp, 443/tcp, 3306/tcp, 9500-9501/tcp, 9510-9511/tcp, 9999/tcp, 0.0.0.0:5000->80/tcp clustercontrol
Kita dapat mengakses setiap node dengan perintah berikut:
$ docker exec -ti [db-container] bash
Seperti yang kami sebutkan sebelumnya, kami perlu menginstal layanan SSH, jadi mari kita instal, izinkan akses root dan atur kata sandi root untuk setiap wadah basis data:
$ docker exec -ti [db-container] yum update -y
$ docker exec -ti [db-container] yum install -y openssh-server openssh-clients
$ docker exec -it [db-container] sed -i 's|^#PermitRootLogin.*|PermitRootLogin yes|g' /etc/ssh/sshd_config
$ docker exec -it [db-container] systemctl start sshd
$ docker exec -it [db-container] passwd
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.5",
Kemudian, lampirkan ke konsol interaktif wadah ClusterControl:
$ docker exec -it clustercontrol bash
Dan salin kunci SSH ke semua wadah basis data:
$ ssh-copy-id 172.17.0.5
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 deployment dari ClusterControl, buka UI ClusterControl di http://[Docker_Host]:5000/clustercontrol, lalu pilih opsi “Deploy” dan ikuti petunjuk yang muncul.
Saat memilih TimescaleDB, 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.
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.
Perhatikan bahwa, jika Anda ingin menambahkan lebih banyak node siaga, Anda dapat melakukannya dari UI ClusterControl di menu Tindakan Cluster.
Dengan cara yang sama, jika Anda menjalankan klaster TimescaleDB di Docker dan Anda ingin ClusterControl mengelolanya agar dapat menggunakan semua fitur sistem ini seperti pemantauan, pencadangan, failover otomatis, dan lebih banyak lagi, Anda cukup menjalankan Wadah ClusterControl di jaringan Docker yang sama dengan wadah basis data. 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.
Satu kemungkinan masalah saat menjalankan container adalah penetapan alamat IP atau nama host. Tanpa alat orkestrasi seperti Kubernetes, alamat IP atau nama host bisa berbeda jika Anda menghentikan node dan membuat container baru sebelum memulainya lagi. Anda akan memiliki alamat IP yang berbeda untuk node lama dan ClusterControl mengasumsikan bahwa semua node berjalan di lingkungan dengan alamat IP atau nama host khusus, jadi setelah alamat IP diubah, Anda harus mengimpor kembali cluster ke ClusterControl. Ada banyak solusi untuk masalah ini, Anda dapat memeriksa tautan ini untuk menggunakan Kubernetes dengan StatefulSet, atau yang ini untuk menjalankan container tanpa alat orkestrasi.
Kesimpulan
Seperti yang dapat kita lihat, penerapan TimescaleDB dengan Docker seharusnya mudah jika Anda tidak ingin mengonfigurasi lingkungan replikasi atau failover dan jika Anda tidak ingin membuat perubahan apa pun pada versi OS atau penginstalan paket database.
Dengan ClusterControl, Anda dapat mengimpor atau men-deploy klaster TimescaleDB dengan Docker menggunakan image OS yang Anda inginkan, serta mengotomatiskan tugas pemantauan dan pengelolaan seperti pencadangan dan failover/pemulihan otomatis.