Seperti yang baru-baru ini kami umumkan, ClusterControl 1.7.4 memiliki fitur baru yang disebut Replikasi Cluster-ke-Cluster. Ini memungkinkan Anda untuk menjalankan replikasi di antara dua kluster otonom. Untuk informasi lebih detail, silakan merujuk ke pengumuman yang disebutkan di atas.
Kita akan melihat cara menggunakan fitur baru ini untuk cluster PostgreSQL yang sudah ada. Untuk tugas ini, kami akan menganggap Anda telah menginstal ClusterControl dan Master Cluster telah di-deploy menggunakannya.
Persyaratan untuk Master Cluster
Ada beberapa persyaratan agar Master Cluster dapat berfungsi:
- PostgreSQL 9.6 atau lebih baru.
- Harus ada server PostgreSQL dengan peran ClusterControl 'Master'.
- Saat menyiapkan Klaster Budak, kredensial Admin harus sama dengan Klaster Master.
Menyiapkan Master Cluster
Kluster Master harus memenuhi persyaratan yang disebutkan di atas.
Tentang persyaratan pertama, pastikan Anda menggunakan versi PostgreSQL yang benar di Master Cluster dan memilih yang sama untuk Slave Cluster.
$ psql
postgres=# select version();
PostgreSQL 11.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit
Jika Anda perlu menetapkan peran master ke node tertentu, Anda dapat melakukannya dari UI ClusterControl. Buka ClusterControl -> Pilih Master Cluster -> Nodes -> Pilih Node -> Node Actions -> Promote Slave.
Dan terakhir, selama pembuatan Slave Cluster, Anda harus menggunakan admin yang sama kredensial yang Anda gunakan saat ini di Master Cluster. Anda akan melihat tempat untuk menambahkannya di bagian berikut.
Membuat Cluster Slave dari UI ClusterControl
Untuk membuat Cluster Slave baru, buka ClusterControl -> Pilih Cluster -> Cluster Actions -> Buat Cluster Slave.
Kluster Budak akan dibuat dengan mengalirkan data dari Kluster Master saat ini.
Di bagian ini, Anda juga harus memilih node master dari cluster saat ini dari mana data akan direplikasi.
Saat Anda melanjutkan ke langkah berikutnya, Anda harus menentukan Pengguna, Kunci atau Kata sandi dan port untuk terhubung dengan SSH ke server Anda. Anda juga memerlukan nama untuk Slave Cluster Anda dan jika Anda ingin ClusterControl menginstal perangkat lunak dan konfigurasi yang sesuai untuk Anda.
Setelah menyiapkan informasi akses SSH, Anda harus menentukan versi database, datadir, port, dan kredensial admin. Karena akan menggunakan replikasi streaming, pastikan Anda menggunakan versi database yang sama, dan seperti yang kami sebutkan sebelumnya, kredensial harus sama dengan yang digunakan oleh Master Cluster. Anda juga dapat menentukan repositori mana yang akan digunakan.
Pada langkah ini, Anda perlu menambahkan server ke Slave Cluster baru . Untuk tugas ini, Anda dapat memasukkan Alamat IP atau Nama Host dari node database.
Anda dapat memantau status pembuatan Klaster Budak baru Anda dari Monitor aktivitas ClusterControl. Setelah tugas selesai, Anda dapat melihat cluster di layar utama ClusterControl.
Mengelola Replikasi Cluster-to-Cluster Menggunakan UI ClusterControl
Sekarang Anda memiliki dan menjalankan Replikasi Cluster-to-Cluster Anda, ada beberapa tindakan yang harus dilakukan pada topologi ini menggunakan ClusterControl.
Membangun Kembali Cluster Budak
Untuk membangun kembali Cluster Slave, buka ClusterControl -> Pilih Slave Cluster -> Nodes -> Pilih Node yang terhubung ke Master Cluster -> Node Actions -> Rebuild Replication Slave.
ClusterControl akan melakukan langkah-langkah berikut:
- Hentikan Server PostgreSQL
- Hapus konten dari direktori datanya
- Streaming cadangan dari Master ke Slave menggunakan pg_basebackup
- Mulai Budak
Hentikan/Mulai Replikasi Budak
Menghentikan dan memulai replikasi di PostgreSQL berarti menjeda dan melanjutkannya, tetapi kami menggunakan istilah ini agar konsisten dengan teknologi basis data lain yang kami dukung.
Fungsi ini akan segera tersedia untuk digunakan dari UI ClusterControl. Tindakan ini akan menggunakan fungsi pg_wal_replay_pause dan pg_wal_replay_resume PostgreSQL untuk melakukan tugas ini.
Sementara itu, Anda dapat menggunakan solusi untuk menghentikan dan memulai replikasi slave, menghentikan dan memulai node database dengan cara yang mudah menggunakan ClusterControl.
Buka ClusterControl -> Pilih Slave Cluster -> Node -> Pilih Node -> Tindakan Node -> Stop Node/Mulai Node. Tindakan ini akan menghentikan/memulai layanan database secara langsung.
Mengelola Replikasi Cluster-to-Cluster Menggunakan CLI ClusterControl
Di bagian sebelumnya, Anda dapat melihat cara mengelola Replikasi Cluster-to-Cluster menggunakan UI ClusterControl. Sekarang, mari kita lihat bagaimana melakukannya dengan menggunakan baris perintah.
Catatan:Seperti yang kami sebutkan di awal blog ini, kami akan menganggap Anda telah menginstal ClusterControl dan Master Cluster telah digunakan untuk menggunakannya.
Buat Cluster Budak
Pertama, mari kita lihat contoh perintah untuk membuat Slave Cluster dengan menggunakan ClusterControl CLI:
$ s9s cluster --create --cluster-name=PostgreSQL1rep --cluster-type=postgresql --provider-version=11 --nodes="192.168.100.133" --os-user=root --os-key-file=/root/.ssh/id_rsa --db-admin=admin --db-admin-passwd=********* --vendor=postgres --remote-cluster-id=21 --log
Sekarang Anda menjalankan proses slave create Anda, mari kita lihat setiap parameter yang digunakan:
- Cluster:Untuk membuat daftar dan memanipulasi cluster.
- Buat:Buat dan instal cluster baru.
- Cluster-name:Nama dari Cluster Budak yang baru.
- Cluster-type:Jenis cluster yang akan dipasang.
- Versi penyedia:Versi perangkat lunak.
- Node:Daftar node baru di Slave Cluster.
- Os-user:Nama pengguna untuk perintah SSH.
- Os-key-file:File kunci yang digunakan untuk koneksi SSH.
- Db-admin:Nama pengguna admin database.
- Db-admin-passwd:Kata sandi untuk admin database.
- Remote-cluster-id:ID Cluster Master untuk Replikasi Cluster-to-Cluster.
- Log:Tunggu dan pantau pesan pekerjaan.
Menggunakan tanda --log, Anda akan dapat melihat log secara real time:
Verifying job parameters.
192.168.100.133: Checking ssh/sudo.
192.168.100.133: Checking if host already exists in another cluster.
Checking job arguments.
Found top level master node: 192.168.100.133
Verifying nodes.
Checking nodes that those aren't in another cluster.
Checking SSH connectivity and sudo.
192.168.100.133: Checking ssh/sudo.
Checking OS system tools.
Installing software.
Detected centos (core 7.5.1804).
Data directory was not specified. Using directory '/var/lib/pgsql/11/data'.
192.168.100.133:5432: Configuring host and installing packages if neccessary.
...
Cluster 26 is running.
Generated & set RPC authentication token.
Membangun Kembali Cluster Budak
Anda dapat membangun kembali Cluster Slave menggunakan perintah berikut:
$ s9s replication --stage --master="192.168.100.125" --slave="192.168.100.133" --cluster-id=26 --remote-cluster-id=21 --log
Parameternya adalah:
- Replikasi:Untuk memantau dan mengontrol replikasi data.
- Tahap:Panggung/Bangun Ulang Budak Replikasi.
- Master:Master replikasi di cluster master.
- Slave:Slave replikasi di cluster slave.
- Cluster-id:ID Cluster Budak.
- Remote-cluster-id:ID Cluster Master.
- Log:Tunggu dan pantau pesan pekerjaan.
Log tugas harus serupa dengan yang ini:
Rebuild replication slave 192.168.100.133:5432 from master 192.168.100.125:5432.
Remote cluster id = 21
192.168.100.125: Checking size of '/var/lib/pgsql/11/data'.
192.168.100.125: /var/lib/pgsql/11/data size is 201.13 MiB.
192.168.100.133: Checking free space in '/var/lib/pgsql/11/data'.
192.168.100.133: /var/lib/pgsql/11/data has 28.78 GiB free space.
192.168.100.125:5432(master): Verifying PostgreSQL version.
192.168.100.125: Verifying the timescaledb-postgresql-11 installation.
192.168.100.125: Package timescaledb-postgresql-11 is not installed.
Setting up replication 192.168.100.125:5432->192.168.100.133:5432
Collecting server variables.
192.168.100.125:5432: Using the pg_hba.conf contents for the slave.
192.168.100.125:5432: Will copy the postmaster.opts to the slave.
192.168.100.133:5432: Updating slave configuration.
Writing file '192.168.100.133:/var/lib/pgsql/11/data/postgresql.conf'.
192.168.100.133:5432: GRANT new node on members to do pg_basebackup.
192.168.100.125:5432: granting 192.168.100.133:5432.
192.168.100.133:5432: Stopping slave.
192.168.100.133:5432: Stopping PostgreSQL node.
192.168.100.133: waiting for server to shut down.... done
server stopped
…
192.168.100.133: waiting for server to start....2019-11-12 15:51:11.767 UTC [8005] LOG: listening on IPv4 address "0.0.0.0", port 5432
2019-11-12 15:51:11.767 UTC [8005] LOG: listening on IPv6 address "::", port 5432
2019-11-12 15:51:11.769 UTC [8005] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2019-11-12 15:51:11.774 UTC [8005] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
2019-11-12 15:51:11.798 UTC [8005] LOG: redirecting log output to logging collector process
2019-11-12 15:51:11.798 UTC [8005] HINT: Future log output will appear in directory "log".
done
server started
192.168.100.133:5432: Grant cluster members on the new node (for failover).
Grant connect access for new host in cluster.
Adding grant on 192.168.100.125:5432.
192.168.100.133:5432: Waiting until the service is started.
Replication slave job finished.
Hentikan/Mulai Replikasi Budak
Seperti yang kami sebutkan di bagian UI, berhenti dan mulai replikasi di PostgreSQL berarti jeda dan lanjutkan, tetapi kami menggunakan istilah ini untuk menjaga paralelisme dengan teknologi lain.
Anda dapat berhenti untuk mereplikasi data dari Master Cluster dengan cara ini:
$ s9s replication --stop --slave="192.168.100.133" --cluster-id=26 --log
Anda akan melihat ini:
192.168.100.133:5432: Pausing recovery of the slave.
192.168.100.133:5432: Successfully paused recovery on the slave using select pg_wal_replay_pause().
Dan sekarang, Anda dapat memulainya lagi:
$ s9s replication --start --slave="192.168.100.133" --cluster-id=26 --log
Jadi, Anda akan melihat:
192.168.100.133:5432: Resuming recovery on the slave.
192.168.100.133:5432: Collecting replication statistics.
192.168.100.133:5432: Slave resumed recovery successfully using select pg_wal_replay_resume().
Sekarang, mari kita periksa parameter yang digunakan.
- Replikasi:Untuk memantau dan mengontrol replikasi data.
- Stop/Start:Untuk membuat slave berhenti/mulai mereplikasi.
- Slave:Node slave replikasi.
- Cluster-id:ID cluster tempat node slave berada.
- Log:Tunggu dan pantau pesan pekerjaan.
Kesimpulan
Fitur ClusterControl baru ini akan memungkinkan Anda dengan cepat mengatur replikasi antara cluster PostgreSQL yang berbeda, dan mengelola setup dengan cara yang mudah dan bersahabat. Tim pengembang Somenines sedang berupaya menyempurnakan fitur ini, jadi setiap ide atau saran akan sangat diterima.