Cara membuat siaga panas dengan postgresql

Cara membuat siaga panas dengan postgresql

Objektif

Tujuan kami adalah untuk membuat salinan basis data PostgreSQL yang terus-menerus disinkronkan dengan yang asli dan menerima pertanyaan hanya baca.

Sistem Operasi dan Versi Perangkat Lunak

  • Sistem Operasi: Red Hat Enterprise Linux 7.5
  • Perangkat Lunak: Server PostgreSQL 9.2

Persyaratan

Akses istimewa ke sistem master dan slave

Konvensi

  • # - mensyaratkan perintah linux yang diberikan untuk dieksekusi dengan hak istimewa root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
  • $ - Diberikan perintah linux untuk dieksekusi sebagai pengguna biasa

Perkenalan

PostgreSQL adalah RDBMS open source (Sistem Manajemen Database Relasional), dan dengan database apa pun, kebutuhan dapat muncul untuk skala dan menyediakan HA (ketersediaan tinggi). Sebuah sistem tunggal yang menyediakan layanan selalu merupakan titik kegagalan tunggal yang mungkin - dan bahkan dengan sistem virtual, mungkin ada waktu ketika Anda tidak dapat menambahkan lebih banyak sumber daya ke satu mesin untuk mengatasi beban yang terus meningkat. Mungkin juga ada kebutuhan untuk salinan lain dari konten database yang dapat ditanyakan untuk analitik yang sudah berjalan lama, yang tidak cocok untuk dijalankan pada database produksi yang sangat transaksi intensif. Salinan ini bisa menjadi pemulihan sederhana dari cadangan terbaru di mesin lain, tetapi data akan ketinggalan zaman segera setelah dipulihkan.

Dengan membuat salinan database yang terus-menerus mereplikasi kontennya dengan yang asli (disebut master atau primer), tetapi saat melakukan itu menerima dan mengembalikan hasil ke kueri baca saja, kita dapat membuat a siaga panas yang memiliki konten yang sama.

Dalam hal kegagalan pada master, database siaga (atau budak) dapat mengambil alih peran primer, menghentikan sinkronisasi, dan menerima permintaan baca dan tulis, sehingga operasi dapat dilanjutkan, dan master yang gagal dapat dikembalikan ke kehidupan (mungkin mungkin sebagai siaga dengan mengganti cara sinkronisasi). Saat primer dan siaga berjalan, kueri yang tidak berusaha untuk memodifikasi konten basis data dapat dibongkar ke siaga, sehingga sistem secara keseluruhan akan dapat menangani beban yang lebih besar. Namun, perhatikan bahwa akan ada beberapa penundaan - siaga akan berada di belakang master, dengan jumlah waktu yang diperlukan untuk menyinkronkan perubahan. Penundaan ini mungkin waspada tergantung pada pengaturan.

Ada banyak cara untuk membangun sinkronisasi master-slave (atau bahkan master-master) dengan Postgresql, tetapi dalam tutorial ini kami akan mengatur replikasi streaming, menggunakan server postgresql terbaru yang tersedia di repositori Red Hat Red Hat. Proses yang sama umumnya berlaku untuk distribusi lain dan versi RDMBS, tetapi mungkin ada perbedaan mengenai jalur sistem file, paket dan manajer layanan dan semacamnya.



Menginstal perangkat lunak yang diperlukan

Mari kita menginstal postgresql dengan yum ke kedua sistem:

yum menginstal postgresql-server

Setelah instalasi yang berhasil, kita perlu menginisialisasi kedua kelompok basis data:

# PostgreSQL-Setup InitDB Inisialisasi database… . OKE 
Menyalin

Untuk menyediakan startup otomatis untuk database saat boot, kami dapat mengaktifkan layanan di Systemd:

Systemctl Aktifkan PostgreSQL

Kami akan menggunakannya 10.10.10.100 sebagai yang utama, dan 10.10.10.101 Sebagai alamat IP mesin siaga.

Siapkan master

Umumnya merupakan ide yang baik untuk mencadangkan file konfigurasi apa pun sebelum kami membuat perubahan. Mereka tidak mengambil ruang yang layak disebut, dan jika ada yang salah, cadangan file konfigurasi yang berfungsi bisa menjadi penyelamat.

Kita perlu mengedit PG_HBA.conf dengan editor file teks seperti vi atau nano. Kita perlu menambahkan aturan yang akan memungkinkan pengguna database dari siaga untuk mengakses primer. Ini adalah pengaturan sisi server, pengguna belum ada dalam database. Anda dapat menemukan contoh di akhir file yang dikomentari yang terkait dengan replikasi Database:

# Izinkan koneksi replikasi dari localhost, oleh pengguna dengan hak istimewa # replikasi. #local replikasi postgres peer #host replikasi postgres 127.0.0.1/32 Ident #Host Replication Postgres :: 1/128 Ident 

Mari kita tambahkan baris lain ke akhir file, dan tandai dengan komentar sehingga dapat dengan mudah dilihat apa yang diubah dari default:

## myconf: replikasi replikasi host host 10.10.10.101/32 MD5 

Pada rasa topi merah, file tersebut terletak secara default di bawah /var/lib/pgsql/data/ direktori.

Kami juga perlu membuat perubahan pada file konfigurasi utama server database, PostgreSQL.conf, yang terletak di direktori yang sama kami menemukan PG_HBA.conf.

Temukan pengaturan yang ditemukan di tabel di bawah ini, dan memodifikasinya sebagai berikut:



Bagian Setingan awal Pengaturan yang dimodifikasi
Koneksi dan otentikasi #listen_addresses = 'localhost' listen_addresses = '*'
Tulis Log Depan #WAL_LEVEL = minimal wal_level = 'hot_standby'
Tulis Log Depan #archive_mode = off archive_mode = on
Tulis Log Depan #archive_command = " archive_command = 'true'
Replikasi #max_wal_senders = 0 max_wal_senders = 3
Replikasi #hot_standby = off hot_standby = on

Perhatikan bahwa pengaturan di atas dikomentari secara default; Anda perlu tidak berkomentar Dan mengubah nilai -nilai mereka.

Kamu bisa grep nilai yang dimodifikasi untuk verifikasi. Anda harus mendapatkan sesuatu seperti berikut:

Memverifikasi perubahan dengan grep

Sekarang pengaturannya baik -baik saja, mari kita mulai server utama:

# systemctl Mulai postgresql

Dan gunakan psql Untuk membuat pengguna database yang akan menangani replikasi:

# su -postgres -bash -4.2 $ PSQL PSQL (9.2.23) Ketik "bantuan" untuk bantuan. Postgres =# Buat Pengguna Repuser Login Login Terenkripsi Kata Sandi 'SecretPassword' Batas Koneksi -1; Buat peran 

Perhatikan kata sandi yang Anda berikan kepada repuser, Kami akan membutuhkannya di sisi siaga.

Siapkan budak

Kami meninggalkan siaga dengan initdb melangkah. Kami akan bekerja sebagai postgres pengguna, yang superuser dalam konteks database. Kami membutuhkan salinan awal dari database utama, dan kami akan mendapatkannya pg_basebackup memerintah. Pertama, kami menyeka direktori data pada siaga (buat salinan sebelumnya jika Anda mau, tetapi itu hanya database kosong):

$ rm -rf/var/lib/pgsql/data/*

Sekarang kami siap membuat salinan yang konsisten dari yang utama untuk siaga:

$ pg_basebackup -h 10.10.10.100 -u repuser -d/var/lib/pgsql/data/kata sandi: PEMBERITAHUAN: PG_STOP_BACKUP Lengkap, semua segmen WAL yang diperlukan telah diarsipkan 
Menyalin

Kami perlu menentukan alamat IP master setelah -h, dan pengguna yang kami buat untuk replikasi, dalam hal ini repuser. Sebagai yang utama kosong selain pengguna ini yang kami buat, pg_basebackup harus diselesaikan dalam hitungan detik (tergantung pada bandwidth jaringan). Jika terjadi kesalahan, periksa aturan HBA pada primer, kebenaran alamat IP yang diberikan kepada pg_basebackup perintah, dan port 5432 pada primer dapat dicapai dari siaga (misalnya, dengan telnet).

Ketika cadangan selesai, Anda akan melihat bahwa direktori data diisi pada budak, termasuk file konfigurasi (ingat, kami menghapus semuanya dari direktori ini):

# ls/var/lib/pgsql/data/backup_label.pg_clog pg_log pg_serial pg_versial postmaster pg_serial.OPTS BASE PG_HBA.conf pg_multixact pg_snapshots pg_tblspc pg_xlog poster.PID Global PG_IDENT.conf pg_notify pg_stat_tmp pg_twophase postgresql.pemulihan conf.conf 
Menyalin

Sekarang kita perlu melakukan beberapa penyesuaian pada konfigurasi siaga. Alamat IP yang diaktifkan untuk penolakan untuk terhubung dari yang perlu menjadi alamat server master di PG_HBA.conf:

# tail -n2/var/lib/pgsql/data/pg_hba.conf ## myconf: replikasi replikasi host repuser 10.10.10.100/32 MD5 
Menyalin

Perubahan dalam PostgreSQL.conf sama seperti pada master, seperti yang kami salin file itu dengan cadangan juga. Dengan cara ini kedua sistem dapat mengambil peran sebagai master atau siaga mengenai file konfigurasi ini.

Di direktori yang sama, kita perlu membuat file teks yang dipanggil pemulihan.conf, dan tambahkan pengaturan berikut:

# cat/var/lib/pgsql/data/pemulihan.conf standby_mode = 'on' primer_conninfo = 'host = 10.10.10.100 port = 5432 pengguna = Kata sandi repuser = SecretPassword 'trigger_file ='/var/lib/pgsql/trigger_file ' 
Menyalin

Perhatikan bahwa untuk primer_conninfo Pengaturan Kami menggunakan alamat IP dari utama dan kata sandi yang kami berikan repuser di database master. File pemicu hampir dapat dibaca oleh postgres Pengguna Sistem Operasi, dengan nama file yang valid - jika terjadi crash utama file dapat dibuat (dengan menyentuh misalnya) yang akan memicu failover pada siaga, yang berarti database mulai menerima operasi tulis juga.

Jika file ini pemulihan.conf hadir, server akan memasuki mode pemulihan saat startup. Kami memiliki segalanya di tempatnya, sehingga kami dapat memulai siaga, dan melihat apakah semua berfungsi sebagaimana mestinya:

# systemctl Mulai postgresql

Harus membutuhkan waktu lebih banyak dari biasanya untuk mendapatkan prompt kembali. Alasannya adalah bahwa database melakukan pemulihan ke keadaan yang konsisten di latar belakang. Anda dapat melihat kemajuan di logfile utama database (nama file Anda akan berbeda tergantung pada hari dalam seminggu):

$ tailf/var/lib/pgsql/data/pg_log/postgresql-thu.Log Log: Memasuki Mode Standby Log: Streaming Replikasi berhasil terhubung ke log primer: RECOUT dimulai pada 0/3000020 Log: Status pemulihan yang konsisten dicapai pada 0/30000E0 Log: Sistem Basis Data siap menerima koneksi hanya baca hanya baca 
Menyalin

Memverifikasi pengaturan

Sekarang kedua database sedang berjalan dan berjalan, mari kita uji pengaturan dengan membuat beberapa objek di primer. Jika semuanya berjalan dengan baik, benda -benda itu pada akhirnya harus muncul dengan siaga.

Kami dapat membuat beberapa objek sederhana di primer (yang terlihat akrab dengan saya) psql. Kita dapat membuat skrip SQL sederhana di bawah ini yang disebut Sampel.SQL:

-- Buat urutan yang akan berfungsi sebagai PK dari tabel karyawan membuat urutan karyawan_seq mulai dengan 1 kenaikan dengan 1 tidak ada nilai maxvalue 1 cache 1; - Buat tabel karyawan membuat tabel karyawan (emp_id numerik kunci utama default nextval ('karyawan_seq' :: regclass), first_name text not null, last_name text not null, lahir_year numerik bukan nol, lahir_month numerik bukan nol, lahir_dayofmonth numerik bukan nol) ; - masukkan beberapa data ke dalam tabel memasukkan ke dalam karyawan (first_name, last_name, lahir_year, lahir_month, lahir_dayofmonth) nilai ('emily', 'James', 1983,03,20); masukkan ke karyawan (first_name, last_name, lahir_year, lahir_month, lahir_dayofmonth) nilai ('John', 'Smith', 1990,08,12); 
Menyalin

Ini adalah praktik yang baik untuk menjaga modifikasi struktur basis data dalam skrip (secara opsional didorong ke dalam repositori kode) juga, untuk referensi nanti. Terbayar saat Anda perlu tahu apa yang Anda modifikasi, dan kapan. Kami sekarang dapat memuat skrip ke dalam database:

$ psql < sample.sql CREATE SEQUENCE NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "employees_pkey" for table "employees" CREATE TABLE INSERT 0 1 INSERT 0 1 
Menyalin

Dan kami dapat meminta tabel yang kami buat, dengan dua catatan dimasukkan:

Postgres =# Pilih * dari karyawan; emp_id | first_name | last_name | Birth_year | Birth_month | lahir_dayofmonth --------+------------+-----------+------------+- -----------+------------------ 1 | Emily | James | 1983 | 3 | 20 2 | John | Smith | 1990 | 8 | 12 (2 baris) 
Menyalin

Mari kita minta siaga untuk data yang kami harapkan identik dengan yang utama. Berdaya kita dapat menjalankan kueri di atas:

Postgres =# Pilih * dari karyawan; emp_id | first_name | last_name | Birth_year | Birth_month | lahir_dayofmonth --------+------------+-----------+------------+- -----------+------------------ 1 | Emily | James | 1983 | 3 | 20 2 | John | Smith | 1990 | 8 | 12 (2 baris) 
Menyalin

Dan dengan itu kami selesai, kami memiliki konfigurasi siaga panas yang berjalan dengan satu server primer dan satu siaga, menyinkronkan dari master ke slave, sementara kueri baca saja diizinkan di Slave.

Kesimpulan

Ada banyak cara untuk membuat replikasi dengan postgresql, dan ada banyak tuneable mengenai replikasi streaming yang kami atur juga untuk membuat konfigurasi lebih kuat, gagal, atau bahkan memiliki lebih banyak anggota. Tutorial ini tidak berlaku untuk sistem produksi - ini dimaksudkan untuk menunjukkan beberapa pedoman umum tentang apa yang terlibat dalam pengaturan semacam itu.

Ingatlah bahwa alat tersebut pg_basebackup hanya tersedia dari PostgreSQL versi 9.1+. Anda juga dapat mempertimbangkan untuk menambahkan pengarsipan Wal yang valid ke konfigurasi, tetapi demi kesederhanaan, kami melewatkannya dalam tutorial ini untuk menjaga hal -hal untuk melakukan minimal sambil mencapai sepasang sistem sinkronisasi yang berfungsi. Dan akhirnya satu hal lagi yang perlu diperhatikan: siaga bukan cadangan. Memiliki cadangan yang valid setiap saat.

Tutorial Linux Terkait:

  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Ubuntu 20.04 Instalasi PostgreSQL
  • Ubuntu 22.04 Instalasi PostgreSQL
  • Pengantar Otomatisasi Linux, Alat dan Teknik
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 20.04 FOSSA FOSSA Linux
  • File Konfigurasi Linux: 30 Teratas Paling Penting
  • Unduh Linux
  • Can Linux mendapatkan virus? Menjelajahi kerentanan Linux…
  • Mint 20: Lebih baik dari Ubuntu dan Microsoft Windows?
  • Hal -hal yang harus diinstal pada Ubuntu 22.04